当前位置:Gxlcms > PHP教程 > PHP调用京东联盟开普勒、宙斯API模板

PHP调用京东联盟开普勒、宙斯API模板

时间:2021-07-01 10:21:17 帮助过:85人阅读

本篇文章介绍的内容是PHP调用京东联盟开普勒、宙斯API模板 ,现在分享给大家,有需要的朋友可以参考一下

京东开普勒的 Appkey 和 AppSecret 在这里可以看到(需要先创建应用):http://kepler.jd.com/console/app/app_list.action
授权介绍在这里:http://kepler.jd.com/console/docCenterCatalog/docContent?channelId=17

  1. /*开普勒类*/
  2. class KeplerApi{
  3. private $appKey = 'YourKey'; // 你的Key
  4. private $appScret = 'YourSecret'; // 你的Secret
  5. private $app_token_json = '{}'; // 第一次需要手动授权获取京东Token然后粘贴到这里
  6. /**
  7. * 获取开普勒接口数据
  8. * @param string $apiUrl 要获取的api
  9. * @param string $param_json 该api需要的参数
  10. * @param string $version 版本可选为 2.0
  11. * @param bool $get 是否使用get,默认为post方式
  12. * @return mixed 京东返回的json格式的数据
  13. */
  14. public function GetKelperApiData($apiUrl='',$param_json = array(),$version='1.0',$get=false){
  15. $API['access_token'] = $this->refreshAccessToken(); // 生成的access_token,30天一换
  16. $API['app_key'] = $this->appKey;
  17. $API['method'] = $apiUrl;
  18. $API['param_json'] = json_encode($param_json);
  19. $API['sign_method'] = 'md5';
  20. $API['timestamp'] = date('Y-m-d H:i:s',time());
  21. $API['v'] = $version;
  22. ksort($API); // 排序
  23. $str = ''; // 拼接的字符串
  24. foreach ($API as $k=>$v) $str.=$k.$v;
  25. $sign = strtoupper(md5($this->appScret.$str.$this->appScret)); // 生成签名 MD5加密转大写
  26. if ($get){
  27. // 用get方式拼接URL
  28. $url = "https://router.jd.com/api?";
  29. foreach ($API as $k=>$v)
  30. $url .= urlencode($k) . '=' . urlencode($v) . '&'; // 把参数和值url编码
  31. $url .= 'sign='.$sign; // 接上签名
  32. $res = self::curl_get($url);
  33. }else{
  34. // 用post方式获取数据
  35. $url = "https://router.jd.com/api";
  36. $API['sign'] = $sign;
  37. $res = self::curl_post($url,$API);
  38. }
  39. return $res;
  40. }
  41. // 刷新accessToken
  42. private function refreshAccessToken(){
  43. $filePath = dirname(dirname(__FILE__)).'/Config/KelperToken.config'; // Token文本保存路径
  44. if (file_exists($filePath)){
  45. $handle = fopen($filePath,'r');
  46. $tokenJson = fread($handle,8142);
  47. }else{
  48. // 插入默认的token
  49. fwrite(fopen($filePath,'w'),$this->app_token_json);
  50. $tokenJson = $this->app_token_json;
  51. }
  52. if (substr($tokenJson, 0,3) == pack('CCC',0xef,0xbb,0xbf)) {
  53. $tokenJson = substr($tokenJson, 3);
  54. }
  55. $res = json_decode(trim($tokenJson),true); // 解析不了可能是文本出了问题,注意BOM头
  56. // 判断
  57. if ($res['code'] == 0){
  58. if ($res['expires_in']*1000 + $res['time'] < self::getMillisecond() - 86400000){ // access_token失效前一天
  59. // 获取刷新token的url
  60. $refreshUrl = "https://kploauth.jd.com/oauth/token?grant_type=oauth_refresh_token";//&app_key=yourappkey&app_secret=yourappsecret&refresh_token=xxxxxxxx
  61. $refreshUrl .= '&app_key='.$this->appKey;
  62. $refreshUrl .= '&app_secret='.$this->appScret;
  63. $refreshUrl .= '&refresh_token='.$res['refresh_token'];
  64. // 获取新的token数据
  65. $newAccessTokenJson = self::curl_get($refreshUrl);
  66. // 写入文本
  67. fwrite(fopen($filePath,'w'),$newAccessTokenJson);
  68. // 解析成数组
  69. $newAccessTokenArr = json_decode($newAccessTokenJson,true);
  70. $accessToken = $newAccessTokenArr['access_token'];
  71. }else{
  72. $accessToken = $res['access_token'];
  73. }
  74. return $accessToken;
  75. }else{
  76. // 如果refresh_token过期,将会返回错误码code:2011;msg:refresh_token过期
  77. return $res['msg'];
  78. }
  79. }
  80. // get请求
  81. private static function curl_get($url){
  82. $ch = curl_init();
  83. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  84. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  85. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  86. curl_setopt($ch, CURLOPT_URL, $url);
  87. curl_setopt($ch, CURLOPT_REFERER, $url);
  88. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  89. $result = curl_exec($ch);
  90. curl_close($ch);
  91. return $result;
  92. }
  93. // post请求
  94. private static function curl_post($url,$curlPost){
  95. $ch = curl_init();
  96. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  97. curl_setopt($ch, CURLOPT_HEADER, false);
  98. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  99. curl_setopt($ch, CURLOPT_URL, $url);
  100. curl_setopt($ch, CURLOPT_REFERER, $url);
  101. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  102. curl_setopt($ch, CURLOPT_POST, 1);
  103. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  104. $result = curl_exec($ch);
  105. curl_close($ch);
  106. return $result;
  107. }
  108. // 获取13位时间戳
  109. private static function getMillisecond(){
  110. list($t1, $t2) = explode(' ', microtime());
  111. return sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
  112. }
  113. }

