本文档从服务端讲起,开发语言为php
获取小程序码,适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。 更多用法详见 获取二维码。
HTTPS 调用
请求地址
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
请求参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
access_token / cloudbase_access_token | string | 是 | 接口调用凭证 | |
scene | string | 是 | 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~ ,其它字符请自行编码为合法字符(因不支持% ,中文无法使用 urlencode 处理,请使用其他编码方式) | |
page | string | 主页 | 否 | 页面 page,例如 pages/index/index ,根路径前不要填加 / ,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面 |
check_path | boolean | true | 否 | 检查 page 是否存在,为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在, 但 page 有数量上限(60000个)请勿滥用 |
env_version | string | "release" | 否 | 要打开的小程序版本。正式版为 release ,体验版为 trial ,开发版为 develop |
width | number | 430 | 否 | 二维码的宽度,单位 px,最小 280px,最大 1280px |
auto_color | boolean | false | 否 | 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认 false |
line_color | Object | {"r":0,"g":0,"b":0} | 否 | auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十进制表示 |
is_hyaline | boolean | false | 否 | 是否需要透明底色,为 true 时,生成透明底色的小程序 |
返回值
Buffer
返回的图片 Buffer
异常返回
Object
JSON
属性 | 类型 | 说明 |
---|---|---|
errcode | number | 错误码 |
errmsg | string | 错误信息 |
注意这里--返回值说明
如果调用成功,会直接返回图片二进制内容,如果请求失败,会返回 JSON 格式的数据。如果你没有获取到二进制的base64二维码图片信息,说明接口出错了,请从access_token 或者 参数方面检查。
下面列举具体代码
//配置APPID、APPSECRET
$APPID = $res['key'];
$APPSECRET = $res['secret'];
$userId = $_GET['userId'];
//获取access_token
$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$APPID}&secret={$APPSECRET}";
//缓存access_token
session_start();
$_SESSION['access_token'] = "";
$_SESSION['expires_in'] = 0;
$ACCESS_TOKEN = "";
if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in']))
{
$json = httpRequest( $access_token );
$json = json_decode($json,true);
$_SESSION['access_token'] = $json['access_token'];
$_SESSION['expires_in'] = time()+7200;
$ACCESS_TOKEN = $json["access_token"];
}
else{
$ACCESS_TOKEN = $_SESSION["access_token"];
}
//构建请求二维码参数
//path是扫描二维码跳转的小程序路径,可以带参数?id=xxx
//width是二维码宽度
$qcode ="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={$ACCESS_TOKEN}";
$param = json_encode(array("scene"=>"user_id={$userId}","page"=>"pages/home_index/index","check_path"=>false,"env_version"=>"release","width"=> 150,"is_hyaline"=>true));
//POST参数
$result = httpRequest( $qcode, $param,"POST");
//生成二维码
// file_put_contents("qrcode.png", $result);
$base64_image ="data:image/jpeg;base64,".base64_encode( $result );
$this->result(0, '成功', ['qrcode'=>$base64_image,'wxName'=>$SystemSet['wxName']]);
//把请求发送到微信服务器换取二维码
function httpRequest($url, $data='', $method='GET'){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
if($method=='POST')
{
curl_setopt($curl, CURLOPT_POST, 1);
if ($data != '')
{
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
}
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
扫码看下效果你就知道了,也可自定义小程序跳转地址,小程序内提供获取到参数后如何解析获取二维码中的参数