记录一下公众号生成带参的二维码以及扫描之后流程跳转事件,这里使用的是
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"
}
有了具体的参数就很容易了,只要在本地模拟出参数,就可以比较方便的进行配置。之后就只要在控制器中对应的事件里面进行相应的操作就可以了。