京东联盟API简易PHP接口类

https://union.jd.com/helpcenter/13246-13247-46301

官方默认只有java的sdk

<?php
/**
 * Created by PhpStorm.
 * User: Leestar
 * Mail: lixin9610@126.com
 */

namespace app\common;

use think\facade\Log;

/**
 * 京东联盟
 * Class JdUnion
 * @package app\common
 */
class JdUnion
{
    const APP_KEY = '主体appkey';
    const SECRET_KEY = '主体secret';
    const URL = 'https://router.jd.com/api';

    /**
     * 根据关键字返回商品列表
     * https://union.jd.com/openplatform/debug/10420
     * @param array $params 见文档的业务入参
     * @return bool|array
     */
    public static function goodsQuery($params)
    {
        $res = self::query('jd.union.open.goods.query', [
            'goodsReqDTO' => $params,
        ]);
        if (isset($res['jd_union_open_goods_query_response']) && $res['jd_union_open_goods_query_response']['code'] == '0') {
            $temp = json_decode($res['jd_union_open_goods_query_response']['result'], true);
            if ($temp['code'] == 200) {
                return $temp;
            }
        }
        Log::write($res);
        return false;
    }

    /**
     * 社交媒体获取推广链接接口【申请】
     * https://union.jd.com/openplatform/api/10424
     * @param int $skuid 商品id
     * @return bool|array
     */
    public static function promotionUrl($skuid)
    {
        $res = self::query('jd.union.open.promotion.bysubunionid.get', [
            'promotionCodeReq' => [
                'materialId' => 'https://wqitem.jd.com/item/view?sku=' . $skuid,
                'positionId' => 推广位id
            ],
        ]);
        if (isset($res['jd_union_open_promotion_bysubunionid_get_response']) && $res['jd_union_open_promotion_bysubunionid_get_response']['code'] == '0') {
            return json_decode($res['jd_union_open_promotion_bysubunionid_get_response']['result'], true);
        } else {
            Log::write($res);
            return false;
        }
    }

    /**
     * 京粉精选商品查询接口
     * https://union.jd.com/openplatform/api/10417
     * @param array $params 见文档的业务入参
     * @return bool|array
     */
    public static function jingFenQuery($params)
    {
        $res = self::query('jd.union.open.goods.jingfen.query', [
            'goodsReq' => $params,
        ]);
        if (isset($res['jd_union_open_goods_jingfen_query_response']) && $res['jd_union_open_goods_jingfen_query_response']['code'] == '0') {
            $temp = json_decode($res['jd_union_open_goods_jingfen_query_response']['result'], true);
            if ($temp['code'] == 200) {
                return $temp;
            }
        }
        Log::write($res);
        return false;
    }

    /**
     * 基础查询方法
     * @param string $method 方法名
     * @param array $business_data 业务入参
     * @return array
     */
    private static function query($method, $business_data)
    {
        //业务参数
        $param_json = json_encode($business_data);
        //系统参数
        $system_data = [
            'v'            => '1.0',
            'method'       => $method,
            'access_token' => '',
            'app_key'      => self::APP_KEY,
            'sign_method'  => 'md5',
            'format'       => 'json',
            'timestamp'    => date("Y-m-d H:i:s"),
            'sign'         => '',
            'param_json'   => $param_json
        ];
        //签名
        $orderData = self::paramOrder($system_data);
        $sign = self::paramSign($orderData);
        $system_data['sign'] = $sign;
        return json_decode(self::post($system_data), true);
    }

    //排序ksort
    private static function paramOrder($params)
    {
        ksort($params);
        $stringToBeSigned = "";
        $i = 0;
        foreach ($params as $k => $v) {
            if (false === self::checkEmpty($v)) {
                $v = self::characet($v, 'utf-8');
                if ($i == 0) {
                    $stringToBeSigned .= "$k" . "$v";
                } else {
                    $stringToBeSigned .= "$k" . "$v";
                }
                $i++;
            }
        }
        unset ($k, $v);
        return $stringToBeSigned;
    }

    //为空检查
    private static function checkEmpty($value)
    {
        if (!isset($value))
            return true;
        if ($value === null)
            return true;
        if (trim($value) === "")
            return true;
        return false;
    }

    //编码设置
    private static function characet($data, $targetCharset)
    {
        if (!empty($data)) {
            $fileType = 'utf-8';
            if (strcasecmp($fileType, $targetCharset) != 0) {
                $data = mb_convert_encoding($data, $targetCharset, $fileType);
            }
        }
        return $data;
    }

    //签名
    private static function paramSign($params)
    {
        $str = self::SECRET_KEY . $params . self::SECRET_KEY;
        $sign = md5($str);
        return strtoupper($sign);
    }

    //基于curl提交
    private static function post($param)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
}

 

参考:

https://blog.csdn.net/u013252962/article/details/100972707

 
posted @ 2020-06-28 17:19  leestar54  阅读(1363)  评论(0编辑  收藏  举报