开发微信小程序踩坑之路--前端获取带参数的微信二维码并绘制在canvas上

1.通过微信官方提供的api,请求二维码之前要先获取access_token

GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 

grant_type参数是固定的,拼上自己的APPID和APPSECRET,通过wx.request请求就可以了

2.然后通过access_token获取到二维码

POST https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

3.这一步是关键 

在第二步的wx.request中一定要加上

responseType:'arraybuffer'

代码如下:

wx.request({

url:"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ACCESS_TOKEN,

method:"POST",

contentType:"application/json",

responseType:'arraybuffer',

header:{

"Content-Type":"application/json;charset=utf-8"

},

data:post_data,

success:function (res) {}

})

post_data是你要带的参数

4.这样拿到的就是一个arraybuffer数据,然后将其存储在临时文件里,我是以二进制格式存储的

const fsm = wx.getFileSystemManager()
let name = 'tmp.bin'
let filePath = `${wx.env.USER_DATA_PATH}/${name}`
fsm.writeFile({
  filePath,
  data: bs, // bs就是拿到的arraybuffer
  encoding:'binary',
  success(res){
          
  },
  fail(e){
    console.log(e)   
  }
})

5.这样我们在本地文件里就有了二维码的图片文件,最后就是把数据读取出来给canvas画即可

路径就是上一步定义的filePath

let ctx = wx.createCanvasContext('shareCanvas'); // shareCanvas是canvas的Id
wx.getImageInfo({
  src:filePath,
  success:function (res) {
    ctx.drawImage(res.path, 0,0,90,90);
    ctx.stroke();
    ctx.draw();
  },
  fail:function(e){
    console.log(e)
  }
})

6.注意:微信给的请求二维码的api其实是给后端请求的,毕竟传的参数包含了APPID和APPSECRET,放在前端请求,参数暴露,存在安全隐患,所以最好是后端去请求,然后给前端一个地址,前端请求二维码图片地址再绘制canvas

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值