最近完整做完了一个淘宝小程序项目。

之前我们做得比较多的是微信小程序、H5,还有一些活动互动类的项目,所以这一次是第一次真正把项目放进淘宝开放平台、聚石塔、SAE 这一整套环境里。做完之后回头看,踩的坑比预想的多,而且大多数坑不在业务代码里。

如果你之前主要做微信小程序,接下来可能要接淘宝小程序,下面这9个地方,建议提前了解一下。

1、先别急着写代码

淘宝这里的账号和权限关系,比微信小程序复杂。

实际项目里,通常不是开发公司拿自己的账号直接开发,而是品牌方主账号先创建子账号,再把开发人员加入应用,链路大概是:品牌方主账号 → 子账号 → 开发人员 → 淘宝开放平台

同时,聚石塔的权限也要提前开通。

所以项目刚启动的时候,最好先把账号、子账号、应用成员、聚石塔权限这些事情确认清楚。不然很容易出现一种情况:代码已经写好了,账号权限还没下来。

2、淘宝小程序不是一个应用,是两个

这是第一次做的时候很容易搞混的地方。

我们这个实际项目里,需要分别处理两个应用:

•消费者端应用:主要给前端使用,调用淘宝 JS SDK,处理用户侧的互动;

•商家端应用:主要给后端使用,比如查询订单、处理会员积分这类需要商家权限的接口。

两者的调用方式和权限都不一样。如果一开始没有把这两个应用的职责搞清楚,后面做接口的时候很容易绕进去。

打开网易新闻 查看精彩图片

3、后端部署不是找台服务器就行

这是淘宝项目和普通 H5、小程序项目比较明显的区别。这个项目的后端最终部署在聚石塔的 SAE 环境里,整套下来涉及:

SAE、MySQL RDS、Redis、EIP、CLB、VPC / 交换机

而且这些服务之间有配置约束,比如 SAE、MySQL、Redis、EIP、CLB 的地域需要保持一致。第一次配置的时候,如果按照平时用普通云服务器的思路来搞,会发现很多地方对不上。

打开网易新闻 查看精彩图片

4、SAE 有个很容易踩的坑:8080

这个问题值得单独说。SAE 环境里的 Nginx,需要监听 8080,不是平时习惯的 80。

配置错了之后,最直观的表现就是:容器一直重启。当时我们排查的时候,代码本身没什么问题,折腾了一阵才发现是健康检查没有通过。

所以第一次用 SAE,部署完发现容器反复重启,可以先看看 Nginx 监听端口。

打开网易新闻 查看精彩图片

5、启动命令也有区别:/bin/sh 不是 bash

另一个比较细节的坑是启动环境。我们最后使用的启动命令是:

php-fpm -D && nginx -c /home/admin/app/nginx/default.conf -g 'daemon off;'

这里容器里用的是 /bin/sh,而不是平时服务器上常见的 /bin/bash。按老习惯写启动脚本就会报错。

这类问题特别烦,因为它不是业务代码问题,而是部署环境问题,但上线的时候,这些细节都会变成实际问题。

6、淘宝接口的权限,一定提前申请

项目里如果涉及订单查询、用户信息、会员积分变更、商品信息这些能力,对应的权限和授权范围要提前确认。尤其是积分变更这种接口,等到项目真正发奖的时候才发现没有权限,就比较被动了。

7、sessionKey 和普通小程序登录不是一回事

消费者端的用户授权和商家端的 sessionKey,是两套东西。商家端的 sessionKey,实际项目中需要通过千牛 App 扫码获取,然后由后端保存下来,后续查询订单、积分变更等接口调用时再使用这个 session。

也就是说,商家端的登录链路实际上是:千牛扫码 → 获取 sessionKey → 后端保存 → 调用淘宝 TOP API;如果 session 失效,就需要重新走一遍。

打开网易新闻 查看精彩图片

8、数据处理的位置要特别注意:数据不出淘

后端服务部署在聚石塔里,并不是单纯因为"淘宝要求这么部署",它实际上影响了整个系统架构。开发的时候,哪些数据可以拿、哪些数据不能存、哪些数据应该在哪里处理,都需要在架构设计阶段提前考虑。

9、真正耗时间的,往往是这些"小问题"

实际开发里,最磨人的反而不是大功能,而是这些零散的小问题:API 签名错误、session 失效、权限没申请、Nginx 端口不对、容器反复重启、runtime 没权限、API 请求超时、数据库和 Redis 地域不一致、EIP 没配、CLB 没接好。

这些事情单独看都不复杂,但第一次做的时候,一个个排查下来还是挺耗时间的。

打开网易新闻 查看精彩图片

做完之后,我最大的感受

如果让我重新做一次淘宝小程序,我不会把它当成"换个平台的小程序开发",而会把它当成:淘宝开放平台 + 小程序 + 商家能力 + 聚石塔云服务的一整套项目。业务代码反而是其中比较正常的一部分。真正需要提前做功课的,是这条链路:

账号 → 应用 → 权限 → 聚石塔 → 云服务 → TOP API → session → 审核 → 上线

这些东西先跑通,后面的开发会顺很多。部署、登录、并发抽奖这几个坑,每一个后面都值得单独展开讲。