公司是跨境电商, 在阿里马马的速卖通平台上开有店铺, 并且基于速卖通开放平台, 自主研发了 ERP 系统, 居今已有 3 年多的时间了, 一直很稳定
今年初, 速卖通 AE 开放平台改版, 并入淘宝开放平台中, 我们的麻烦就开始了从最初始的申请资格开始, 一步一步的研究自测到最近才小有成就下面就把一路走来填的坑分享下, 希望给新人指点吧
使用速卖通 AE 新版开放平台, 我们先看看需要哪些条件
1, 要有一个企业级别的支付宝帐号, 注: 必须是企业级别
2, 要有软著, 就是软件著作权证书
这 2 个都有了, 才能去申请
申请类型有 2 种
1, 商用授权, 适合专门的软件公司
2, 自研授权, 适合电商公司有独立研发团队
我们公司申请的是自研类型
1, 创建应用
这个环节用于获取 AppKey 和 Secret, 后面获取令牌用的这里要说下和老版的区别
1 新版本没有 Refresh 和 Access 令牌的区别, 只有 Access 令牌正式发布后, 这个令牌的期限是一年(相比老版本 24 小时的时限, 时间延长了好久, 给个赞)
2 我们使用 SDK 的时候, 有的方法中, 参数名称是 SessionKey, 其实就是这个令牌(官方文档从来不说, 就是不告诉你)
2, 授权报备
这里是要绑定一个速卖通的店铺, 你会得到一个 cn 前缀的字符串, 记住这个字符串, 后面会很有用
3, 下载 SDK 这是淘宝官方提供的, 各版本都有我们使用的是 Net 版本
注: 这里最后下载源码加载至项目中, 方便调试因为后面有个坑, 你不进入源码调试, 到死都不知道怎么回事?!(官方就是不说)
注 1:SDK 我们是可以随时编译下载的
注 2: 如果我们使用自定义场景, 创建成功若干 API 的话, 重新编译下载 SDK, 会发现输入输出参数, 已经帮我们定义好类了我们还是像官方场景那样, 直接使用即可
注: 这里最后下载源码加载至项目中, 方便调试因为后面有个坑, 你不进入源码调试, 到死都不知道怎么回事?!(官方就是不说)
4, 托管服务器
这里可能也不需要, 我是直接托管的
5, 设置白名单
一般设置 3 个 IP 地址就可以了
106.11., 没错, 就是 *.*, 这个 IP 是奇门要求的
106.14., 这个是聚石塔里的
注: 聚石塔里的数据, 输入输出都要经过奇门, 所有只要你想用 AE 平台, 先申请聚石塔吧
115.233, 这个是我们自己的服务器 IP 如果你还没有买聚石塔的服务器, 平台可以给你 3 天的塔外测试就是这个 IP 地址
6, 绑定测试帐号
这个帐号就是之前申请的速卖通店铺帐号, 直接用这个帐号测试就可以只有 3 天时间, 但过期了可以延长的
7, 设置回调地址
必须要设置的环节用于获取 AccessToken 令牌
好了, 通过上面的几步, 准备工作算是完成了下面, 我们正式写代码, 还是一步一步来
注: 以 aliexpress.logistics.listlogistiCSService, 获取物流服务列表的 API 为例
1, 调用 AE 平台的 API 这是我们的关键业务, 建议直接使用官方提供的 SDK 即可, 简单方便
其中
AliApiUrlPrefix 是 AE 开放平台的调用地址: http://gw.api.taobao.com/router/rest
AppKey 和 AppSecret 是之前申请应用时得到的
这步一般是都可以调通的注: 此时还没有塔和奇门
2, 下面就开始搭塔了, 就是聚石塔
聚石塔可以理解为阿里云, 即一个独立的操作系统, 你上面写好的程序要部署的吧, 你必须要部署在聚石塔里才可以(别问我为什么, 官方说的)
2.1, 部署好以后, 直接调用塔里的程序, 还是通的有人会问, 即然通了, 还要奇门干啥
现在通了, 是我们申请的塔外测试的原因正式发布的程序, 还是要通过奇门才能调用塔里的数据
2.2, 塔里部署成功后, 达到能访问返回正确数据即可
3, 下面就要讲重头戏了: 奇门
什么是奇门? 奇门就是外部程序和聚石塔必须要经过的一道桥梁没有奇门, 你就没门进去, 根本访问不了聚石塔里的应用
3.1, 奇门的位置
云工作台 ->业务系统构建 & 集成
3.2, 场景选择
场景包含 2 种: 自定义场景和官方场景个人建议先选择官方场景, 因为它内置了传入和传出的参数格式
我们肯定会自定义场景(因为官方场景只提供的 30% 的 API)
3.3, 官方场景 API 列表
场景由 API 组成, 每个方法都需要配置和发布(发布前要自测通过 + 验签)
3.4, 官方场景 API 配置(划重点了, 这里有个大坑)
3.4.1, 配置请求映射
这个坑, 研究了 2 小时, 得出结论
这个地址是聚石塔里, 你程序的部署地址
注 1: 是到方法名称级别
注 2:Net 版本, 可以部署成 webAPI 程序(推理得出: WebService 也可以, Handler 也可以)
3.4.2, 请求参数
记住这个格式, 后面肯定会用到
3.4.3, 请求 Demo
这是标准的参数格式, 含输入和输出也要记住, 后面会用到
3.4.4, 响应参数(即输出参数)
记住 + 1
3.4.5, 请求和响应 demo
这个最开始没有注意, 导致后面开发耽误了时间划重点了
注意验签 Demo 的返回格式
3.4.6, 自测 API
到这个环节, 就可以开始测试了
注 1: 返回格式有 2 种: XML 和 Json 一般选择 Json
注 2:Query id, 这个参数是 cn 的那个字符串, 但在这里没有影响, 传啥都可以
注 2.1: 这个参数我认为在发布后相当有关系一个 AppKey 可能同时关联多个店铺, 这是用来区分店铺信息的知道是哪个店铺, 才能获取对应店铺的令牌(令牌就是 AccessToken, 就是 SDK 中的 SessionKey)
注 3: 有的 API 方法, 参数有个 param1 的参数这个怎么理解呢? 这个可以理解成方法需要的其他参数内容, 都放到这里, Json 格式传入特别说明: 它是有格式要求的, 就是前面的输入参数格式
到这时, 你会发现各种调试失败但官方给出的错误码并没有什么卵用下面重新讲一遍正确的姿势, 小板凳搬好
3.5, 正确做法
3.5.1, 先定义返回 Model 基类, 按照 3.4.4, 响应参数定义即可 (还有验签的格式) 相当于每个方法都会返回这些属性值
这个类, 同时还参照了奇门的输出参数定
3.5.2, 修改 Service 层的方法
主要修改输出参数, 改成什么格式呢? 就是我之前提到的, 验签 Demo 的那个格式相当于方法必须返回验签 Demo 格式才行否则, 打死都通不过
看到木有? 无论能否返回正确的数据, 它要的验签格式你必须返回
而且你发现木有, 验签的格式不光属性, 属性值也要求完全一致
3.5.3,Controller 层方法(继续划重点, 又一个大坑)
注 1: 这里先解释下什么是验签, 作者之前也理解错误, 现在更正下: 验签就是平台给塔里程序发个错误的请求, 平台要接收到它认为正确的数据, 验签就通过了, 其实就是这么简单)正确的数据就是上图的数据, 即是验签 Demo 的格式(属性值也相同)
注 2: 再看看 Net 版本的验签, 你会发现它的一个参数是 System.Web.HttpRequest 我找了好久也没找到在哪里传进去, 百思不得其解后来才发现它不是在 Service 层的, 是在 WebAPI 的 Controller 层
看, 这就是验签是不是有种恍然大悟的感觉而且这是 Controller 层完整的方法包括验签 + 调用 Service 层 + 返回格式
3.5.4, 外部程序调用?
验签通过以后, 就可以发布了发布成功, 意味着外部程序可以直接使用了注意: 不是直接调用塔里的程序, 塔的所有数据, 都要通过奇门
这里根据奇门 SDK 写的方法, 外部程序最后调用的是这个方法不是前面我们写的那些
3.6, 自定义场景
昨天也把自定义场景调试通过了它和官方场景有什么区别呢? 如下所示
a, 方法名称自行定义
b, 输入参数自行定义
c, 输出参数自行定义
d, 验签格式不可定义(必须按照官方的格式)
其他的没有什么坑, 验签通过就可以发布(有个审核的操作, 基本都通过的)
3.7, 安全扫描
整个应用发布前, 会有一个安全扫描的过程, 官方说是 3 小时(实际要超出这个时间, 都问题不大)
最后总结下
1, 官方的文档要认真看, 每句话都有它的含义(为毛他们不明说呢, 非要我们自己猜)
2, 所有的环节都是互相关联的, 一步配置不对, 就都有影响
3, 申请令牌的程序是可以部署在塔外的
4, 官方场景或自定义场景中, 每个方法的验签返回格式不是都相同的要注意, 必须和验签格式完成相同才可以
5, 多店铺时, 关于 SessionKey(即 AccessToken)如何使用? 每个店铺都有 id(就是 cn123456)的字符串, 这是可以通过参数传进去的这样可以在塔里部署一个 txt 文件, 定义好 id 和令牌的关系这样就可以根据 Id 获取令牌了
附:
来源: https://www.cnblogs.com/xiyang1011/p/8481768.html