使用laravel5.4结合easywechat进行微信开发--二维码场景使用

目前有 2 种类型的二维码: 

1-临时二维码:

是有过期时间的,最长可以设置为在二维码生成后的 30天后过期,但能够生成较多数量。

临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景。

 2-永久二维码:

是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

详情惨开官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542

大家都知道啊,当用户通过扫码或者向公众号发送消息或者操作时,服务器都会收到对应的XML数据,

但是在扫描二维码时,传递的时候,XML会有包含场景值得字段信息:

参数	描述
ToUserName	开发者微信号
FromUserName	发送方帐号(一个OpenID)
CreateTime	消息创建时间 (整型)
MsgType	消息类型,event
Event	事件类型,subscribe
EventKey	事件KEY值,qrscene_为前缀,后面为二维码的参数值
Ticket	二维码的ticket,可用来换取二维码图片

根据以上情况,结合easywechat,使用以下:

场景值可以是字符串,或者整型

scene_id	场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1--100000)
scene_str	场景值ID(字符串形式的ID),字符串类型,长度限制为1到64
$result = $app->qrcode->temporary('foo', 6 * 24 * 3600);
//这个是临时二维码,'foo'为场景值,6 * 24 * 3600代表6天,如果不设置,默认为30秒,最长为30天
// $result
// (
//     [ticket] => gQFD8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyTmFjVTRWU3ViUE8xR1N4ajFwMWsAAgS2uItZAwQA6QcA
//     [expire_seconds] => 518400
//     [url] => http://weixin.qq.com/q/02NacU4VSubPO1GSxj1p1k
// )
//永久二维码生成
$result = $app->qrcode->forever(56);// 或者 $app->qrcode->forever("foo");
// Array
// (
//     [ticket] => gQFD8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyTmFjVTRWU3ViUE8xR1N4ajFwMWsAAgS2uItZAwQA6QcA
//     [url] => http://weixin.qq.com/q/02NacU4VSubPO1GSxj1p1k
// )
//然后通过结果里面的ticket来获取二维码链接
$url = $app->qrcode->url($ticket);
//$url = https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQEp8jwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydjRMZ05IdDVjRjAxMDAwMDAwM1cAAgTquLRaAwQAAAAA
//打开链接为二维码图片,当然,你也可以保存带本地
$content = file_get_contents($url); // 得到二进制图片内容
file_put_contents(__DIR__ . '/code.jpg', $content); // 写入文件
然后当用户扫码时,我们使用如下来获取场景值:
        $app = app('wechat.official_account');
        $app->server->push(function($message){
            return $message['EventKey'];//值为生成二维码时的场景值,可以在这里进行判断
        });
        return $app->server->serve();

或者使用这种获取场景值:

        $app = app('wechat.official_account');
        $msg = $app->server->getMessage();
        $app->server->push(function($message) use ($msg){
            return $msg['EventKey'];
        });
        return $app->server->serve();


猜你喜欢

转载自blog.csdn.net/myarche/article/details/79669735
今日推荐