微信小程序代开发入坑指南

前言

很多行业都有微信小程序的需求,但缺少自己开发的能力。微信提供了代开发的功能,让第三方平台可以方便、安全地帮他们开发小程序。首先了解“第三方平台”和“小程序运营者”的概念:


小程序代开发的文档内容多,比较分散。想要开发一个第三方平台,需要先学习许多概念,踩一些坑。本文写给初次接触的第三方平台开发者,帮助大家快速理清流程和概念。让大家在开发之前,就能对整体流程和工作量有基本的认知。


准备工作

要成为第三方平台开发者,首先需要具备以下能力:

  • 具备开放平台认证资质(企业开发者)

  • 具备后台开发能力(能实现简单接口和数据储存)

  • 具备前端开发能力(会开发web和小程序)


然后注册一个微信开放平台帐号、两个小程序帐号,流程如下:

  1. 注册微信开放平台帐号(https://open.weixin.qq.com),并完成开发者资质认证;

  2. 注册两个微信小程序(https://mp.weixin.qq.com)。其中小程序A用于开发功能、发布代码,小程序B用于授权注册;

  3. 登录微信开放平台,第三方平台,创建第三方平台,选择“平台类型服务商”。填完资料等微信审核,审核通过后才能进行后续操作;

  4. 微信开放平台,第三方平台,开发配置,添加开发者小程序,把刚才注册的小程序A加进去;

  5. 微信开放平台,第三方平台,基础信息,将小程序B的原始ID(可在公众平台网站的小程序设置页找到),填写到“授权测试公众号/小程序列表”中;


第三方平台详情里,有个开发资料,需要填很多配置。概念比较多,第一次接触可能会有点懵逼,不要慌,下文会分别介绍,看完就知道怎么填了。


准备至少一台固定IP的服务器。上图第二个红框最后有一个“白名单IP地址列表”,把自己服务器的IP地址填进去。后续开发的功能,都要部署到白名单里的服务器,才能调用微信的接口。


Step1:开放平台授权

这一步的最终目的是拿到有效的component_access_token。先了解几个概念:

  • 授权事件接收URL:第三方平台开发的接口,用于接收 component_verify_ticket。开发完后,把接口地址设置到微信开放平台的后台(上文“准备工作”配图第二个红框)。

  • component_verify_ticket:微信开放平台每隔10分钟,调用上述设置的接口地址,发给第三方平台的一个票据,12小时有效期。

  • 消息加解密Key:微信发过来的component_verify_ticket是加密的,需要用这个key解密。可在微信开放平台后台设置(上文“准备工作”配图第二个红框)。

  • 消息校验Token:校验消息的有效性。可在微信开放平台后台设置(上文“准备工作”配图第二个红框)。

  • component_appid、component_appsecret:开放平台的APPID和APPSECRET,可在微信开放平台后台查到(上文“准备工作”配图第一个红框)。

  • component_verify_token:从微信开放平台拿到 component_access_token,2小时有效期。后续的接口调用都会依赖这个token。

流程如上图。作为第三方平台的工作有:

  1. 提供一个对外的接口,供微信开放平台调用。微信开放平台每10分钟会调用一次这个接口,发送component_verify_ticket。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/component_verify_ticket.html。

  2. 微信发过来的数据是加密的,需要解密后才能拿到component_verify_ticket。解密需要用到消息加解密Key(文档里叫EncodingAESKey)。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Before_Develop/Technical_Plan.html)。

  3. 解密后的component_verify_ticket需要储存起来。有效期12小时,只保存最新的一个就行了。

  4. 调用微信接口,请求component_access_token,并储存起来。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/component_access_token.html)。

  5. component_access_token有效期两个小时。还得做一个定时任务,在过期之前重新调接口,刷新储存的component_access_token。


Step2:小程序授权

这一步的最终目的是拿到有效的authorizer_access_token。区别于上一步的component_access_token,一个第三方平台只需要一个component_access_token;而authorizer_access_token则是每个授权给第三方平台的小程序,都需要自己独立的authorizer_access_token。

流程如上图。作为第三方平台的工作有:

  1. 提供界面,供小程序运营方使用。先做一个“点击授权”的按钮。

  2. 当用户开始授权,向微信请求预授权码。由于预授权码有效期只有半小时,所以才建议做一个“点击授权”的按钮,点击按钮才去获取预授权码。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/pre_auth_code.html)。

  3. 构造授权链接。这一步有两种方式:微信原生的授权注册页面 和 移动端快速授权链接,参数和用法是一样的。auth_type要填2,表示只授权小程序,避免客户误操作授权了公众号。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/Before_Develop/Authorization_Process_Technical_Description.html)。

  4. 小程序运营方,用管理员微信扫码扫码或打开链接,完成授权之后,会跳转到上一步设置的回调地址redirect_uri。回调地址,可以包含一些自定义参数,用于授权完打开回调页面的时候,区分是哪个用户授权的。

  5. 小程序运营方完成授权,或者修改授权信息,或者取消授权,微信开放平台都会往 授权事件接收URL(上文“准备工作”配图第二个红框) 推送消息。推送的内容是加密的,解密方法跟上文获取component_verify_ticket是一样的。解密完可以拿到 authorization_code。(取消授权没有authorization_code)。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/authorize_event.html)。

  6. 完成授权后跳转的回调地址中,也包含了authorization_code。请求微信接口,获取授权信息,包括authorizer_access_token、authorizer_refresh_token 和 授权的权限集列表等。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/authorization_info.html)。

  7. 储存authorizer_access_token和authorizer_refresh_token,有效期两个小时。

  8. 做一个定时任务,在authorizer_access_token过期之前调用刷新接口,储存新鲜的authorizer_access_token和authorizer_refresh_token。参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/token/api_authorizer_token.html)。


