【小程序】动态生成微信小程序二维码

动态生成小程序二维码

  • 微信官方提供的接口
    • 使用演示
    • 排坑说明

微信官方提供的接口

官方文档中给我们提供了三个接口,分别应用于不同的场景
wxacode.createQRCode - - 接口文档地址->点击跳转
该接口需慎用,因为文档描述,该接口可生成的二维码是有限制的。

总共生成的码数量限制为 100,000

wxacode.get - - 接口文档地址->点击跳转
该接口需慎用,因为文档描述,该接口可生成的二维码是有限制的,且每日最大调用数为10000。

  • POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
  • 接口只能生成已发布的小程序的二维码。
  • 与 wxacode.createQRCode 总共生成的码数量限制为 100,000,请谨慎调用。

wxacode.getUnlimited - - 接口文档地址->点击跳转

  • POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
  • 接口只能生成已发布的小程序的二维码。
  • 调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成。

使用演示

【本演示,采用的是wxacode.get接口,使用的是uni.request请求方法】

  1. 第一步先获取到自己的accessToken。
  2. 请求接口路径,路径上需携带access_token=${access_token}的传值,且仅用此传值。
  3. 请求上需声明返回值类型为arraybuffer,不然会转换为utf-8影响后续操作,原因详见此处
  4. 使用官方提供的arrayBufferToBase64函数将arraybuffer转换为base64格式,再自行补充base64头部属性即可

代码演示

//获取access_token
uni.request({
	url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`,
	success(res) {
		if(res.statusCode < 300){
			console.log(res.data);
		}else {
			console.error('Accesstoken get fail!');
		}
	}
})

//获取二维码
uni.request({
	url: `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
	method:"POST",
	data: {
		path: `pages/index/index/?a=${a}`
	},
	responseType: 'arraybuffer',//此步很关键
	success(res) {
		//设置img标签上的src属性
		that.logoSrc = 'data:image/png;base64,' + uni.arrayBufferToBase64(res.data);
	},
	fail(res) {
		//...
	}
})

排坑说明

你在调用此接口的时候,往往会遇到一些奇奇怪怪的bug。
1.在成功调用接口的前提下,如果你的返回值出现乱码的情况,是因为返回值被转换成了utf-8的格式,此格式将无法再进行buffer处理,故你需要限制请求响应的数据格式。
2.返回结果说数据格式错误,如下

data format error rid: 63241b41-1f622122-62d884a8

可能你在传参的时候写的值名错误了,例如wxacode.getUnlimited接口传入的值名 对比 其他接口,path 被改成了 page

【欢迎各位大佬指正批评!】

你可能感兴趣的:(vue,常用技术方法,小程序,微信小程序)