重新回顾了之前做的淘宝API模块,记录一下思路。

(1) 在开始开发之前,先要注册成为一个开发者,创建自己的应用。

步骤在淘宝开发平台中http://open.taobao.com/doc/detail.htm?id=66中已有详细说明,在这里不再重复介绍。

注意,在创建应用中,需要填写一个回调URL。在填写回调地址时,如果还在测试阶段的,可以填写一个本地的地址,例如 http://localhost/webERP/api/taobao/taobaoAuth.php,在本地测试通过后,要将其应用上线时,才将回调地址更改正式域名地址。

(2)用户授权登录。

在我们的应用与淘宝平台对接后,需要获取用户的隐私信息,为了保证数据的安全性和隐私性,我们的应用需要引导用户完成“使用淘宝账号登录并授权”的流程(http://open.taobao.com/doc/detail.htm?spm=0.0.0.0.ckBODm&id=118)。以此来获取访问令牌access_token,access_token是应用在调用API访问和修改用户数据时必须传入的参数。

在引导使用应用的用户登录授权时,页面会跳转到所填写的回调地址,同时返回授权码code,我们可以利用这个返回的授权CODE和注册应用时分配的AppSecret,通过Http Post方式换取访问令牌access_Token,获取访问令牌的返回值以json格式返回。

返回结果示例如下:

{

"w2_expires_in": 0,
"taobao_user_id": "263685215",
"taobao_user_nick": "%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B752",
"w1_expires_in": 1800,
"re_expires_in": 0,
"r2_expires_in": 0,
"expires_in": 86400,
"token_type": "Bearer",
"refresh_token": "6200e1909ca29b04685c49d67f5ZZ3675347c0c6d5abccd263685215",
"access_token": "6200819d9366af1383023a19907ZZf9048e4c14fd56333b263685215",
"r1_expires_in": 1800
}
各个字段代表的含义如下:

Key

类型

选项

示例

说明

access_token

string

必选

2YotnFZFEjr1zCsicMWpAA

Access token

token_type

string

必选

Bearer

Access token的类型目前只支持bearer

expires_in

number

必选

10(表示10秒后过期)

Access token过期时间

refresh_token

string

可选

2YotnFZFEjr1zCsicMWpAA

Refresh token

re_expires_in

number

可选

10(表示10秒后过期)

Refresh token过期时间

r1_expires_in

number

必选

10(表示10秒后过期)

r1级别API或字段的访问过期时间

r2_expires_in

number

必选

10(表示10秒后过期)

r2级别API或字段的访问过期时间

w1_expires_in

number

必选

10(表示10秒后过期)

w1级别API或字段的访问过期时间

w2_expires_in

number

必选

10(表示10秒后过期)

w2级别API或字段的访问过期时间

taobao_user_nick

string

必选

淘宝测试test

淘宝账号

taobao_user_id

string

必选

706388888

淘宝帐号对应id

sub_taobao_user_id

string

可选

2343535

淘宝子账号对应id

sub_taobao_user_nick

string

可选

淘宝测试test:123

淘宝子账号

access_token具有一定的有效期的,我们可以从中提取access_token字段,并将其保存在数据库中,在有效期内使用,而不用每次使用都进行授权。

具体获取授权码code和访问令牌token的代码如下:

webERP / api / taobao / common / taobaoClientHelper.php

<?php
/**
* 这个文件包含 taobaoClientHelper 类
*//**
* taobaoClientHelper 引导使用应用的用户登录到指定的地址获取code
* 根据code 和 AppSecret获取访问令牌access_token
*
*/require_once 'taobaoClient.php';class taobaoClientHelper extends taobaoClient{/*** @var string 新建应用时填写的回调地址*/public $redirctUri;/*** @var string 获取授权码CODE的地址*/protected $authorizeUrl = 'https://oauth.taobao.com/authorize'; /*** @var string 获取访问令牌token的地址*/protected $tokenUrl = 'https://oauth.taobao.com/token';/*** 设置沙箱环境,如果是在本地测试,可以调用该方法,返回的数据是虚拟的*/public function sandboxEnv(){$this->authorizeUrl = 'https://oauth.tbsandbox.com/authorize';$this->tokenUrl = 'https://oauth.tbsandbox.com/token';//访问API的地址$this->gateWayUrl = 'http://gw.api.tbsandbox.com/router/rest';}/*** 返回引导用户授权的http请求URL* @param string $redirctUri 新建淘宝应用时填写的回调地址*/public function getAuthorizeUrl( $redirctUri = null ){$redirctUri || $redirctUri = $this->redirctUri;//根据淘宝要求的参数//参数response_type 固定值为code$param['response_type'] = 'code';//参数client_id 创建应用时的Appkey$param['client_id'] = $this->appKey;//参数redirect_uri 应用的回调地址,必须与创建应用时所填回调页面url一致$param['redirect_uri'] = $redirctUri;//可选参数state ,自定义,颁发授权后会原封不动返回$param['state'] = 'Nancy';//可选参数view,默认值为web$param['view'] = 'web';return $this->authorizeUrl . '?' . http_build_query($param);}/*** 根据返回的授权码code,通过http post方式换取access token,以json的格式返回* @param string $code 授权登录后返回的code码* @param string $state 授权登录时原封不动返回的state* @param string $redirctUri 回调地址* @return 访问令牌access token 的json对象*/public function fetchAuthorizeToken($code, $state, $redirctUri = null){$redirctUri || $redirctUri = $this->redirctUri;//系统参数$param = array('client_id' => $this->appKey; //创建应用时的Appkey'client_secret' => $this->secretKey; //创建应用时的Appkey'grant_type' => 'authorization_code'; //授权类型,默认为authorization_code'code' => $code; //授权码code'redirect_uri' => $redirctUri; //授权码code'state' => $state; //可选参数state'view' => 'web'; //可选参数,默认为web);//父类函数curl() 利用curl post 参数到tokenUrl,进行连接$json = $this->curl($this->tokenUrl, $param);//避免包含生涩的汉字而进行utf8的转码$json = iconv('gbk', 'utf-8', $json);//解析json格式$json = json_decode($json);//如果返回异常,会返回异常error 和 error_descriptionif( isset($json->error) && isset($json->error_description) ){throw new Exception($json->error_description, intval($json->error));}return $json;}
}
?>

我们编写一个小小的程序来测试如何获取token,在此之前,需要一些必要的配置信息 webERP / api / taobao / common / taobaoConfig.php

<?phpheader('Content-Type:text/html;charset=UTF-8');ini_set('display_errors' , 'on'); //显示所有错误
ini_set('display_startup_errors', 'on');
error_reporting( E_ALL ^ E_NOTICE); //显示除去notic的所有错误信息include 'taobaoClientHelper.php';$taobao = new taobaoClientHelper();$taobao->appKey = "创建应用时的Appkey";
$taobao->secretKey = "创建应用时的secretKey";//如果已经获取过访问令牌,并且令牌还在有效期内,可以不再需要授权
$access_token = "访问令牌access_token";/**
* 回调地址,在创建应用时,如果还处于测试阶段,回调地址可以写测试地址
* 设置测试环境
*/
if( $_SERVER['SERVER_NAME'] == 'localhost'){$taobao->redirectUri = 'http://localhost/webERP/api/taobao/taobaoAuth.php';$taobao->sandboxEnv();}else{$taobao->redirectUri = 'http://正式域名/webERP/api/taobao/taobaoAuth.php';}?>

测试淘宝授权,该文件为回调地址文件 webERP/api/taobao/taobaoAuth.php

<?php/**
* 回调文件 taobaoAuth.php
*/
include 'common/taobaoConfig.php';//用户登录授权时,会返回授权码CODE
if(isset($_GET['code'])){$state = isset($_GET['state'])? $_GET['state'] : '';//获取access tokentry{$token = $taobao->fetchAcessToken( $_GET['code'] , $state );if( isset($token->access_token) ){//返回的access_token可以保存在数据库中,或者做自己需要的操作echo '<pre>';print_r($token);}}catch (Exception $e){//异常,重新获取header('Location: taobaoAuth.php');}}else{//引导用户到授权登录页面$authUrl = $taobao->getAuthorizeUrl();echo "<script>window.open('".$authUrl."');</script>";}
?>

获得access_token后,我们就可以正式调用API了,在下一篇我们就会开始讨论淘宝API的调用。

回顾篇:淘宝API web开发一 授权登录相关推荐

  1. 淘宝API应用开发小试

    无力吐槽淘宝开发平台相关文档的表述清晰度.错误率.各种费解的概念.让人头晕目眩的导航等等.至少能够在几年前就开放众多的API供第三方调用,算得上是有前瞻性的一次重要举措.闲来无事,咱也费心研究了下,有 ...

  2. 【.Net码农】【淘宝API】淘宝API应用开发小试

    转载请注明本文出处:http://www.cnblogs.com/newton/archive/2013/05/14/3078788.html 无力吐槽淘宝开发平台相关文档的表述清晰度.错误率.各种费 ...

  3. 淘宝API接口开发系列,详情接口参数说明

    onebound.taobao.item_get 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) 注册Key和secret: https:// ...

  4. 淘宝API系列开发,buyer_info买家信息,买家卖家订单官方接口

    接口列表 custom自定义API操作 buyer_cart_add添加到购物车 buyer_cart_remove删除购物车商品 buyer_cart_list获取购物车的商品列表 buyer_or ...

  5. 微信web开发工具-授权登录

    释: 我是订阅号,申请的微信开发测试账号,操作授权登录 1.  下载web开发工具 2.  在公众号列表中, 开发者工具->web开发工具-> 绑定开发者账号 ->输入你的微信号(微 ...

  6. 淘宝API开发系列---阿里.聚石塔.开放平台的使用5

    好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...

  7. 【.Net码农】【淘宝API】淘宝API开发系列---阿里.聚石塔.开放平台的使用

    好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...

  8. 淘宝API开发系列--商家的绑定2

    在上篇<淘宝API开发系列--开篇概述>介绍了下淘宝API平台的一些基本知识,由于一直有事情忙,就没有及时跟进随笔的更新,本篇继续讨论淘宝API的开发知识,主要介绍商家的绑定操作.上篇我们 ...

  9. 淘宝 API 开发步骤

    为了进行淘宝的 API 开发,首先我们需要做下面几件事情. 1)开发者注册一个账号  注册链接 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载淘宝 API 的 SDK 并掌握 ...

最新文章

  1. Windows Phone 7 MVVM模式通讯方式之实现Command
  2. 同步中断和异步中断区别
  3. Samba 服务共享
  4. [转载]使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)...
  5. 完美日记:实现高弹性高稳定电商架构
  6. erwin模型导入mysql_使用erwin进行mysql建模
  7. Mac下iTerm2的ls输出如何显示文件件颜色呢?
  8. deepin安装bochs2.6.2_2.kafka安装与使用
  9. 华为ensp的缺省_网络 华为 ensp 命令
  10. 胡波外挂做模具3D装配的方法
  11. 论文阅读 Neural Network Modeling of Nonlinear Systems Based on Volterra Series Extension of a Linear Mod
  12. Todesk软件使用
  13. 语音助手——问答型助手架构和设计
  14. 最适合发朋友圈的句子
  15. where is java_Linux下的搜索查找命令的详解(whereis)
  16. Python基础:break语句知识详解
  17. Android 在应用图标上设置未读消息数量
  18. Java实现 LeetCode 457 环形数组循环
  19. 操作系统形式化验证实践教程(7) - C代码的自动验证
  20. 使用HTML+javascript编写了一个生成题库小工具

热门文章

  1. ubuntu18.04.5+cuda10.2+cudnn+anaconda3+pytorch1.7
  2. 我的产品不需要盈利:战略单品的存在意义
  3. linux下查看java 占用cpu使用情况
  4. python调用百度API实现中英文互译
  5. MiniFly微型四轴学习开发日志(四)——关于四轴硬件知识以及如何通过STM32输出PWM方波控制电机
  6. rv1108 MAC 接口的简介
  7. 基于模型的设计——单相逆变器开环的自动代码实现
  8. java mp3 信息_java读取MP3的信息 | 学步园
  9. pwn【gdb-peda调试】
  10. 如何理解Go语言的GOROOT/GOPATH