业务场景是:系统有一些宣传海报,用户进入海报详情页会获取自己唯一的海报二维码,别人扫二维码可以有一系列的业务流程处理
框架用的微擎
话不多说直接上代码:
function getImgUrl($scene_id){ // 当用户是第二次进入到系统中时可以直接获取之前存储的二维码
global $_W,$_GPC;
$rs = pdo_get('sanshi_haibao_qrcode',array('scene_id'=>$scene_id));
// 插入二维码表
if(!$rs){
$content = getQrcodeImage($scene_id);
$qrcode = array(
'type'=>1,
'scene_id'=>$scene_id,
'ticket'=>$content['ticket'],
'expire'=>$content['expire_seconds'],
'created_at'=>date('Y-m-d H:i:s'),
'uniacid'=>$_W['uniacid'],
);
// 通过ticket请求地址得到图片
$qrcode['url'] = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($content['ticket']);
$content = file_get_contents($qrcode['url']);
file_put_contents(IA_ROOT.'/attachment/images/poster/'.$scene_id.'.jpg', $content);
$res = pdo_insert('sanshi_haibao_qrcode',$qrcode);// 插入二维码表
}
$imageUrl = '/attachment/images/poster/'.$scene_id.'.jpg';
return $imageUrl;
}
function getQrcodeImage($scene_id){ // 通过用户独特的scene_id获取二维码ticket等信息
global $_W,$_GPC;
if($scene_id == ''){
message('error');
}
load()->model('account');
// 生成二维码
$uniacccount = WeAccount::create($acid); // 获取公众号信息
$barcode['expire_seconds'] = '2592000'; // 过期时间
$barcode['action_info']['scene']['scene_id'] = $scene_id;
$barcode['action_name'] = 'QR_SCENE';
$token = $uniacccount->getAccessToken();
$response = ihttp_request("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$token, json_encode($barcode));
if (is_error($response)) {
return $response;
}
$content = @json_decode($response['content'], true);
if(empty($content)) {
return error(-1, "接口调用失败, 元数据: {$response['meta']}");
}
if (!empty($content['errcode'])) {
return error(-1, "访问微信接口错误, 错误代码: {$content['errcode']}, 错误信息: {$content['errmsg']},错误详情:{$this->errorCode($content['errcode'])}");
}
return $content;
}
代码很青涩,请赐教