你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
php微信关注公众号或扫码实现获取用户信息(内含简易框架搭建,可复用)
立即下载
用AI写一个
金额:
2
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
我要免费下载
发布时间:2019-12-11
28人
|
浏览:5132次
|
收藏
|
分享
技术:php
运行环境:phpstudy
概述
用户可通过扫描二维码进行关注或单纯进行扫码操作,实现获取用户微信信息,提高公众号关注率
详细
## 准备工作 ### 准备公众号及配置 本文用测试公众号进行配置举例子  ### 接口文档 #### 获取access_token 文档:[获取access_token](https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html "获取access_token") #### 生成临时带参二维码 临时带参二维码方式进行生成二维码,再采用微信事件回调进行用户信息获取。 带参二维码生成文档:[生成带参二维码](https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html "生成带参二维码") #### 用户事件回调 用户在进行扫码或其他事件,微信会进行事件回调。 微信事件回调文档:[微信事件回调](https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html "微信事件回调") #### 获取用户详细信息 获取用户详细信息:[获取用户详细信息](https://developers.weixin.qq.com/doc/offiaccount/User_Management/Get_users_basic_information_UnionID.html#UinonId "获取用户详细信息") ### 程序目录  ### 程序实现 #### 获取access_token ```php /** * @param $appid * @param $appsecret * * @return mixed * 获取token */ protected function getToken($appid, $appsecret) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret; $token = request_get($url); $token = json_decode(stripslashes($token)); $arr = json_decode(json_encode($token), true); $access_token = $arr['access_token']; return $access_token; } ``` #### 获取二维码ticket ```php /** * 获取关注二维码ticket * @param $ACCESS_TOKEN * @param $fqid * @param int $type * * @return bool|string */ protected function getQrcodeurl($ACCESS_TOKEN, $fqid, $type = 1) { $url = self::$qrcode_url . 'access_token=' . $ACCESS_TOKEN; if ($type == 1) { //生成永久二维码 $qrcode = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_str": ' . $fqid . '}}}'; } else { //生成临时二维码 $qrcode = '{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": ' . $fqid . '}}}'; } $result = http_post_data($url, $qrcode); $oo = json_decode($result[1]); if (empty($oo->ticket)) { return false; } if (!$oo->ticket) { $this->ErrorLogger('getQrcodeurl falied. Error Info: getQrcodeurl get failed'); exit(); } $url = self::$qrcode_get_url . 'ticket=' . $oo->ticket . ''; echo $oo->ticket; return $url; } ``` #### 获取二维码保存至服务器 本示例会直接保存到服务器,用户可以根据自身需求进行处理,可直接进行二维码展示。 ```php /** * 保存二维码到服务器 * 可直接进行展示不进行存储,看业务需求 * * @param $url * @param $filestring * * @return bool|string */ protected function DownLoadQr($url, $filestring) { if ($url == "") { return false; } $filename = $filestring . rand(0, 99999999999) . '.jpg'; ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); /*if (!file_exists('/public/qrcode/' . $filename)) { touch('/public/qrcode/' . $filename); }*/ $file = PUBLIC_PATH . 'qrcode/' . $filename; $fp2 = fopen($file, "a"); if (fwrite($fp2, $img) === false) { $this->ErrorLogger('dolwload image falied. Error Info: 无法写入图片'); exit(); } fclose($fp2); return '/public/qrcode/' . $filename; } ``` #### 用户行为(扫码或关注)之后接收微信回调 ```php /** * 微信事件推送接收方法 */ public function responseMsg() { $postStr = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents("php://input"); if (!empty($postStr)) { $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); // 微信消息类型 $RX_TYPE = trim($postObj->MsgType); switch ($RX_TYPE) { case "text": // 文本消息 $resultStr = $this->handleText($postObj); break; case "event": // 事件推送 $resultStr = $this->handleEvent($postObj); break; default: $resultStr = "Unknow msg type: " . $RX_TYPE; break; } echo $resultStr; } else { echo ""; exit; } } ``` #### 处理微信回调(消息或事件) ```php /** * 微信文本消息 * @param $postObj */ public function handleText($postObj) { $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "
%s
0
"; if (!empty($keyword)) { $msgType = "text"; $contentStr = "欢迎您关注"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } else { echo "请输入..."; } } /** * 获取时间消息并解析相应参数 * 提供数据简单推送(自动回复) * @param $object * * @return string */ public function handleEvent($object) { $contentStr = ""; switch ($object->Event) { case "subscribe": $contentStr = "感谢您关注【测试账号】"; $openid = (string)$object->FromUserName; //数据类型转换为字符串 $refer_id = explode('_', $object->EventKey); //$object->EventKey返回的是qrsence_1232313这种类型 $this->createuserinfo($openid, $refer_id[1]);//获取用户信息 break; case "SCAN": $contentStr = "您已关注过,谢谢!"; $openid = (string)$object->FromUserName; //数据类型转换为字符串 $refer_id = explode('_', $object->EventKey); //$object->EventKey返回的是qrsence_12213213这种类型 $this->createuserinfo($openid, $refer_id[0]);//获取用户信息 break; } $resultStr = $this->responseText($object, $contentStr); return $resultStr; } ``` #### 获取用户详细信息 在微信回调方法可获取到用户openid 结合access_token即可获取到用户详细信息 ```php /** * 获取用户详细信息 * @param $openid * @param $refer_id */ public function createuserinfo($openid, $refer_id) { $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $this->getToken($this->appid, $this->secrect) . "&openid=" . $openid; $user = request_get($url); $user = json_decode($user, true); $users = array( 'openid' => $openid, 'nickname' => $user['nickname'], 'avatar' => $user['headimgurl'], 'sex' => $user['sex'], 'unionid' => $user['unionid'], 'status' => 1, 'reg_time' => $user['subscribe_time'],//关注公众号的时间 'bind_user' => $refer_id ); $user_str = date('Y-m-d H:i:s') . "\t"; foreach ($users as $key => $value) { $user_str .= $key . '=' . $value . "\t"; } $user_str .= "\n"; file_put_contents(LOG_PATH . "wx.log", $user_str, FILE_APPEND); } ``` ### 运行效果 #### 扫码   #### 用户信息(log/wx.log) 
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
1
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
Joker
1
例子数量
28
帮助
1
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
php微信关注公众号或扫码实现获取用户信息(内含简易框架搭建,可复用)