F2e踩坑之路程序员Java 杂谈

小程序获取菊花码的问题

2017-12-04  本文已影响974人  人类进化又没带我

小程序获取小程序码提供了三个接口

接口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)
  }
})
  1. tip:通过该接口,仅能生成已发布的小程序的二维码。
  2. tip:可以在开发者工具预览时生成开发版的带参二维码。
  3. tip:接口A加上接口C,总共生成的码数量限制为100,000,请谨慎调用。
  4. tip: POST 参数需要转成 json 字符串,不支持 form 表单提交。
  5. tip: auto_color line_color 参数仅对小程序码生效。
  6. 这样进行调试模拟线上环境只要在onLoad里拿到scene即可
image
image

因产品需求原因需先上线,所以生成小程序码需要在正式上才能测试,所以这里先用到第一个接口,然后再慢慢改为第二个接口调试。具体效果可以查看青团社兼职实习小程序 随便点击一个兼职,进入详情页,左下角有个分享码,生成即可。

青团社招聘:

招聘岗位:高级前端开发工程师P5及以上
坐标杭州市余杭区文一西路1380号金之源大厦11层

简历投递到:hr@qtshe.com || haochen@qtshe.com

职位描述:

1、建设工具、提炼组件、抽象框架,促进前端工程化、服务化,持续提升研发效率,保障线上产品质量

2、构建H5/PC应用基础设施,主导建设前端各种发布/监控等平台,指导落实解决方案

3、持续优化前端页面性能,维护前端代码规范,钻研各种前沿技术和创新交互,增强用户体验、开拓前端能力边界

上一篇下一篇

猜你喜欢

热点阅读