在运营
公众号或相关活动时,我们常需要用户关注公众号后才能参与某些活动(比如抽奖、领取福利等)。借助微信公众平台的带参数
二维码接口,就能轻松实现这一功能。下面就来详细说说具体的实现方法。
整个流程的核心是通过带参数的二维码关联用户和特定动作,大致步骤如下:
- 生成带有唯一标识(Key)的临时二维码,用户扫描该二维码关注公众号。
- 用户关注后,微信会向我们配置的服务器地址推送事件信息,我们从中提取用户的 openid 和之前设置的 Key,并保存到数据库。
- 活动页面(如抽奖页面)通过 Key 查询数据库,确认用户已关注后,允许用户参与活动。
要调用微信接口,首先需要获取访问令牌,代码如下:
这里用了 WordPress 的wp_remote_get
函数发送请求,也可以用 CURL 函数替代。
Token 有有效期,需要定期验证,无效时及时更新:
通过获取微信服务器 IP 来验证 Token 是否有效,无效则重新获取并保存到数据库。
生成一个包含唯一 Key 的临时二维码(这里设置有效期为 10 分钟):
这里的key
是用于识别用户的唯一标识,可在活动页面生成。
用户扫描二维码关注公众号后,微信会推送事件信息,我们需要接收并处理:
if( isset($_POST) ) {
echo ' '; // 防止微信重复推送
$postStr = file_get_contents('php://input'); // 获取推送的XML数据
if($postStr) {
$data = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
// 判断是否为关注事件
if($data->Event && $data->Event == 'subscribe') {
$FromUserName = $data->FromUserName; // 用户的openid
$EventKey = $data->EventKey; // 带前缀的Key
$EventKey = ltrim($EventKey, 'qrscene_'); // 去除前缀,得到原始Key
// 这里可以将openid、Key等信息保存到数据库
}
}
}
注意:如果用$GLOBALS['HTTP_RAW_POST_DATA']
获取不到数据,可改用file_get_contents('php://input')
。
如果需要获取用户的昵称等信息,可使用以下代码:
function get_weixin_userinfo($openid = '') {
$url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' . get_option('weixin_token') . '&openid=' . $openid . '&lang=zh_CN';
$info = wp_remote_retrieve_body(wp_remote_get($url));
$info = json_decode($info, true);
return $info;
}
当数据库中保存了用户的 openid、Key 等信息后,活动页面就可以通过 Key 查询数据库,确认用户已关注公众号。确认后,可将用户的 openid 写入 cookie,方便后续操作(比如限制抽奖次数、记录中奖信息等)。
以抽奖活动为例,前端可以用jquery.rotate
插件实现大转盘效果,而抽奖次数限制、中奖结果计算等关键逻辑则需在服务端完成,确保活动的公平性和安全性。
通过这种方式,既能引导用户关注公众号,又能精准控制用户参与活动的权限,是运营活动中非常实用的技巧。