PHP调微信小程序接口:生成小程序码,常见问题

1,068 阅读2分钟

一、接口文档地址

获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效数量暂无限制

二、接口调用

三、返回值

1、说明

  • 如果调用成功,会直接返回图片==二进制内容==,如果请求失败,会返回 ==JSON 格式==的数据。

2、正常返回

  • 返回的图片 Buffer

3、异常返回

  • 数据格式:json
  • json内容:errcode(number)-错误码;errmsg(string)-错误信息
  • errcode 的合法值:45009-调用分钟频率受限(目前5000次/分钟,会调整),如需大量小程序码,建议预生成;41030-所传page页面不存在,或者小程序没有发布

四、注意

  • POST 参数需要转成 JSON 字符串,不支持 form 表单提交。
  • 接口只能生成已发布的小程序的二维码
  • 调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成
  • scene 参数:最大32个可见字符,==只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~==,其它字符请自行编码为合法字符(因==不支持%==,中文无法使用 urlencode处理,请使用其他编码方式)
  • page 参数:必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),==如果不填写这个字段,默认跳主页面==

五、PHP调用

  • 代码
public function test() {
    $result = self::getQrCode();
    var_export($result);
    die();
}

//获取二维码
public function getQrCode() {
    $url = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN';
    $data = [
        'scene' => 'uid=1&orderId=2', //最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
        'page' => '', //必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
        'width' => 200, //二维码的宽度,单位 px,最小 280px,最大 1280px
    ];
    $result = self::curlPostJson($url, $data);
    return $result;
}

    //json post请求
public function curlPostJson($url, $data, $header = []) {
    $data = json_encode($data);
    $ch = curl_init();
    if (!empty($data)) {
        curl_setopt($ch, CURLOPT_POST,true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    $header[]='Content-Type: application/json; charset=utf-8';
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //为true,则会跟踪爬取重定向页面,否则,不会跟踪重定向页面
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置超时时间:30s
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //忽略ssl检测
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //1 或 TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。-
    curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header
    curl_setopt($ch, CURLOPT_URL, $url);
    $output = curl_exec($ch);
    if (!$output) {
//        echo "request $url fail:", (array)curl_error($ch); //记录日志
    }
    curl_close($ch);
//    echo "request $url success:" . json_encode(array($url, $header, $output), true); //记录日志
    return $output;
}
  • 输出
'{"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest rid: 60a3271a-770b3ab0-448314f5"}'