微信公众号开发(十)——扫描带参数二维码事件

我们通过微信扫码二维码已经是十分频繁的操作了,为了满足用户渠道推广分析和用户帐号绑定等场景的需要,微信公众平台提供了创建带参数二维码的接口,通过产生的ticket,去获取二维码图片。当用户扫描这个二维码时,公众平台就会向你设置的接口推送扫描消息。

二维码分为临时二维码和永久二维码,介绍可以参考官方文档。https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html 

为了区分推广渠道,二维码申请时提供了两种形式的自定义信息,一种是数据形式(设置scene_id值),另一种是字符串格式(设置scene_str值),有点类似android分发时的渠道码。

这里就以临时二维码为例来说明,提交格式如下:

数字形式

{
	"expire_seconds": 604800,
	"action_name": "QR_SCENE",
	"action_info": {
		"scene": {
			"scene_id": 123
		}
	}
}

字符串形式

{
	"expire_seconds": 604800,
	"action_name": "QR_STR_SCENE",
	"action_info": {
		"scene": {
			"scene_str": "bdmh"
		}
	}
}

 然后通过平台提供的测试接口,可以生成二维码的ticket,当然有兴趣的可以自己写接口处理。当然记得提供access_token。

 拿到ticket后,按照开发文档中提到的地址去申请二维码图片。带上ticket参数值。

https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHG8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyMkt2R1FHLWxlX2sxZlEzMTF1Y18AAgR0ifhdAwSAOgkA

访问之后,会有一个图片二维码下载到你本地。如下就是按照上面信息生成的临时二维码( "scene_str": "bdmh")。

然后我们用微信扫码,看看后台接收到的信息是什么样子。

对于已关注和未关注,是有所区别的。如果是已关注扫码,会直接推送到你的接口,Event=SCAN,对于未关注者扫码,扫码后不会触发接口,当你点击“关注公众号”后,会连同场景信息一起提交到你的接口,具体看下面信息。

WXMessgeBean修改。

package com.myweb.demo.bean;

import javax.xml.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;

@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)

public class WXMessgeBean {
    private String FromUserName;
    private String ToUserName;
    private long CreateTime;
    private String MsgType;
    private String Event;
    private String EventKey;
    private String Ticket;
}

//省略了stter和getter

 接收到的信息如图,看到设置的场景字符串scene_str通过节点EventKey传回来了,包括扫码者的微信号(ToUserName),这样你就可以根据不同的场景做一些数据的分析了。

已关注的数据返回。

未关注扫码后关注的数据返回。注意Event和EventKey和已关注是有区别的。

 

接入第三方登录是让用户方便快捷地使用已有账号登录你的网站或应用程序,提高用户体验的一种方式。本文将介绍如何使用 PHP 实现微信公众号第三方登录。 1. 获取微信授权 首先,需要获取微信用户的授权。具体步骤如下: 1)引导用户打开微信授权页面: ```php $appid = 'your_appid'; $redirect_uri = urlencode('http://yourdomain.com/callback.php'); $scope = 'snsapi_userinfo'; $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=$scope&state=STATE#wechat_redirect"; header("Location: $url"); ``` 其中,`$appid` 是你的微信公众号的 AppID,`$redirect_uri` 是授权后回调的 URL,`$scope` 是授权作用域,可以是 `snsapi_base` 或 `snsapi_userinfo`,`$state` 是自定义参数,用于防止 CSRF 攻击。 2)获取授权码: 用户同意授权后,重定向到 `$redirect_uri` 指定的 URL,上授权码 `code` 和 `state` 参数。 ```php $code = $_GET['code']; $state = $_GET['state']; ``` 3)获取 access_token 和 openid: 使用授权码 `code` 获取 `access_token` 和 `openid`。 ```php $access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code"; $response = file_get_contents($access_token_url); $result = json_decode($response, true); $access_token = $result['access_token']; $openid = $result['openid']; ``` 其中,`$secret` 是你的微信公众号的 AppSecret。 2. 获取用户信息 获取到 `access_token` 和 `openid` 后,可以使用以下代码获取用户信息: ```php $userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN"; $response = file_get_contents($userinfo_url); $userinfo = json_decode($response, true); ``` 其中,`$userinfo` 包含用户的昵称、头像等信息。 3. 将用户信息保存到数据库 最后,将获取到的用户信息保存到数据库中,以便下次使用时快速登录。 ```php // 连接数据库 $con = mysqli_connect('localhost', 'username', 'password', 'database'); mysqli_set_charset($con, "utf8"); // 查询用户是否已存在 $sql = "SELECT * FROM users WHERE openid='$openid'"; $result = mysqli_query($con, $sql); if (mysqli_num_rows($result) == 0) { // 用户不存在,插入新用户信息 $nickname = mysqli_real_escape_string($con, $userinfo['nickname']); $headimgurl = mysqli_real_escape_string($con, $userinfo['headimgurl']); $sql = "INSERT INTO users (openid, nickname, headimgurl) VALUES ('$openid', '$nickname', '$headimgurl')"; mysqli_query($con, $sql); } // 保存用户登录状态 $_SESSION['openid'] = $openid; ``` 以上就是使用 PHP 实现微信公众号第三方登录的步骤。需要注意的是,为了确保安全性,应该对用户输入的数据进行过滤和验证,防止 SQL 注入和 XSS 攻击等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bdmh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值