小程序获取菊花码的问题
小程序获取小程序码提供了三个接口
接口A: 适用于需要的码数量较少的业务场景 接口地址:
https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
POST 参数说明(先写表格会出现两个对markdown语法还不太熟悉,就先用dai ma hang)
参数 类型 默认值 说明
path String 不能为空,最大长度 128 字节
width Int 430 二维码的宽度
auto_color Bool false 自动配置线条颜色,line_color {"r":"0","g":"0","b":"0"}
接口B:适用于需要的码数量极多,或仅临时使用的业务场景
接口地址:
https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
POST 参数说明
参数 类型 默认值 说明
scene String 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 encodeUrl 处理,请使用其他编码方式)
page String 不能为空,最大长度 128 字节
width Int 430 二维码的宽度
auto_color Bool false 自动配置线条颜色,line_color {"r":"0","g":"0","b":"0"}
line_color Object rgb(0,0,0) auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"}{"r":"0","g":"0","b":"0"}
获取小程序二维码
接口C:适用于需要的码数量较少的业务场景
接口地址:
https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
POST 参数说明
参数 类型 默认值 说明
page String 不能为空,最大长度 128 字节
width Int 430 二维码的宽度
示例:
{"path": "pages/index?query=1", "width": 430}
注:pages/index 需要在 app.json 的 pages 中定义
根据公司业务需求获取小程序码我们都是需要第二个接口:
问题来了:第二个接口的scene字段是什么?一说场景值,一说需要带的参数值。
1.首先获取ACCESS_TOKEN,什么是ACCESS_TOKEN?
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。
详见:网页调试工具
所以最初的代码是:
wx.request({
// 获取token
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential',
data: {
appid: '***',
secret: '***'
},
success(res) {
wx.request({
// 调用接口C
url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' + res.data.access_token,
method: 'POST',
data: {
"path": "pages/qtshe/qtshe",
"width": 430
},
success(res) {
// res是二进制流,后台获取后,直接保存为图片,然后将图片返回给前台
}
})
}
})
上面这个例子是前端获取小程序码的写法。
因为前端获取到后接口返回的是个二进制的流,使用小程序自带的image标签是不能进行展示的,并且前端暴露AppID和AppSecret密钥不安全,所以这里的操作都是需要后端来进行的,此时交给后端进行转换并返回一张小程序码的图片给你。
前端只需要拿到后端返回图片的图片展示即可。现与后端约定:
我给页面page(第一,第三个接口是path)路径,以及需要的scene字段。
期间遇到的问题:scene字段是什么?我怎么拿到?
期间设想scene是扫码后才能拿到的场景值,注意是扫码后才会有,那我怎么生成小程序码,这里陷入一个误区了。
其实scene在这里你可以理解为传参数的一个字段。
⚠️第一个第三个接口是不需要传入scene字段的且字段为path
path: 'pages/index/index?jobId=111111' //此时字段是path
⚠️第二个接口是需要的且字段为page
scene: 'jobId=111111', //(string类型)
page: 'pages/index/index' //此时字段是page注意前面不要加'/'
⚠️生成的小程序码都是只能跳转线上的小程序页面,如果线上没有页面是跳转不了的,当然跳转后需要在我要跳转的页面onLoad里拿到scene字段然后进行逻辑操作
使用如下代码可以获取到二维码中的 scene 字段的值。调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 encodeUrl
Page({
onLoad: function(options) {
// options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
var scene = decodeURIComponent(options.scene)
}
})
- tip:通过该接口,仅能生成已发布的小程序的二维码。
- tip:可以在开发者工具预览时生成开发版的带参二维码。
- tip:接口A加上接口C,总共生成的码数量限制为100,000,请谨慎调用。
- tip: POST 参数需要转成 json 字符串,不支持 form 表单提交。
- tip: auto_color line_color 参数仅对小程序码生效。
- 这样进行调试模拟线上环境只要在onLoad里拿到scene即可
image
因产品需求原因需先上线,所以生成小程序码需要在正式上才能测试,所以这里先用到第一个接口,然后再慢慢改为第二个接口调试。具体效果可以查看青团社兼职实习小程序 随便点击一个兼职,进入详情页,左下角有个分享码,生成即可。
青团社招聘:
招聘岗位:高级前端开发工程师P5及以上
坐标杭州市余杭区文一西路1380号金之源大厦11层
简历投递到:hr@qtshe.com || haochen@qtshe.com
职位描述:
1、建设工具、提炼组件、抽象框架,促进前端工程化、服务化,持续提升研发效率,保障线上产品质量
2、构建H5/PC应用基础设施,主导建设前端各种发布/监控等平台,指导落实解决方案
3、持续优化前端页面性能,维护前端代码规范,钻研各种前沿技术和创新交互,增强用户体验、开拓前端能力边界