>  기사  >  백엔드 개발  >  PHP는 JD Alliance Kepler 및 Zeus API 템플릿을 호출합니다.

PHP는 JD Alliance Kepler 및 Zeus API 템플릿을 호출합니다.

不言
不言원래의
2018-04-08 13:36:004910검색

이 글은 JD Alliance Kepler와 Zeus API 템플릿을 호출하는 PHP의 내용을 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구들이 참고할 수 있습니다.

JD Kepler의 Appkey와 AppSecret은 여기에서 볼 수 있습니다. (먼저 애플리케이션을 만들어야 합니다.) ): http://kepler.jd.com/console/app/app_list.action
인증 소개는 여기: http://kepler.jd.com/console/docCenterCatalog/docContent?channelId=17

/*开普勒类*/
class KeplerApi{
    private $appKey = 'YourKey';    //  你的Key
    private $appScret = 'YourSecret';   //  你的Secret
    private $app_token_json = '{}'; //  第一次需要手动授权获取京东Token然后粘贴到这里
     /**
     * 获取开普勒接口数据
     * @param string $apiUrl    要获取的api
     * @param string $param_json   该api需要的参数
     * @param string $version   版本可选为 2.0
     * @param bool $get 是否使用get,默认为post方式
     * @return mixed    京东返回的json格式的数据
     */
    public function GetKelperApiData($apiUrl='',$param_json = array(),$version='1.0',$get=false){

        $API['access_token'] = $this->refreshAccessToken(); //  生成的access_token,30天一换
        $API['app_key'] = $this->appKey;
        $API['method'] = $apiUrl;
        $API['param_json'] = json_encode($param_json);
        $API['sign_method'] = 'md5';
        $API['timestamp'] = date('Y-m-d H:i:s',time());
        $API['v'] = $version;
        ksort($API);    //  排序
        $str = '';      //  拼接的字符串
        foreach ($API as $k=>$v) $str.=$k.$v;
        $sign = strtoupper(md5($this->appScret.$str.$this->appScret));    //  生成签名    MD5加密转大写
        if ($get){
            //  用get方式拼接URL
            $url = "https://router.jd.com/api?";
            foreach ($API as $k=>$v)
                $url .= urlencode($k) . '=' . urlencode($v) . '&';  //  把参数和值url编码
            $url .= 'sign='.$sign;  //  接上签名
            $res = self::curl_get($url);
        }else{
            //  用post方式获取数据
            $url = "https://router.jd.com/api";
            $API['sign'] = $sign;
            $res = self::curl_post($url,$API);
        }
        return $res;
    }
    //  刷新accessToken
    private function refreshAccessToken(){
        $filePath = dirname(dirname(__FILE__)).'/Config/KelperToken.config';     //  Token文本保存路径
        if (file_exists($filePath)){
            $handle = fopen($filePath,'r');
            $tokenJson = fread($handle,8142);
        }else{
            //  插入默认的token
            fwrite(fopen($filePath,'w'),$this->app_token_json);
            $tokenJson = $this->app_token_json;
        }

        if (substr($tokenJson, 0,3) == pack('CCC',0xef,0xbb,0xbf)) {
            $tokenJson = substr($tokenJson, 3);
        }
        $res = json_decode(trim($tokenJson),true);   //  解析不了可能是文本出了问题,注意BOM头
        //  判断
        if ($res['code'] == 0){
            if ($res['expires_in']*1000 + $res['time']  <  self::getMillisecond() - 86400000){    //  access_token失效前一天
                //  获取刷新token的url
                $refreshUrl = "https://kploauth.jd.com/oauth/token?grant_type=oauth_refresh_token";//&app_key=yourappkey&app_secret=yourappsecret&refresh_token=xxxxxxxx
                $refreshUrl .= &#39;&app_key=&#39;.$this->appKey;
                $refreshUrl .= '&app_secret='.$this->appScret;
                $refreshUrl .= '&refresh_token='.$res['refresh_token'];
                //  获取新的token数据
                $newAccessTokenJson = self::curl_get($refreshUrl);
                //  写入文本
                fwrite(fopen($filePath,'w'),$newAccessTokenJson);
                //  解析成数组
                $newAccessTokenArr = json_decode($newAccessTokenJson,true);
                $accessToken = $newAccessTokenArr['access_token'];
            }else{
                $accessToken = $res['access_token'];
            }
            return $accessToken;
        }else{
            //  如果refresh_token过期,将会返回错误码code:2011;msg:refresh_token过期
            return $res['msg'];
        }
    }
    //  get请求
    private static function curl_get($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
    //  post请求
    private static function curl_post($url,$curlPost){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
    //  获取13位时间戳
    private static function  getMillisecond(){
        list($t1, $t2) = explode(' ', microtime());
        return sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
    }
}

Zeus 인터페이스 도 비슷하지만 도메인 이름과 승인 방법이 변경되었습니다

/**
 * Class ZeusApi 宙斯接口调用类
 */
class ZeusApi
{
    private $appKey = 'YourKey';    //  你的Key
    private $appScret = 'YourSecret';   //  你的Secret
    private $app_token_json = '{}'; //  第一次需要手动授权获取京东Token然后粘贴到这里

    /**
     * 获取宙斯接口数据
     * @param string $apiUrl    要获取的api
     * @param string $param_json    该api需要的参数,使用json格式,默认为 {}
     * @param string $version   版本可选为 2.0
     * @param bool $get 是否使用get,默认为post方式
     * @return mixed    京东返回的json格式的数据
     */
    public function GetZeusApiData($apiUrl='',$param_json = array(),$version='1.0',$get=false){
        $API['access_token'] = $this->refreshAccessToken(); //  生成的access_token,30天一换
        $API['app_key'] = $this->appKey;
        $API['method'] = $apiUrl;
        $API['360buy_param_json'] = json_encode($param_json);
        $API['timestamp'] = date('Y-m-d H:i:s',time());
        $API['v'] = $version;
        ksort($API);    //  排序
        $str = '';      //  拼接的字符串
        foreach ($API as $k=>$v) $str.=$k.$v;
        $sign = strtoupper(md5($this->appScret.$str.$this->appScret));    //  生成签名    MD5加密转大写
        if ($get){
            //  用get方式拼接URL
            $url = "https://api.jd.com/routerjson?";
            foreach ($API as $k=>$v)
                $url .= urlencode($k) . '=' . $v . '&';  //  把参数和值url编码
            $url .= 'sign='.$sign;
            $res = self::curl_get($url);
        }else{
            //  用post方式获取数据
            $url = "https://api.jd.com/routerjson?";
            $API['sign'] = $sign;
            $res = self::curl_post($url,$API);
        }
        return $res;
    }
    //  刷新accessToken
    private function refreshAccessToken(){
        $filePath = dirname(dirname(__FILE__)).'/Config/ZeusToken.config';     //  Token文本保存路径
        if (file_exists($filePath)){
            $handle = fopen($filePath,'r');
            $tokenJson = fread($handle,8142);
        }else{
            //  插入默认的token
            fwrite(fopen($filePath,'w'),$this->app_token_json);
            $tokenJson = $this->app_token_json;
        }
        
        if (substr($tokenJson, 0,3) == pack('CCC',0xef,0xbb,0xbf)) {
            $tokenJson = substr($tokenJson, 3);
        }
        $res = json_decode(trim($tokenJson),true);   //  解析不了可能是文本出了问题
        //  判断
        if ($res['code'] == 0){
            if ($res['expires_in']*1000 + $res['time']  <  self::getMillisecond() - 86400000){    //  access_token失效前一天
                //  获取刷新token的url
                $refreshUrl = "https://oauth.jd.com/oauth/token?";
                $refreshUrl .= &#39;&client_id=&#39;.$this->appKey;
                $refreshUrl .= '&client_secret='.$this->appScret;
                $refreshUrl .= '&grant_type=refresh_token';
                $refreshUrl .= '&refresh_token='.$res['refresh_token'];
                //  获取新的token数据
                $newAccessTokenJson = self::curl_get($refreshUrl);
                //  写入文本
                fwrite(fopen($filePath,'w'),$newAccessTokenJson);
                //  解析成数组
                $newAccessTokenArr = json_decode($newAccessTokenJson,true);
                $accessToken = $newAccessTokenArr['access_token'];
            }else{
                $accessToken = $res['access_token'];
            }
            return $accessToken;
        }else{
            //  如果refresh_token过期,将会返回错误码code:2011;msg:refresh_token过期
            return $res['msg'];
        }
    }
    //  get请求
    private static function curl_get($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, FALSE);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
    //  post请求
    private static function curl_post($url,$curlPost){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_REFERER, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;
    }
    //  获取13位时间戳
    private static function  getMillisecond(){
        list($t1, $t2) = explode(' ', microtime());
        return sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
    }
}

                                 

위 내용은 PHP는 JD Alliance Kepler 및 Zeus API 템플릿을 호출합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.