第一步创建ticket:
那么我们就需要创建这样的post数据:
{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}
或者是
{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}
{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
第一个参数代表有效时间,第二个参数就是临时二维码的标识,是一个常量,第三个参数就是我们要放进去的“scene_id”
这里要注意一下,scene_str,是创建字符串形式的。
第一步,我们将要获取ticket(这里我们用的是字符串形式!!!)
$queryUrl = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$accessToken;
$queryAction = 'POST';
$template = array();
if($type == 1){
$template['expire_seconds'] = $expireSeconds;
$template['action_name'] = 'QR_STR_SCENE';
}else{
$template['action_name'] = 'QR_LIMIT_STR_SCENE';
}
$template['action_info']['scene']['scene_str'] = $sceneStr;
$template = json_encode($template,JSON_UNESCAPED_UNICODE);
$template将返回以下值
{"expire_seconds":"2592000","action_name":"QR_STR_SCENE","action_info":{"scene":{"scene_str":"你好"}}}
这样我们便创建好了一个符合要求的字符串,接下来只需要去调用接口就可以了。
return Curl::callWebServer($queryUrl, $template, $queryAction);
我的Curl::callwebserver方法中写的是调用外部url的方法。
如果正确的话就会返回
{"ticket":"gQFL8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyWHNFdjRPYU1kWm0xZXBPOGhyY0UAAgSZZeFaAwQAjScA","expire_seconds":2592000,"url":"http:\/\/weixin.qq.com\/q\/02XsEv4OaMdZm1epO8hrcE"}
我们将会得到ticket。
第二步,根据ticket去换取二维码。提醒这里ticket需要进行urlencode。
$queryUrl = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.urlencode($ticket);//将字符串以url编码
$queryAction = 'GET';
$result = Curl::callWebServer($queryUrl, '', $queryAction, 0);
这样ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。
我们可以将图片下载到本地:
$filename='./Public/qrcode/' .time().'.jpg';
file_put_contents($filename, $result);
然后就可以显示在页面上了。