首页 > 技术分享 > 原生PHP
收藏

PHP请求微信接口获取小程序码

05/17 13:44
大潇博客 原创文章,转载请标明出处

想要生成如图的小程序二维码:

大潇博客小程序码2.png        大潇博客小程序码1.png


小程序是有提供接口的,官方文档地址: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

文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html


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

文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html


上面接口,前两个生成圆形小程序码,第三个生成矩形小程序码,官方推荐使用第一个,可以极多次调用,每分钟上限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


若把二进制内容保存到本地,则会有一些自己的保存规则,以及垃圾回收机制,因为图片越存越多,应该进行合理的回收

2022-05-17_152635.jpg


上面既是生成小程序码的基本操作,这些看官方文档也能很快理解,所以写在这里,还是要有些不同于官方的声音,看了能更快更全面的上手

比如小程序端需要传的参数,仅有第一个可以极多次请求的接口使用到,参数名为“scene”,官方这样描述:

小程序scene.png


实际应用中,我们可能会遇到scene值没有正确传递的问题,这里做下补充

首先传递参数

scene值为页面所用的全部参数,通过“&”拼接,比如:a=1&b=2&c=3

把此参数写到url中直接访问时,程序会把“&”后面的当做接口中的参数,但在小程序或ajax请求中,不论GET或POST,此类参数直接写就可以,无需urlencode转码,举个例子:

QQ图片20220520133952.png

QQ图片20220520113351.png

上面两种,尤其是小程序中(网页ajax为临时测试可忽略),多参数使用“&”拼接后,可以直接传,无需encodeURIComponent转码(经过验证,可理解为,异步传参时会对“&”符号自动进行转码,后端节后到时自动转回)


通过小程序码打开小程序时,scene内的参数并不向小程序页面也页面之间跳转那样,在onload的query参数中直接使用,scene内的各参数会当做一个完成的参数显示,也就是我们前面怎么传,它现在就怎样显示,并且需要实现decodeURIComponent转码

所以想要获取参数信息,我们需要在onload中判断下是否存在scene,然后再做些简单处理,我的做法是若scene不为空,则对参数重新赋值,如下:

scene重新赋值.png


还要注意,有时scene值不生效,可能是没有给微信传“page”,这个参数为非必须参数,不传默认就是index,这点官方没有提及,但人实际遇到过。


下载地址:share_qrcode

打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311