淘宝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的过期时间为一年,暂时够用,但是这个真的坑,总不能一年去授权一次吧,那天系统突然崩溃也不知道啥情况,希望官方能解决下。
这里补充一个遇到的问题,就是查询买家信息之类的都是带***的经过加敏处理模糊化的信息,这里只有用聚石塔服务器请求接口产能返回完整信息。
暂时就这些内容,如有问题欢迎留言
淘宝API对接实例的更多相关文章
- 自动获取淘宝API数据访问的SessionKey
最近在忙与淘宝做对接的工作,总体感觉淘宝的api文档做的还不错,不仅有沙箱测试环境,而且对于每一个api都可以通过api测试工具生成想要的代码,你完全可以先在测试工具中测试之后再进行代码的编写,这样就 ...
- 淘宝API开发系列---阿里.聚石塔.开放平台的使用
好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...
- 淘宝API Nodejs的实现
关于<淘宝API Nodejs的实现>这是个很忧伤的故事~~ 体验了win10,目前来说还是不如意的,一些应用程序的卡顿,发热~~难以忍受了.只好重装了系统,可是可是!!! 前段时间写的n ...
- 淘宝API学习之道:淘宝API相关了解
淘宝API开发平台,经过两年多的升级一系列动作,提供的api接口日渐稳定.看到淘宝api开发的浏览量还是较大,但那会写的DEMO如今已不能执行,淘宝改了链接地址,改了加密算法,为了不让大家浪费时间,特 ...
- SB淘宝api的奇葩问题! 一则服务器无法访问淘宝api
<?xml version="1.0" encoding="utf-8" ?><error_response><code>3 ...
- taobao_api项目开坑,自主完成淘宝主要接口的开发-版本:卖家版(非淘宝api)
项目名称:taobao_api 项目目的:独立实现各个淘宝操作的相关api,不依赖淘宝提供的api,而是自己实现接口 前期实现接口:已付款订单查询(自动更新), 订单发货 , 订单备注 应用场景:中小 ...
- 淘宝API得到单个商品的信息,用了淘宝的SDK...
淘宝api获取到的数据.返回结果可以选择json格式和xml格式的啊.每个api下面都有sdk调用示例哦. 详细:http://wenwen.soso.com/z/q335640192.htm 淘宝开 ...
- 淘宝API学习之道:淘宝TOP之API接口接入教程
作为一个中小型站点开发人员,淘宝API的开放大大缩短了站点的开发周期和运作效率.面对海量的数据.开发人员仅仅要细致阅读开发文档,熟悉对应的接口,就能够把数据导入自己的站点,这样就不必望洋兴叹了. 眼下 ...
- 淘宝 Api 查询手机号
https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13834782535 淘宝 Api 查询手机号
随机推荐
- linux 安装中文支持
下载 fonts-chinese-3.02-12.el5.noarch.rpm fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm 安装各种提示的依赖 安装 chkf ...
- OkHttp之Interceptor
先看RealCall 发送一个请求,我们会先创建一个request,然后使用okHttpClient.newCall(request),创建一个call进行网络请求,这个call,就是RealCall ...
- linux服务器后台运行服务
linux 后台运行一个服务 难免会遇到在Linux,后台执行任务.下面,总结了一下关闭窗口任然在后台执行的方法,例如 #执行一个打包命令 tar czf /data/backup.tgz /data ...
- Centos7上安装java
1.默认情况下,系统安装的有jdk1.8,但是使用javac测试时会不识别这个命令, 意味着,java还是未安装好. 2.把java升级即可,此时java已经可用. yum -y install ...
- jenkins持续集成部署
用到的技术和工具:git + maven + jdk + jenkins,首先服务器安装git.maven.jdk,这些都不再赘述. 1:开始安装主角jenkins,首先去官网下载war包(https ...
- 【机器学习_8】pandas
背景 关于同一个话题,不同作者也有不同行文结构.但要真正理解并会用,在我的经验里,是必须要自己重新组织的. 本文是基于以往看过的资料,从自身数据处理应用的角度出发,重新组织pandas应用结构,希望能 ...
- 6.2 集合和映射--集合Set->底层基于链表实现
在6.1中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此 ...
- blade 学习
一.目录构造样式 . └── workspace ├── BLADE_ROOT ├── build64_release ├── client │ ├── BUILD │ └── client. ...
- 解决由于服务器调用删除或添加字段后CXF客户端未更新导致异常问题org.apache.cxf.interceptor.Fault: Unmarshalling Error: Unexpected element
采用CXF客户端调用Webservice服务,由于服务端时不时会对Webservice服务删除或添加一些字段,而CXF未及时更新客户端代码导致再次调用服务时报异常错误: Interceptor for ...
- pgsql 常用命令
1.连接到pgsql数据库 psql -U postgres 2.查看所有数据库 \l 3.连接到数据库test \c test 4.查看数据库所有表以及视图 \d 5.查看数据库所有的表 \dt 6 ...