Laravel 生成公众号带参二维码

1,550 阅读2分钟

记录一下公众号生成带参的二维码以及扫描之后流程跳转事件,这里使用的是EasyWechat

目录

  • 公众号配置
  • 生成二维码
  • 扫码回调以及参数

公众号配置

config/wechat.php里面配置一下就可以了,参数都在公众平台上,如果不清楚或者不知道,就直接登录公众平台,然后拿到对应的参数填入就可以了,当然调用微信接口必须的配置,还是需要自己去配置的

/*
     * 公众号
     */
    'official_account' => [
        'dudu' => [
            'app_id' => xxxx,         // AppID
            'secret' => xxxx,    // AppSecret
            'token' => xxxx,           // Token
            'aes_key' => env('WECHAT_OFFICIAL_ACCOUNT_AES_KEY', 'default'),                 // EncodingAESKey

            /*
             * OAuth 配置
             *
             * scopes:公众平台(snsapi_userinfo / snsapi_base),开放平台:snsapi_login
             * callback:OAuth授权完成后的回调页地址(如果使用中间件,则随便填写。。。)
             */
            // 'oauth' => [
            //     'scopes'   => array_map('trim', explode(',', env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_SCOPES', 'snsapi_userinfo'))),
            //     'callback' => env('WECHAT_OFFICIAL_ACCOUNT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
            // ],
        ],
    ],

生成二维码

场景值其实就是自定义带过去的参数,当用户扫描二维码之后会在对应的接收事件中获取到这个参数

/**
     * 生成带参二维码
     * @return mixed
     */
    public function createQrCode(Request $request)
    {
        $appConf = 'wechat.official_account.dudu';
        $app = app($appConf);
        $config = "123";// 场景值
        $result = $app->qrcode->temporary("$config", 24 * 3600); //生成有效期为一天的二维码
        // 获取二维码链接
        $url = $app->qrcode->url($result['ticket']);
        return $this->array($url);
    }

返回参数

这里最麻烦的其实还是调试,因为一般很难去配什么测试环境来调试这些东西,特别是回调是扫码之后微信发起的,所以贴上每个事件的回调参数

返回参数

1 用户已经关注了公众号扫码
{
    "ToUUserName":"xxx",
    "FromUserName":"xxx",
    "CreateTime":"1576651920",
    "MsgType":"event",
    "Event":"SCAN",
    "EventKey":"123",  // 这里其实就是我们自己定义的场景值
    "Ticket":"xxx"  // 这里是在生成二维码的时候返回的Ticket
}
2 用户未关注公众号扫码

这里跟用户已经关注了公众号的扫码不同,这里返回的仍然是subscribe事件,也就是关注事件,而且返回的场景值会带一个前缀为qrscene_

{
"ToUUserName":"xxx",
"FromUserName":"xxx",
"CreateTime":"1576651784",
"MsgType":"event",
"Event":"subscribe",
"EventKey":"qrscene_123", 
"Ticket":"xxx"
}

有了具体的参数就很容易了,只要在本地模拟出参数,就可以比较方便的进行配置。之后就只要在控制器中对应的事件里面进行相应的操作就可以了。