1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      PHP实现网站应用微信登录功能详解

       更新时间2019年04月11日 10:41:47   作者moTzxx   我要评论

      这篇文章主要介绍了PHP实现网站应用微信登录功能,结合实例形式详细分析了php实现微信授权登录功能的具体操作步骤与相关实现技巧,需要的朋友可以参考下

      本文实例讲述了PHP实现网站应用微信登录功能分享给大家供大家参考具体如下

      背景

      • 近期进行 PC 端的网站开发需要用到微信授权登录考虑到前期手机端已经获得了大量的微信用户群现在想着进行资源整合满足同一个微信用户的数据同步

      一开发须知

      1.概念区分

      • 因为接触到微信开发的知识必然会接触 OpenIDUnionID 的使用以下为微信官方文档的的介绍请注意区分
      • 在关注者与公众号产生消息交互后公众号可获得关注者的 OpenID?#29992;?#21518;的微信号每个用户对每个公众号的 OpenID 是唯一的对于不同公众号同一用户的 OpenID 不同
      • 公众号可通过相应接口来根据 OpenID 获取用户基本信息包括昵称头像性别所在城市语言和关注时间
      • 请注意如果开发者有在多个公众号或在公众号移动应用之间统一用户帐号的需求需要前往微信开放平台open.weixin.qq.com绑定公众号后才可利用 UnionID 机制来满足上述需求
      • 简单概括来讲
      • OpenID 是普通用户的标识对当前开发者帐号唯一一个 OpenID 对应一个公众号
      • UnionID 是用户统一标识针对一个 微信开放平台帐号 下的应用同一用户的 UnionID 是唯一的

      2.归纳整理

      • 绕了这个圈也就是说微信公众号开发与微信开发平台开发是有差别的
      • 想让同一个微信用户使用不同平台如PC端app微信小程序等的网站登录需要进行账号绑定而这个绑定的账号不能以 OpenID 区分而需要用 UnionID 区分

      3.典型问题

      • 附录一个常见的设计问题主要在于开发前的知识使用不够全面而造成后续拓展的影响当然这也是我遇到的问题希望可以给各位敲个警钟

      所以当你出现这种情况可以参考下面的指导进行 unionID 数据的后期获取 获取用户基本信息(UnionID机制)

      • 个人参考代码如下
        /**
         * 根据用户已获得的 openID 获取其他信息 主要为 unionID
         */
        public function getUnionidByOpenid($openID = ''){
          $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token="
            .$this->getaccesstoken()
            ."&openid=".$openID."&lang=zh_CN";
          $jsonRes = $this->http_get($url);
          if ($jsonRes){
            $arrRes = json_decode($jsonRes, true);
            return $arrRes['unionid'];
          }else{
            return '';
          }
        }

      二微信开放平台操作

      1.简要引导

      • 根据在下的需求选择了网站应用开发 的创建然后按照官?#25945;?#31034;进行材料的申请一般需要三天以上
        选择网站应用开发

      • 可以注意到网站应用开发 的简要功能介绍

      • 当应用创建通过后必须还要满足接口权限的获取会有工作人员主动联系一般一天就能完成
        获取微信登录权限

      2.官?#25945;?#20379;的场景参考

      场景参考

      3.绑定公众账号/小程序

      为了保证同一个开发账号下对应微信用户的 UnionID 绑定使用需要在下面的列表中绑定对应的公众号/服务号文档中介绍一般要满足微信支付功能

      绑定公众账号/小程序

      4.授权获取 access_token 时序图

      获取access_token时序图

      三代码实现

      • 其实主要的时间都花?#35328;?#20102;前期的申请操作上而真正的代码实现?#35789;?#26497;为简单以下是我的实现方式敬请指摘

      1公共文件配置

      • 习惯主要的配置信息同意放在了配置文件中\Application\Common\Conf\config.php'
      'WEIXIN_LOGIN' => array(
          // 微信开放平台 使用微信帐号登录App或者网站 配置信息
          'OPEN_APPID' => 'wxbd961b2a6b7b2963', //应用AppID
          'OPEN_APPSECRET' => 'e6xxxxxxxxxxxxxxxxxxxxe90',//应用 AppSecret
          'OPEN_CALLBACKURL' => 'http://www.52zhenmi.com/Home/Login/wxBack', //微信用户使用微信扫描二维码并且确认登录后PC端跳转路径
        ),

      2.核心代码

      • 具体代码请参考路径 zmPro\Application\Home\Controller\LoginController.class.php
      public function wxIndex(){
          //--微信登录-----生成唯一随机串防CSRF攻击
          $state = md5(uniqid(rand(), TRUE));
          $_SESSION["wx_state"]  =  $state; //存到SESSION
          $callback = urlencode($this->callBackUrl);
          'https://https://blog.csdn.net/u011415782/article/details/open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect';
          $wxurl = "https://https://blog.csdn.net/u011415782/article/details/open.weixin.qq.com/connect/qrconnect?appid="
              .$this->appID."&redirect_uri="
              .$callback."&response_type=code&scope=snsapi_login&state="
              .$state."#wechat_redirect";
          header("Location: $wxurl");
        }
      
        public function wxBack(){
          if($_GET['state']!=$_SESSION["wx_state"]){
            echo 'sorry,网络请求失败...';
            exit("5001");
          }
          $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appID.'&secret='.$this->appSecret.'&code='.$_GET['code'].'&grant_type=authorization_code';
          $arr = curl_get_contents($url);
          //得到 access_token 与 openid
          $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';
          $user_info = curl_get_contents($url);
          $this->dealWithWxLogin($user_info);
        }
      
        /**
         * 根据微信授权用户的信息 进行下一步的梳理
         * @param $user_info
         */
        public function dealWithWxLogin($user_info){
          //TODO 数据处理
          var_dump($user_info);
          die;
        }

      3.前端显示

      • 根据官方文档的介绍既可以直接访问授权扫码界面也可以进行自定义设计
      • 估计本人脑抽嵌套登录扫码的功能整了半天也没实现在此只好使用默认跳转

      前端入口

      默认微信登录效果

      • 扫描登录成功后进行页面跳转
        测试结果如图

      四总结

      • 1.根据上面功能实现的最后可以获取登录用户的信息而其中的 openIDUnionID 可存储数据库进行后期业务的处理.
      • 2.在下阐述能力有限建议多参考官方开发文档谷歌前辈的干货经验

      附录

      更多关于PHP相关内容?#34892;?#36259;的读者可查看本站专题PHP微信开发技巧汇总php curl用法总结PHP网络编程技巧总结php字符串(string)用法总结PHP中json格式数据操作技巧汇总PHP针对XML文件操作技巧总结

      希望本文所述?#28304;?#23478;PHP程序设计有所帮助

      相关文章

      最新评论

      3dԻв

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>