获取微信小程序二维码

可直接通过微信扫描小程序二维码直接进入小程序,可用在分享推广业务。

此接口获取的小程序码为正方形图。

目录

功能描述

注意事项

对接

curl请求方法

获取小程序token

获取小程序二维码

参数说明

注意

请求结果


功能描述

获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制,详见获取二维码

注意事项

  • 如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。
  • POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
  • 接口只能生成已发布的小程序的二维码。开发版的带参二维码可以在开发者工具预览时生成。
  • wxacode.get 总共生成的码数量限制为 100,000,请谨慎调用。

对接

curl请求方法

需要请求微信小程序的API接口,封装好curl请求方法。

代码如下:

/**
 * 请求接口返回内容
 * @param $url :请求的URL地址
 * @param $method :请求方式POST|GET
 * @param $params :请求的参数
 * @param $header : 请求头
 * @return bool|string
 */
protected function linkCurl($url, $method, $params = array(), $header = array())
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if (strpos("$" . $url, "https://") == 1) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    if ($method == "POST") {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    } else if ($params) {
        curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
    }
    $response = curl_exec($ch);
    if ($response === false) {
        return false;
    }
    curl_close($ch);
    return $response;
}

获取小程序token

通过小程序的Appid和secret获取小程序的access_token。

得到access_token后就可以调用小程序的功能接口了。

代码如下:

/**
 * 获取电子签小程序接口调用凭证
 * @return mixed
 */
protected function contractMiniAccessToken()
{
    $APPID = ‘小程序appid’;
    $SECRET = ‘小程序secret’;
    $url = "https://api.weixin.qq.com/cgi-bin/token?appid={$APPID}&secret={$SECRET}&grant_type=client_credential";
    $res = $this->linkCurl($url, 'GET');
    $res = djson($res);
    if (isset($res['errcode']) && $res['errcode']) {
        return toFail($res['errmsg']);
    }

    return toSuccess('success', $res['access_token']);
}

获取小程序二维码

参数说明

参数:

path:必填,扫描后打开小程序的路径;

width:非必填,图片的宽度,默认是430。

成功后不返回errcode,返回的是二维码图片的二进制内容,需要把它写入到文件中,保存到服务器本地最后返回给前端。

注意

如果直接返回图片二进制内容,只会响应空白。

代码如下:

**
 * 获取小程序二维码
 * @return array|mixed
 */
public function createQRCode()
{
    $fileName = './uploads/contractQr.png';
    if(!file_exists($fileName)) {
        $res = $this->contractMiniAccessToken();
        if ($res['status'] != 1) return $res;

        $url = 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' . $res['data'];
        $param = [
            'path' => 'pages/index/index',
            'width' => 230,
        ];
        $data = json_encode($param);
        $header = array();
        $header[] = 'content-type:application/json';
        $info = $this->linkCurl($url, 'POST', $data, $header);
        if (strlen($info) < 300) {
            $res = djson($res);
            if (isset($res['errcode']) && $res['errcode']) {
                return toFail($res['errmsg']);
            }
        }
        file_put_contents($fileName, $info);
    }

    return toSuccess('success', ['img' => getSolveUrl($fileName)]);
}

请求结果

{
    "status":1,
    "message":"success",
    "data":{
        "img":"http://new.solveset.com/uploads/contractQr.png"
    },
    "total":0
}

二维码示例

微信小程序二维码中可以携带参数,这些参数在用户扫描二维码后进入小程序页面时可以通过 `onLoad` 函数中的 `options` 参数获取。具体来说,如果二维码是普通链接形式(如通过草料等工具生成),则参数会包含在 URL 中;如果是通过微信接口生成的小程序码,则参数可能以 `scene` 字段的形式传递。 ### 获取普通二维码中的参数 对于普通链接二维码,例如 `index/index?tempId=123&tempName=test`,可以通过解析 `options.path` 来提取参数。以下是一个示例代码片段: ```javascript onLoad: function(options) { console.log(options); let qrUrl = decodeURIComponent(options.path); // 获取二维码中带的地址及参数 console.log(qrUrl); var tempId = this.getQueryString(qrUrl, "tempId"); // 解析二维码中地址中的参数 tempId var tempName = this.getQueryString(qrUrl, "tempName"); // 解析二维码中地址中的参数 tempName console.log(tempId); console.log(tempName); }, // 解析链接方法 getQueryString: function(url, name) { var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i'); var r = url.substr(1).match(reg); if (r != null) { return r[2]; } return null; } ``` ### 获取通过微信接口生成的小程序码中的参数 对于通过微信接口生成的小程序码,参数通常是以 `scene` 字段的形式传递。这种情况下,可以直接从 `options.scene` 提取参数。以下是一个示例代码片段: ```javascript onLoad: function(options) { if (options.scene) { let scene = decodeURIComponent(options.scene); // 获取并解码 scene 参数 console.log(scene); let tempId = this.getQueryString(scene, 'tempId'); let tempName = this.getQueryString(scene, 'tempName'); console.log(tempId); console.log(tempName); } }, // 解析链接方法 getQueryString: function(url, name) { var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i'); var r = url.substr(1).match(reg); if (r != null) { return r[2]; } return null; } ``` ### 注意事项 - **普通二维码与微信接口生成的小程序码的区别**:普通二维码中的参数是直接暴露在 URL 中的,而通过微信接口生成的小程序码参数通常是通过 `scene` 字段传递的。 - **编码问题**:确保对 `options.path` 或 `options.scene` 的值进行 `decodeURIComponent` 处理,以便正确解析中文或其他非标准字符。 - **参数格式**:确保传递的参数格式符合预期,避免因参数格式错误导致解析失败[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值