以上是小程序运营方原本已有小程序,授权给第三方平台时候的流程。有时候,客户并不懂技术,甚至懒得自己去注册小程序。微信开发平台还提供了第三方平台代注册小程序的流程,可以参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Register_Mini_Programs/Fast_Registration_Interface_document.html),此处不展开细讲。在快速创建小程序场景下,注册审核时也会发事件推送,推送信息包含authorization_code,拿到后换取authorizer_access_token的流程跟授权小程序是一致的。

Step3:对接接口

拿到 authorizer_access_token 之后,就能调用微信的接口,对授权的小程序做各种操作。微信提供的接口多达数百个,全部对接下来,能实现跟微信小程序后台几乎完全一样的功能。考虑到工作量巨大,建议根据业务需求,对接一小部分常用的接口,做一个简化版的管理后台。下面列几个常用接口。


获取授权帐号信息:获取头像、昵称等信息,还能获取到 小程序认证类型。小程序里一些功能(比如获取用户手机号、使用webview等),需要完成认证才能使用。

设置服务器域名:设置小程序需要用到的域名。需要先将域名登记到第三方平台的 小程序服务器域名(上文“准备工作”配图第二个红框),再调用这个接口。

设置业务域名:设置小程序业务域名,webview等功能会用到。同样需要先把域名登记到第三方平台的业务域名里。

设置名称、修改头像、修改功能介绍:这些都有修改次数的限制,可以先调用 获取基本信息 接口,获取到剩余修改次数。这些信息都是必填的,填完才能发布小程序。

插件管理:通过useExtendedLib扩展库的方式引入引入weui,需要添加“wxfa43a4a7041a84de”的插件。

设置最低基础库:如果小程序开发过程中用到某些API有最低版本库要求,可以调接口限制一下最低版本库。

类目管理:添加、修改小程序的类目,有些还需要上传相关资质。

订阅消息:先查类目,根据业务需求添加订阅模版,然后才能发送订阅消息。

生成小程序码和二维码:用于生成带参数的小程序码。

添加体验者:把自己的微信号添加进体验者列表里,可以在发布之前进入体验版,测试完再发布。

云开发:接口很多,此处不列举了,看文档操作即可。


其他接口可以参考微信文档。有些接口还有权限之类的限制,文档里都有说明。


Step4:小程序开发

上文准备工作已经注册了两个小程序:小程序A用于开发,添加开发者小程序中;小程序B用于测试,添加到授权测试小程序中。参考微信文档(https://developers.weixin.qq.com/miniprogram/dev/devtools/ext.html),其中,3rdMiniProgramAppid是小程序A的appid,extAppid是小程序B的appid。


下载最新版本的微信开发者工具,创建一个新的项目,appid填小程序A的appid。创建完之后,在app.js的同级目录下创建一个 ext.json 文件,文件内容参考第三方平台代开发文档,把其中的 extAppid 改为 小程序B的appid。之后就跟开发普通的小程序一致了。小程序的信息、权限、服务器域名、业务域名等配置,都是取小程序B的。如需修改,可按照上文步骤完成小程序授权,再调接口去修改。而小程序A只是用来上传代码的,不用授权。


同一份源码,修改ext.json的extAppid,即可生成不同的小程序:


Step5:小程序代码管理与发布

终于把小程序开发完了,接下来要把代码发布为一个真正能用的小程序。流程如下图:

  1. 在开发者工具里面,右上角上传代码的按钮,把代码上传到草稿箱中。上传的内容只包含代码,不包含本地的ext.json。

  2. 调用 获取代码草稿列表 接口,选择刚刚上传的代码,添加到代码模板库中,参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/ThirdParty/code_template/addtotemplate.html)。

  3. 对接 获取代码模版列表 、删除指定代码模版 接口。也可以在微信开发平台的开发配置中,查看所有的草稿和模版。后面上传代码会用到这里查到的模版id。

  4. 编写一个ext.json,extAppid是本次需要发布的小程序的appid。

  5. 调用 上传代码 接口,传入上面选择的模版id和这个小程序的ext.json。上传完的代码可以调用 获取已上传代码列表 接口查看。

  6. 如果你的微信刚好是这个小程序的开发者或体验者,可以调用 获取体验版二维码 接口,扫码体验小程序,自测一下有没有bug。

  7. 调用 提交审核 接口,提交微信审核。

  8. 代码审核结果会有推送,参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/code/audit_event.html)。推送的内容是加密的,解密过程跟上文提到的一致。如果错过了推送,也可以调用接口查询,参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/code/get_auditstatus.html)。

  9. 如果审核不通过,会返回不通过的原因,比如类目不符合,内容不合法之类的。调整之后再重新提交审核。

  10. 审核通过之后,就能发布这个小程序了,参考微信文档(https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/2.0/api/code/release.html)。


至此,小程序成功发布,可以在微信里直接访问了。


总结

本文介绍了 实现一个微信小程序代开发 第三方平台 的流程。

微信小程序官方文档,原话这么说:“开发第三方平台小程序具有一定的复杂性”。我自己实践过之后,只觉得需要对接的接口很多,需要花费大量的精力去查阅文档。过程中可能又会衍生出许多问题,需要逐个去社区查找解决方案。于是把整个过程整理成文,希望其他开发者摸着本文过河,能少走一些弯路。



本文来自工程师加一