You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
think-library/src/service/jd/UnionService.php

531 lines
14 KiB

2 years ago
<?php
// +----------------------------------------------------------------------
// | ThinkLibrary 6.0 for ThinkPhP 6.0
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 [ https://www.dtapp.net ]
// +----------------------------------------------------------------------
// | 官方网站: https://gitee.com/liguangchun/ThinkLibrary
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// +----------------------------------------------------------------------
// | gitee 仓库地址 https://gitee.com/liguangchun/ThinkLibrary
// | github 仓库地址 https://github.com/GC0202/ThinkLibrary
// | Packagist 地址 https://packagist.org/packages/liguangchun/think-library
// +----------------------------------------------------------------------
namespace DtApp\ThinkLibrary\service\jd;
use DtApp\ThinkLibrary\exception\DtaException;
use DtApp\ThinkLibrary\facade\Strings;
use DtApp\ThinkLibrary\Service;
use think\exception\HttpException;
/**
* 京东联盟
* Class UnionService
* @package DtApp\ThinkLibrary\service\Jd
*/
class UnionService extends Service
{
/**
* 接口地址
* @var string
*/
private $url = "https://router.jd.com/api";
/**
* API接口名称
* @var
*/
private $method = '', $response = '';
/**
* 联盟分配给应用的appkey
* @var
*/
private $app_key = '';
/**
* 联盟分配给应用的secretkey
* @var
*/
private $secret_key = '';
/**
* 根据API属性标签如果需要授权则此参数必传;如果不需要授权,则此参数不需要传
* @var
*/
private $access_token = '';
/**
* 响应格式暂时只支持json
* @var string
*/
private $format = "json";
/**
* API协议版本请根据API具体版本号传入此参数一般为1.0
* @var string
*/
private $v = "1.0";
/**
* 签名的摘要算法暂时只支持md5
* @var string
*/
private $sign_method = "md5";
/**
* 响应内容
* @var
*/
private $output;
/**
* 需要发送的的参数
* @var
*/
private $param, $params;
/**
* 联盟分配给应用的appkey
* @param string $appKey
* @return $this
*/
public function appKey(string $appKey): self
{
$this->app_key = $appKey;
return $this;
}
/**
* 联盟分配给应用的secretkey
* @param string $secretKey
* @return $this
*/
public function secretKey(string $secretKey): self
{
$this->secret_key = $secretKey;
return $this;
}
/**
* 根据API属性标签如果需要授权则此参数必传;如果不需要授权,则此参数不需要传
* @param string $accessToken
* @return $this
*/
public function accessToken(string $accessToken): self
{
$this->access_token = $accessToken;
return $this;
}
/**
* 组参
* @param array $param
* @return $this
*/
public function param(array $param): self
{
$this->param = $param;
return $this;
}
/**
* 网络请求
* @throws DtaException
*/
private function http(): void
{
//生成签名
$sign = $this->createSign();
//组织参数
$strParam = $this->createStrParam();
$strParam .= 'sign=' . $sign;
//访问服务
$result = file_get_contents("{$this->url}?{$strParam}");
var_dump("{$this->url}?{$strParam}");
$result = json_decode($result, true);
$this->output = $result;
}
/**
* 获取配置信息
* @return $this
*/
private function getConfig(): self
{
$this->app_key = config('dtapp.jd.union.app_key');
$this->secret_key = config('dtapp.jd.union.secret_key');
return $this;
}
/**
* 网站/APP获取推广链接接口
* https://union.jd.com/openplatform/api/10421
* @return $this
*/
public function promotionCommonGet(): self
{
$this->method = 'jd.union.open.promotion.common.get';
return $this;
}
/**
* 社交媒体获取推广链接接口【申请】
* https://union.jd.com/openplatform/api/10424
* @return $this
*/
public function promotionBySubUnionIdGet(): self
{
$this->method = 'jd.union.open.promotion.bysubunionid.get';
return $this;
}
/**
* 工具商获取推广链接接口【申请】
* https://union.jd.com/openplatform/api/10425
* @return $this
*/
public function promotionByUnionIdGet(): self
{
$this->method = 'jd.union.open.promotion.byunionid.get';
return $this;
}
/**
* 订单行查询接口
* https://union.jd.com/openplatform/api/12707
* @return $this
*/
public function orderRowQuery(): self
{
$this->method = 'jd.union.open.order.row.query';
return $this;
}
/**
* 奖励订单查询接口【申请】
* https://union.jd.com/openplatform/api/11781
* @return $this
*/
public function orderBonusQuery(): self
{
$this->method = 'jd.union.open.order.bonus.query';
return $this;
}
/**
* 创建推广位【申请】
* https://union.jd.com/openplatform/api/10429
* @return $this
*/
public function positionCreate(): self
{
$this->method = 'jd.union.open.position.create';
return $this;
}
/**
* 查询推广位【申请】
* https://union.jd.com/openplatform/api/10428
* @return $this
*/
public function positionQuery(): self
{
$this->method = 'jd.union.open.position.query';
return $this;
}
/**
* 获取PID【申请】
* https://union.jd.com/openplatform/api/10430
* @return $this
*/
public function userPidGet(): self
{
$this->method = 'jd.union.open.user.pid.get';
return $this;
}
/**
* 关键词商品查询接口【申请】
* https://union.jd.com/openplatform/api/10421
* @return $this
*/
public function goodsQuery(): self
{
$this->method = 'jd.union.open.goods.query';
return $this;
}
/**
* 京粉精选商品查询接口
* https://union.jd.com/openplatform/api/10417
* @return $this
*/
public function goodsJIngFenQuery(): self
{
if (!isset($this->param['pageIndex'])) {
$this->param['pageIndex'] = 1;
}
if (!isset($this->param['pageSize'])) {
$this->param['pageSize'] = 20;
}
$this->method = 'jd.union.open.goods.jingfen.query';
return $this;
}
/**
* 根据skuid查询商品信息接口
* https://union.jd.com/openplatform/api/10422
* @return $this
*/
public function goodsPromotionGoodsInfoQuery(): self
{
$this->method = 'jd.union.open.goods.promotiongoodsinfo.query';
return $this;
}
/**
* 礼金创建【申请】
* https://union.jd.com/openplatform/api/12246
* @return $this
*/
public function couponGiftGet(): self
{
$this->method = 'jd.union.open.coupon.gift.get';
return $this;
}
/**
* 礼金停止【申请】
* https://union.jd.com/openplatform/api/12240
* @return $this
*/
public function couponGiftStop(): self
{
$this->method = 'jd.union.open.coupon.gift.stop';
return $this;
}
/**
* 礼金效果数据
* https://union.jd.com/openplatform/api/12248
* @return $this
*/
public function statisticsGifTCouponQuery(): self
{
$this->method = 'jd.union.open.statistics.giftcoupon.query';
return $this;
}
/**
* 自定义接口
* @param string $method
* @return $this
*/
public function setMethod($method = ''): self
{
$this->method = $method;
return $this;
}
/**
* 返回数组数据
* @return array|mixed
* @throws DtaException
*/
public function toArray()
{
//首先检测是否支持curl
if (!extension_loaded("curl")) {
throw new HttpException(404, '请开启curl模块');
}
if (empty($this->app_key)) {
$this->getConfig();
}
if (empty($this->app_key)) {
throw new DtaException('请检查app_key参数');
}
if (empty($this->method)) {
throw new DtaException('请检查method参数');
}
$this->params['method'] = $this->method;
$this->params['app_key'] = $this->app_key;
$this->params['timestamp'] = date('Y-m-d H:i:s');
$this->params['format'] = $this->format;
$this->params['v'] = $this->v;
$this->params['sign_method'] = $this->sign_method;
$this->params['param_json'] = json_encode($this->param, JSON_UNESCAPED_UNICODE);
$this->http();
$response = Strings::replace('.', '_', $this->method) . "_response";
if (isset($this->output[$response]['result'])) {
if (is_array($this->output[$response]['result'])) {
return $this->output[$response]['result'];
}
if (is_object($this->output[$response]['result'])) {
$this->output = json_encode($this->output[$response]['result'], JSON_UNESCAPED_UNICODE);
}
return json_decode($this->output[$response]['result'], true);
}
if (is_array($this->output)) {
return $this->output;
}
if (is_object($this->output)) {
$this->output = json_encode($this->output, JSON_UNESCAPED_UNICODE);
}
return json_decode($this->output, true);
}
/**
* 签名
* @return string
* @throws DtaException
*/
private function createSign(): string
{
if (empty($this->secret_key)) {
$this->getConfig();
}
if (empty($this->secret_key)) {
throw new DtaException('请检查secret_key参数');
}
$sign = $this->secret_key;
ksort($this->params);
foreach ($this->params as $key => $val) {
if ($key !== '' && $val !== '') {
$sign .= $key . $val;
}
}
$sign .= $this->secret_key;
$sign = strtoupper(md5($sign));
return $sign;
}
/**
* 组参
* @return string
*/
private function createStrParam(): string
{
$strParam = '';
foreach ($this->params as $key => $val) {
if ($key !== '' && $val !== '') {
$strParam .= $key . '=' . urlencode($val) . '&';
}
}
return $strParam;
}
/**
* 获取频道ID
* @return array[]
*/
public function getEliteIdList(): array
{
return [
[
// https://union.jd.com/openplatform/api/10417
'name' => '京粉精选',
'list' => [
[
'name' => '好券商品',
'elite_id' => 1
],
[
'name' => '超级大卖场',
'elite_id' => 2
],
[
'name' => '9.9专区',
'elite_id' => 10
],
[
'name' => '热销爆品',
'elite_id' => 22
],
[
'name' => '为你推荐',
'elite_id' => 23
],
[
'name' => '数码家电',
'elite_id' => 24
],
[
'name' => '超市',
'elite_id' => 25
],
[
'name' => '母婴玩具',
'elite_id' => 26
],
[
'name' => '家具日用',
'elite_id' => 27
],
[
'name' => '美妆穿搭',
'elite_id' => 28
],
[
'name' => '医药保健',
'elite_id' => 29
],
[
'name' => '图书文具',
'elite_id' => 30
],
[
'name' => '今日必推',
'elite_id' => 31
],
[
'name' => '品牌好货',
'elite_id' => 32
],
[
'name' => '秒杀商品',
'elite_id' => 33
],
[
'name' => '拼购商品',
'elite_id' => 34
],
[
'name' => '高收益',
'elite_id' => 40
],
[
'name' => '自营热卖榜',
'elite_id' => 41
],
[
'name' => '新品首发',
'elite_id' => 109
],
[
'name' => '自营',
'elite_id' => 110
],
[
'name' => '首购商品',
'elite_id' => 125
],
[
'name' => '高佣榜单',
'elite_id' => 129
],
[
'name' => '视频商品',
'elite_id' => 130
],
]
],
];
}
}