微信小程序生成带参数的二维码以及小程序码
微信小程序生成带参数的二维码
官方共给了三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口B和接口C。
官方文档地址
业务需求:
扫描二维码进入指定详情页面,需要的参数为详情id。
一、先看效果图:
二、PHP代码实现
/** * 小程序生成二维码(手动) * @return string */ public function _getUnlimitedManual(Request $request) { $scene = $request->input('scene', '');// 小程序参数 $page = $request->input('page', '');// 扫码后显示的页面 $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $this->getAccessToken(); $data = [ "scene" => $scene, "page" => $page, ]; $json = $this->getData($url, "POST", json_encode($data)); $file = storage_path() . "/Manual" . "/qrcode" . rand(1, 999) . ".png"; file_put_contents($file, $json); return $file; }
/** * 获取access_token * @return string 返回access_token的值 */ public function getAccessToken() { //开启session // session_start(); //对access_token做缓存处理 if (isset($_SESSION["wechat_access_token"]) && (time() - $_SESSION["wechat_expire_time"] < 7000)) { return $_SESSION["wechat_access_token"]; } else { //接口地址 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=小程序appid&secret=小程序secret"; $access_token = json_decode($this->getData($url), true)["access_token"]; $_SESSION["wechat_access_token"] = $access_token; $_SESSION["wechat_expire_time"] = time(); return $access_token; } }
public function getData($url, $method = 'GET', $arr = '')
{
//初始化curl
$ch = curl_init();
//需要获取的URL地址
curl_setopt($ch, CURLOPT_URL, $url);
//将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//禁用后cURL将终止从服务端进行验证。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//strtoupper($method)把传递过来的method转为大写
if (strtoupper($method) == 'POST') {
//启用时会发送一个常规的POST请求
curl_setopt($ch, CURLOPT_POST, 1);
//全部数据使用HTTP协议中的"POST"操作来发送
curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
}
//执行cURL请求
$ret = curl_exec($ch);
//关闭资源
curl_close($ch);
return $ret;
}
注:微信小程序js文件中接收scene所带的参数方法(小程序码需要这么接收)
onLoad: function (options) {
const scene = decodeURIComponent(options.scene)
console.log(scene )
}
备注
1、前端接收scene值解析:
你在php代码中scene传的什么,接收到的就是上面,我这里scene传的20,打印出来就是20,如果scene传的goods_id=20, 那么前端打印出来就是goods_id=20
2、微信开发者工具里面有一个通过二维码编译选项,也可以用这个测试你的生成的码,见下图:
发表评论