淘宝开放平台 = Taobao Open Platform = T.O.P = TOP
状态:Stable
当前的 v1.x
版本经过生产检验,稳定可用。
因本人工作变动,后续继续从事TOP开发的可能性不大,和项目相关的问题可继续提BUG,我有相关印象的话会凭经验继续修。新Feature由于我无法测试,由于TOP本身的封闭性,不保证后续一定能迅速支持
- 没有
namespace
到处乱include
- 代码脏乱 没有规范,存在大量PHP4时代的遗留代码
Request
类全部复制粘贴,乃不知有继承?- 加密解密类库依赖php7.1+已经Deprecated的
Mcrypt
模块,PHP7.1+基不能正常使用 - 在执行同步逻辑的模型内通过HTTP接口上传大量统计数据
- 完全的
namespace
实现 +PSR4
Autoloader - 重构设计的
Request
类 - 重构过的
TopClient
-
TopClient
配合重构过的Request
类支持自动解密加密字段 - HTTP客户端可使用任何兼容
PSR7
的客户端实现 如: guzzlehttp/guzzle swlib/saber - CACHE客户端可使用任何兼容
PSR16
的客户端实现 如:symfony/cache - 移除
Mcrypt
依赖 ,改用openssl
实现 - 接口名称自动映射
- 官方SDK
Request
的转换工具 ,转换官方SDK
到重构过的Request
类 - 移除加密解密模块
SecurityClient
以及TopClient
内遗留的无用方法和PHP4遗留 (10%)
- 在提供异步情景模型的情况下恢复官方SDK的统计功能,并设置可选开关
你可能需要执行一次
如下的composer设置才能正常安装开发版
composer config prefer-stable true
composer config minimum-stability dev
composer config prefer-dist true
安装
composer require 'ihipop/taobao-top:~1.0.0'
$application = new \ihipop\TaobaoTop\Application([
'topClient' => [
'apiKey' => '1234567',
'apiSecret' => 'qwerty.',
'secureRandomNum' => 'qawsed', // `如果你应用开启了加密 就设置这个 否则请设置为null`
'autoDecrypt' => true, // `同上 如果你应用开启了加密 需要自动解密 就打开这个 否则请关闭,设置为false`
],
'providers' => [
'http' => \ihipop\TaobaoTop\providers\GuzzleHttpClientServiceProvider::class,
],
]);
$topClient = $application->topClient;
以获取订单为例
$request = new \ihipop\TaobaoTop\requests\taobao\GetTradesSold();
$request->setFields([
'post_fee',
'receiver_name',
'receiver_state',
'receiver_address',
'receiver_zip',
'receiver_mobile',
'receiver_phone',
'consign_time',
'received_payment',
'receiver_country',
'receiver_town',
'tid',
'num',
'status',
'title',
'type',
'price',//其他字段略
])->setType([
'guarantee_trade',
'auto_delivery',
'ec',
'cod',
'step',
'tmall_i18n',
'nopaid',
])->setUseHasNext('true')->setPageSize(20);
$request->setStartCreated(date('Y-m-d H:i:s', time() - 5 * 60))->setEndCreated(date('Y-m-d H:i:s'));
$response = $topClient->execute($request, $accessToken)
TODO
请查看examples
GetTradesSold
类已经封装自动解密方法 ,所以上面的Request类出来就是明文字段 ,如果你的TOP应用不支持加密 请关闭加密
下面对自动解密的配置做出摘要说明
public $encryptedFields = [
'trades.trade' => [
'@' => [//订单1
'receiver_name' => 'name',
'buyer_nick' => 'nick',
'receiver_mobile' => 'mobile',
'receiver_phone' => 'phone',
'service_orders.service_order' => [
'@' => [//服务订单1
'buyer_nick' => 'nick',
],
],
],
],
];
@
表示这是一组同样结构的数组
所以 上面的配置表示:
对响应内容内的 $response['trades']['trade']
这个数组的 receiver_name
等 字段做解密,
其中receiver_name
的加密类型是name
。其他加密类型自己看淘宝文档。
如果你应用没开启加密或者请求不涉及加密解密,而且我的预先写的类没覆盖到的,那么你可以使用RAW Request
简化请求撰写,但是同样的,自动参数联想和自动完成不可用,数组转逗号分割的参数
也不可以用。
例如,请求 alibaba.orp.recommend
接口
$request = new \ihipop\TaobaoTop\requests\RawTopRequest('alibaba.orp.recommend')
默认的,只要按照约定撰写类名称,会自动映射成接口名称,比如:
接口名称: taobao.trades
.sold
.get
最后一个动词(本例是get)提前,放到 taobao 的namespace下,中间部分改成大驼峰
也就是 \ihipop\TaobaoTop\requests\taobao\GetTradesSold
本例中,taobao 换成 alibaba 同理,比如 alibaba.orp
.recommend ,按照规则应该写成
\ihipop\TaobaoTop\requests\alibaba\RecommendOrp
你可以任性的写起名,只要在类里面设置好 $apiName
属性,则请求的时候优先读取这个名称
见 自动解密
假设你托管的私有仓库url是 https://example.com/composer/taobao-top.git
composer config repositories.taobao-top vcs https://example.com/composer/taobao-top.git
其他照旧