ihipop/taobao-top

淘宝开放平台 SDK for php7+, Taobao top SDK for PHP7, 协程兼容

v1.0.0-rc.1 2019-07-09 14:17 UTC

This package is auto-updated.

Last update: 2024-09-09 12:52:13 UTC


README

淘宝开放平台 = Taobao Open Platform = T.O.P = TOP

状态:稳定

当前的 v1.x 版本经过生产检验,稳定可用。

由于个人工作变动,未来继续从事TOP开发的可能性不大,项目相关的问题可以继续提交BUG,如果我有相关印象的话会继续修复。由于我无法测试新功能,且TOP本身具有封闭性,不能保证后续一定能迅速支持。

官方SDK存在的问题

  • 没有 namespace,到处乱 include
  • 代码混乱,没有规范,存在大量PHP4时代的遗留代码
  • Request 类全部复制粘贴,不知道有继承?
  • 加密解密类库依赖php7.1+已经废弃的Mcrypt模块,PHP7.1+版本不能正常使用
  • 在执行同步逻辑的模型内通过HTTP接口上传大量统计数据

计划实现的功能(Feature)

  • 完全的 namespace 实现 + PSR4 自动加载器
  • 重构设计的 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'

快速开始

初始化 TOP 客户端

$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)

Swoole 协程使用注意事项

待办事项

更多实例

请查看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。其他加密类型请参考淘宝文档。

原始请求

如果你应用未开启加密或请求不涉及加密解密,并且我的预先编写的类未覆盖到的情况,那么你可以使用原始请求简化请求编写,但是同样的,自动参数联想和自动完成不可用,数组转逗号分割的参数也不可用。

例如,请求 alibaba.orp.recommend 接口

$request = new \ihipop\TaobaoTop\requests\RawTopRequest('alibaba.orp.recommend')

编写自己的$request

默认命名规则

默认情况下,只要按照约定编写类名,就会自动映射成接口名,例如:

接口名称: 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

其他照旧