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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?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
],
]
],
];
}
}