1.jpg

一、需要

在开发小程序的时候有一个需求是生成用户的二维码。

这个二维码是 用户可刷新的 ,也就是说,这个二维码是 可能经常变化的

因此需要使用的二维码方案是 B 方案

二、实现

小程序二维码文档地址:

二维码有三种方案:

  • 接口A
  • 接口B
  • 接口C

其中如果经常变动的,那肯定是接口B,接口C和接口A都是 永久有效并且是有限的

接口B的原理

  1. 生成的二维码访问都是访问小程序首页
  2. 访问首页的时候会带一个 scene 参数
  3. 首页 onLoad 根据 options.scene 进行判断并跳转。

三、代码

接口是需要在服务端进行调用,并且需要access_token.关于access_token就不多说了,文档中说的很明白。

access_token 文档地址:

api 服务器端代码实现:

/**
* 获取qrcode信息
*/
// 拿到access_token
$Wx=new Wx();
$accessToken=$Wx->getAccessToken();
// 构建url
$url='http://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$accessToken;
// 拼接发送数据 这里我就发送了 scene 和 width
$data['scene']=$userInfo->share_code;
$data['width']='300';
// 发送请求并且拿到 如片
$dataImg=(curl_post_json($url,[],json_encode($data)));
// 进行base64编码
$img=base64_encode($dataImg);

需要注意的是,发送请求返回的是 二进制 ,进行base64处理。可以进行server端保存。

输出图片

可以使用 img 标签查看二维码

echo "<img src='data:image/png;base64,".$img."' >"; 

如果想直接在小程序端使用base64的图片,则 image 组件下面这样写就可以了:

<image src="data:image/png;base64,xxxxxxxxxxxxxxxxxxxxxxx"></image>