宙斯接口也是大同小异,无非是换了个域名和授权方式

  1. /**
  2. * Class ZeusApi 宙斯接口调用类
  3. */
  4. class ZeusApi
  5. {
  6. private $appKey = 'YourKey'; // 你的Key
  7. private $appScret = 'YourSecret'; // 你的Secret
  8. private $app_token_json = '{}'; // 第一次需要手动授权获取京东Token然后粘贴到这里
  9. /**
  10. * 获取宙斯接口数据
  11. * @param string $apiUrl 要获取的api
  12. * @param string $param_json 该api需要的参数,使用json格式,默认为 {}
  13. * @param string $version 版本可选为 2.0
  14. * @param bool $get 是否使用get,默认为post方式
  15. * @return mixed 京东返回的json格式的数据
  16. */
  17. public function GetZeusApiData($apiUrl='',$param_json = array(),$version='1.0',$get=false){
  18. $API['access_token'] = $this->refreshAccessToken(); // 生成的access_token,30天一换
  19. $API['app_key'] = $this->appKey;
  20. $API['method'] = $apiUrl;
  21. $API['360buy_param_json'] = json_encode($param_json);
  22. $API['timestamp'] = date('Y-m-d H:i:s',time());
  23. $API['v'] = $version;
  24. ksort($API); // 排序
  25. $str = ''; // 拼接的字符串
  26. foreach ($API as $k=>$v) $str.=$k.$v;
  27. $sign = strtoupper(md5($this->appScret.$str.$this->appScret)); // 生成签名 MD5加密转大写
  28. if ($get){
  29. // 用get方式拼接URL
  30. $url = "https://api.jd.com/routerjson?";
  31. foreach ($API as $k=>$v)
  32. $url .= urlencode($k) . '=' . $v . '&'; // 把参数和值url编码
  33. $url .= 'sign='.$sign;
  34. $res = self::curl_get($url);
  35. }else{
  36. // 用post方式获取数据
  37. $url = "https://api.jd.com/routerjson?";
  38. $API['sign'] = $sign;
  39. $res = self::curl_post($url,$API);
  40. }
  41. return $res;
  42. }
  43. // 刷新accessToken
  44. private function refreshAccessToken(){
  45. $filePath = dirname(dirname(__FILE__)).'/Config/ZeusToken.config'; // Token文本保存路径
  46. if (file_exists($filePath)){
  47. $handle = fopen($filePath,'r');
  48. $tokenJson = fread($handle,8142);
  49. }else{
  50. // 插入默认的token
  51. fwrite(fopen($filePath,'w'),$this->app_token_json);
  52. $tokenJson = $this->app_token_json;
  53. }
  54. if (substr($tokenJson, 0,3) == pack('CCC',0xef,0xbb,0xbf)) {
  55. $tokenJson = substr($tokenJson, 3);
  56. }
  57. $res = json_decode(trim($tokenJson),true); // 解析不了可能是文本出了问题
  58. // 判断
  59. if ($res['code'] == 0){
  60. if ($res['expires_in']*1000 + $res['time'] < self::getMillisecond() - 86400000){ // access_token失效前一天
  61. // 获取刷新token的url
  62. $refreshUrl = "https://oauth.jd.com/oauth/token?";
  63. $refreshUrl .= '&client_id='.$this->appKey;
  64. $refreshUrl .= '&client_secret='.$this->appScret;
  65. $refreshUrl .= '&grant_type=refresh_token';
  66. $refreshUrl .= '&refresh_token='.$res['refresh_token'];
  67. // 获取新的token数据
  68. $newAccessTokenJson = self::curl_get($refreshUrl);
  69. // 写入文本
  70. fwrite(fopen($filePath,'w'),$newAccessTokenJson);
  71. // 解析成数组
  72. $newAccessTokenArr = json_decode($newAccessTokenJson,true);
  73. $accessToken = $newAccessTokenArr['access_token'];
  74. }else{
  75. $accessToken = $res['access_token'];
  76. }
  77. return $accessToken;
  78. }else{
  79. // 如果refresh_token过期,将会返回错误码code:2011;msg:refresh_token过期
  80. return $res['msg'];
  81. }
  82. }
  83. // get请求
  84. private static function curl_get($url){
  85. $ch = curl_init();
  86. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  87. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  88. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  89. curl_setopt($ch, CURLOPT_URL, $url);
  90. curl_setopt($ch, CURLOPT_REFERER, $url);
  91. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  92. $result = curl_exec($ch);
  93. curl_close($ch);
  94. return $result;
  95. }
  96. // post请求
  97. private static function curl_post($url,$curlPost){
  98. $ch = curl_init();
  99. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  100. curl_setopt($ch, CURLOPT_HEADER, false);
  101. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  102. curl_setopt($ch, CURLOPT_URL, $url);
  103. curl_setopt($ch, CURLOPT_REFERER, $url);
  104. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  105. curl_setopt($ch, CURLOPT_POST, 1);
  106. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  107. $result = curl_exec($ch);
  108. curl_close($ch);
  109. return $result;
  110. }
  111. // 获取13位时间戳
  112. private static function getMillisecond(){
  113. list($t1, $t2) = explode(' ', microtime());
  114. return sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
  115. }
  116. }

以上就是PHP调用京东联盟开普勒、宙斯API模板 的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行