微信小程序生成带参数的二维码以及小程序码

微信小程序生成带参数的二维码

官方共给了三个接口调用,大家可以根据自己的实际情况来使用,我这里使用的是接口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、微信开发者工具里面有一个通过二维码编译选项,也可以用这个测试你的生成的码,见下图:
在这里插入图片描述

标签

发表评论