官方接口
微信小程序码共有3个接口可以生成:
- 获取小程序码
POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
该接口用于获取小程序码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制path参数指定扫码进入的页面,最大长度 1024 字节,不能为空可以带参数
page/example?foo=bar
- 获取不限制的小程序码
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
该接口用于获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制page参数指定扫码进入的页面,非必要参数,不可以带参数
page/example
- 获取小程序二维码
POST https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制path参数指定扫码进入的页面,最大长度 128 字节,不能为空,可以带参数
page/example?foo=bar
以上3个接口之间的差异主要在于参数以及可以生成的数量, 接口1和3整体差异比较少(path参数长度不同; 小程序码和小程序二维码),接口2生成数量不受限制,但是指定打开的页面的参数page
不能带参数(可以考虑通过scene
参数传递,我目前还没验证)
具体的差异和参数可以通过链接查看官方文档
Golang实现
我根据自己的需要,选择了接口1的形式来实现,其他的接口只是接口url和参数的差异,整体流程和调用方式都是一样的。
获取ACCESS_TOKEN
1 | func requestToken(appid, secret string) (string, error) { |
获取小程序码
1 | func GetQRCode(id string) ([]byte, error) { |
常见问题
整个过程主要在调试时比较费时间,微信接口返回的错误信息比较范,记录下主要遇到的几种问题
40159
{\"errcode\":40159,\"errmsg\":\"invalid length for path, or the data is not json string hint: [Id2VBa0339xa11]\"}
主要是检查传递的参数,特别是path
对应的长度
我这边是因为从接口2修改为接口1,但是
page
参数名没有修改为path
,导致系统判断path
为空,一直提示此错误
40169
errCode: 40169 errMsg: "openapi.wxacode.getUnlimited:fail invalid length for scene, or the data is not json string rid: 62764ad3-09f60c12-58046222"
接口2中scene
参数,最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&’()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)