PHP微信扫码关注公众号并授权登录的源代码

分类: 电脑网络
人气 2,587 / 评论 PHP微信扫码关注公众号并授权登录的源代码已关闭评论 / 日期 2020-2-21
作者:

PHP微信扫码登录看起来简单,但做起来有点复杂,微信接口的坑有点多,稍不注意,就费很多时间。PHP判断是否首次关注公众号,扫码关注公众号获取微信用户头像、openid和省市等信息源码。

第一步:获取关注二维码ticket,并且传参二维码qrcode表主键id

$sql = "INSERT INTO `qrcode` (`addtime`) VALUES ('" . time() . "')";  mysql_query($sql); $scene_id = mysql_insert_id();  $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret$access_token_array = json_decode(curlGet($url), true); $access_token = $access_token_array['access_token']; //echo $access_token;exit;http://www.sucaihuo.com/project/wxvalid/index.php  $qrcode_url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $access_token;  $post_data = array(); $post_data['expire_seconds'] = 3600 * 24//有效时间 $post_data['action_name'] = 'QR_SCENE'$post_data['action_info']['scene']['scene_id'] = $scene_id//传参用户uid,微信端可获取 $json = curlPost($qrcode_url, json_encode($post_data)); if (!$json['errcode']) {      $ticket = $json['ticket'];     $ticket_img = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . urlencode($ticket); } else {     echo '发生错误:错误代码 ' . $json['errcode'] . ',微信返回错误信息:' . $json['errmsg'];     exit; }

第二步:微信服务端接受数据,并且用户登录信息

$postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA); $scene_id = str_replace("qrscene_"""$postObj->EventKey);  $openid = $postObj->FromUserName; //openid $ToUserName = $postObj->ToUserName;  //转换角色 $Event = strtolower($postObj->Event); if ($Event == 'subscribe') {//首次关注     $is_first = 0; } elseif ($Event == 'scan') {//已关注     $is_first = 1; } $access_token = $this->getAccessToken();  $userinfo = $this->getUserinfo($openid$access_token); $sql = "UPDATE `qrcode` SET `openid` = '" . $openid . "',logintime='" . time() . "',is_first=" . $is_first . ",nickname='" . $userinfo['nickname'] . "'"         . ",avatar='" . $userinfo['avatar'] . "',sex='" . $userinfo['sex'] . "',province='" . $userinfo['province'] . "',city='" . $userinfo['city'] . "',country='" . $userinfo['country'] . "' WHERE `id` =" . $scene_id . "";  mysql_query($sql);

第三步:每隔2秒检测是否关注微信公众号

<script>     check_login();     function check_login() {         $.post("check_login.php"{scene_id: <?php echo $scene_id; ?>}function(data) {             var attention = '首次关注';             if (data.is_first == 1{                 attention = '已关注过';             }             if (data.openid != null) {                 alert("扫码成功,openid为" + data.openid + "nickname:" + data.nickname);                 location.reload();              } else {                 setTimeout("check_login()"2000);             }         }"json");     } </script>

通过微信openid和access_token获取微信用户信息,并存入表当中的信息如下:

<tr>     <th>openid</th>     <th>昵称</th>     <th>性别</th>     <th>国家</th>     <th>省份</th>     <th>城市</th>     <th>头像</th>     <th>是否关注过</th>     <th>登录时间</th> </tr>

若是没有获取到数据,记得开启curl,检查防火墙、启用截图如下

Tags:
4 + 赞
相关资源:
  • 窍门网:VMware 安装Tools 遇到问题的解决:VGAuthService 启动失败
    窍门网:VMware 安装Tools 遇到问题的解决:VGAuthService 启动失败
    2020-9-23
  • windows server 系统如何加固更安全?
    windows server 系统如何加固更安全?
    2020-7-1112
  • win10系统磁盘管理磁盘右键菜单只有“帮助”如何删除?
    win10系统磁盘管理磁盘右键菜单只有“帮助”如何删除?
    2020-6-3020
  • python安装pyinstaller出现的错误如何解决
    python安装pyinstaller出现的错误如何解决
    2020-4-418
  • IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
    IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
    2020-3-280
  • pdo预处理是什么?如何理解?
    pdo预处理是什么?如何理解?
    2020-2-2119
  • MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法
    MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法
    2020-2-2116
  • php mysql pdo 连接数据的窗户
    php mysql pdo 连接数据的窗户
    2020-2-187

评论

评论已关闭!


窍门网微信公众帐号
微信扫描
立刻加入