淘宝API对接实例

以为公司祖传代码太多使用的PHP5.4.45版本,所以无法使用SDK包,只能原生自己写,踩了不少坑。

1.授权

https://oauth.taobao.com/authorize?response_type=code&client_id=123456&redirect_uri=http://127.0.0.11/taobao.php&state=12312&view=web

我这里使用的本地地址测试的,正式环境,所以回调修改为自己的,还有client_id改为自己的App Key就好,应该没有什么问题

2.获取access_token

//获取access_token
function access_token_get(){$data['code'] = '*******************************';$data['client_id'] = '********';$data['client_secret'] = '*******************************';$data['redirect_uri'] = 'http://127.0.0.11/taobao.php';$data['grant_type'] = 'authorization_code';$data['state'] = '12312';$data['view'] = 'web';$url ='https://oauth.taobao.com/token';$result_token = curl($url,$data);$tokenPath = "taobao/".$data['client_id'].".json";//文件名字$fp = fopen($tokenPath, "w");fwrite($fp, json_encode($result_token));fclose($fp);
}

这里参数继续换成自己的,code使用授权后地址栏返回的,这里要注意一个坑,使用自己写的curl有时候会出问题,暂时不清楚哪里问题所以使用了SDK自带的curl

function curl($url, $postFields = null)
{$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_FAILONERROR, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// if ($this->readTimeout) {//  curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);// }// if ($this->connectTimeout) {//  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);// }//https 请求if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);}if (is_array($postFields) && 0 < count($postFields)){$postBodyString = "";$postMultipart = false;foreach ($postFields as $k => $v){if("@" != substr($v, 0, 1))//判断是不是文件上传
   {$postBodyString .= "$k=" . urlencode($v) . "&";}else//文件上传用multipart/form-data,否则用www-form-urlencoded
   {$postMultipart = true;}}unset($k, $v);curl_setopt($ch, CURLOPT_POST, true);if ($postMultipart){curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);}else{curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));}}$reponse = curl_exec($ch);if (curl_errno($ch)){throw new Exception(curl_error($ch),0);}else{$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);// if (200 !== $httpStatusCode)// {//  throw new Exception($reponse,$httpStatusCode);// }
 }curl_close($ch);return $reponse;
}

3.到这里就获取完毕了,下面刷新按照文档所说是通过授权获取的refresh_token(前置条件:re_expires_in>0),可用来刷新access token 的r2时长。

这里我使用的App Key不知为何返回的re_expires_in一直为0暂时无法解决,已提交工单,后续有结果会更新上来

 header("Content-Type:text/html;charset=UTF-8");date_default_timezone_set("Asia/Shanghai");require_once 'taobao/qm.php';$appKey = '你的APP key';$appSecret = '***************************';$paramArr = array('app_key' => $appKey,'format' => 'json','method' => 'taobao.top.auth.token.refresh',//'grant_type' => 'refresh_token','refresh_token' => '****************************************','client_id' => $appKey,'client_secret' => $appSecret,'simplify' => true,'sign_method'=>'md5','timestamp' => date('Y-m-d H:i:s'),'v' => '2.0');//生成签名$sign = createSign($paramArr, $appSecret);//组织参数$strParam = createStrParam($paramArr);$strParam .= 'sign='.$sign;$url =  'https://eco.taobao.com/router/rest?'.$strParam;$result_token = curl($url,$postfields);

签名函数createSign代码

//签名函数function createSign ($paramArr,$appSecret) {$sign = $appSecret;ksort($paramArr);foreach ($paramArr as $key => $val) {if ($key != '' && $val != '') {$sign .= $key.$val;}}$sign.=$appSecret;$sign = strtoupper(md5($sign));return $sign;}

这里刷新和请求接口是使用的一种方法,这里有个坑,在沙箱环境不会出现,但是正式环境会出现,我踩了一下午才踩平,组装的$paramArr里面的数组必须安装ASCII码表排序。不然会报错,签名错误。

补充,关于使用的App Key不知为何返回的re_expires_in一直为0的问题经过相关技术人员回复处理发现是淘宝方问题,有部分App Key是re_expires_in返回就为0的,但是access token的过期时间为一年,暂时够用,但是这个真的坑,总不能一年去授权一次吧,那天系统突然崩溃也不知道啥情况,希望官方能解决下。

这里补充一个遇到的问题,就是查询买家信息之类的都是带***的经过加敏处理模糊化的信息,这里只有用聚石塔服务器请求接口产能返回完整信息。

暂时就这些内容,如有问题欢迎留言

 

转载于:https://www.cnblogs.com/zdzdbk/p/10715843.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部