想要生成如图的小程序二维码:
小程序是有提供接口的,官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
下面简单说一下
其实生成小程序码只有两步:
1、获取微信access_token
2、通过交换access_token获取小程序码
要啰嗦几句的是获取小程序码时的注意事项,以及拿到接口的处理方式
首先说注意事项
微信共提供三个获取小程序码的接口,分别是:
1、https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
2、https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN
文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html
3、https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
上面接口,前两个生成圆形小程序码,第三个生成矩形小程序码,官方推荐使用第一个,可以极多次调用,每分钟上限5000次,后面两个请求次数一共10万次
微信的接口全部要使用POST调用,传给微信的参数,要做成数组再转成json才可以
处理方式
若请求失败,微信会以json格式返回错误码及错误信息
请求成功时,微信直接返回小程序码(图片)的二进制内容,拿到结果后有两种处理方法
1、转码后输出,前端把转码后的字符串放到img标签即可
2、把二进制内容直接保存成图片
直接输出,处理方式较为简单,通过base64转码即可,如下:
$base64_image ="data:image/jpeg;base64,".base64_encode( $result );
echo "<'img src="'">";
注意:在返回给客户端展示的时候,php 在base64_encode 的时候返回前端需要对编码一个前缀。例如
data:image/jpeg;base64 //输出jpg
或者 data:image/png;base64 //输出png
若把二进制内容保存到本地,则会有一些自己的保存规则,以及垃圾回收机制,因为图片越存越多,应该进行合理的回收
上面既是生成小程序码的基本操作,这些看官方文档也能很快理解,所以写在这里,还是要有些不同于官方的声音,看了能更快更全面的上手
比如小程序端需要传的参数,仅有第一个可以极多次请求的接口使用到,参数名为“scene”,官方这样描述:
实际应用中,我们可能会遇到scene值没有正确传递的问题,这里做下补充
首先传递参数
scene值为页面所用的全部参数,通过“&”拼接,比如:a=1&b=2&c=3
把此参数写到url中直接访问时,程序会把“&”后面的当做接口中的参数,但在小程序或ajax请求中,不论GET或POST,此类参数直接写就可以,无需urlencode转码,举个例子:
上面两种,尤其是小程序中(网页ajax为临时测试可忽略),多参数使用“&”拼接后,可以直接传,无需encodeURIComponent转码(经过验证,可理解为,异步传参时会对“&”符号自动进行转码,后端节后到时自动转回)
通过小程序码打开小程序时,scene内的参数并不向小程序页面也页面之间跳转那样,在onload的query参数中直接使用,scene内的各参数会当做一个完成的参数显示,也就是我们前面怎么传,它现在就怎样显示,并且需要实现decodeURIComponent转码
所以想要获取参数信息,我们需要在onload中判断下是否存在scene,然后再做些简单处理,我的做法是若scene不为空,则对参数重新赋值,如下:
还要注意,有时scene值不生效,可能是没有给微信传“page”,这个参数为非必须参数,不传默认就是index,这点官方没有提及,但人实际遇到过。
下载地址:share_qrcode
下一篇:PHP生成随机推荐码方法