当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-16 11:41:59 浏览: 评论:0 

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

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

背景

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

一、开发须知

1.概念区分

因为接触到微信开发的知识,必然会接触 OpenID 与 UnionID 的使用,以下为微信官方文档的的介绍,请注意区分:

在关注者与公众号产生消息交互后,公众号可获得关注者的 OpenID(加密后的微信号,每个用户对每个公众号的 OpenID 是唯一的。对于不同公众号,同一用户的 OpenID 不同)。

公众号可通过相应接口来根据 OpenID 获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。

请注意,如果开发者有在多个公众号,或在公众号、移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用 UnionID 机制来满足上述需求。

简单概括来讲:

OpenID 是普通用户的标识,对当前开发者帐号唯一。一个 OpenID 对应一个公众号。

UnionID 是用户统一标识。针对一个 微信开放平台帐号 下的应用,同一用户的 UnionID 是唯一的。

2.归纳整理

绕了这个圈,也就是说,微信公众号开发与微信开发平台开发是有差别的

想让同一个微信用户使用不同平台(如PC端、app、微信小程序等)的网站登录,需要进行账号绑定,而这个绑定的账号不能以 OpenID 区分,而需要用 UnionID 区分。

3.典型问题

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

PHP微信登录

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

个人参考代码如下:

  1. /** 
  2.  * 根据用户已获得的 openID 获取其他信息 (主要为 unionID) 
  3.  */ 
  4. public function getUnionidByOpenid($openID = ''){ 
  5.   $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" 
  6.     .$this->getaccesstoken() 
  7.     ."&openid=".$openID."&lang=zh_CN"
  8.   $jsonRes = $this->http_get($url); 
  9.   if ($jsonRes){ 
  10.     $arrRes = json_decode($jsonRes, true); 
  11.     return $arrRes['unionid']; 
  12.   }else
  13.     return ''
  14.   } 

二、微信开放平台操作

登录 微信开放平台

1.简要引导

根据在下的需求,选择了“网站应用开发” 的创建,然后按照官方提示进行材料的申请,一般需要三天以上

PHP微信登录

选择“网站应用开发”

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

PHP微信登录

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

PHP微信登录

获取微信登录权限

2.官方提供的场景参考

PHP微信登录

场景参考

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

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

PHP微信登录

绑定公众账号/小程序

4.授权获取 access_token 时序图

PHP微信登录

获取access_token时序图

三、代码实现

其实,主要的时间都花费在了前期的申请操作上,而真正的代码实现却是极为简单,以下是我的实现方式,敬请指摘

1、公共文件配置

习惯主要的配置信息同意放在了配置文件中,‘\Application\Common\Conf\config.php'。

  1. 'WEIXIN_LOGIN' => array
  2.     // 微信开放平台 使用微信帐号登录App或者网站 配置信息 
  3.     'OPEN_APPID' => 'wxbd961b2a6b7b2963'//应用 AppID 
  4.     'OPEN_APPSECRET' => 'e6xxxxxxxxxxxxxxxxxxxxe90',//应用 AppSecret 
  5.     'OPEN_CALLBACKURL' => 'http://www.52zhenmi.com/Home/Login/wxBack', //微信用户使用微信扫描二维码并且确认登录后,PC端跳转路径 
  6.   ), 

2.核心代码

具体代码,请参考路径 “zmPro\Application\Home\Controller\LoginController.class.php”

  1. public function wxIndex(){ 
  2.     //--微信登录-----生成唯一随机串防CSRF攻击 
  3.     $state = md5(uniqid(rand(), TRUE)); 
  4.     $_SESSION["wx_state"]  =  $state//存到SESSION 
  5.     $callback = urlencode($this->callBackUrl); 
  6.     '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'
  7.     $wxurl = "https://https://blog.csdn.net/u011415782/article/details/open.weixin.qq.com/connect/qrconnect?appid=" 
  8.         .$this->appID."&redirect_uri=" 
  9.         .$callback."&response_type=code&scope=snsapi_login&state=" 
  10.         .$state."#wechat_redirect"
  11.     header("Location: $wxurl"); 
  12.   } 
  13.  
  14.   public function wxBack(){ 
  15.     if($_GET['state']!=$_SESSION["wx_state"]){ 
  16.       echo 'sorry,网络请求失败...'
  17.       exit("5001"); 
  18.     } 
  19.     $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appID.'&secret='.$this->appSecret.'&code='.$_GET['code'].'&grant_type=authorization_code'
  20.     $arr = curl_get_contents($url); 
  21.     //得到 access_token 与 openid 
  22.     $url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN'
  23.     $user_info = curl_get_contents($url); 
  24.     $this->dealWithWxLogin($user_info); 
  25.   } 
  26.  
  27.   /** 
  28.    * 根据微信授权用户的信息 进行下一步的梳理 
  29.    * @param $user_info 
  30.    */ 
  31.   public function dealWithWxLogin($user_info){ 
  32.     //TODO 数据处理 
  33.     var_dump($user_info); 
  34.     die
  35.   } 

3.前端显示

根据官方文档的介绍,既可以直接访问授权扫码界面,也可以进行自定义设计

估计本人脑抽,嵌套登录扫码的功能整了半天也没实现,在此只好使用默认跳转。

PHP微信登录

前端入口

通过点击上图中的微信图标,直接跳转如下链接

https://https://blog.csdn.net/u011415782/article/details/open.weixin.qq.com/connect/qrconnect?appid=wxbd961b2a6b7b2963&redirect_uri=http%3A%2F%2Fwww.52zhenmi.com%2FHome%2FLogin%2FwxBack&response_type=code&scope=snsapi_login&state=204b244a5051207d1987a95f4a7e42c1#wechat_redirect

显示效果如下:

PHP微信登录

默认微信登录效果

扫描登录成功后进行页面跳转

PHP微信登录

测试结果如图

四、总结

小程序官方提供了 UnionID机制说明,可进行对比参考

网上看到一篇不错的文章,建议参考:微信公众号用户与网站用户的绑定方案

总结小点:

1.根据上面功能实现的最后,可以获取登录用户的信息,而其中的 openID 和 UnionID 可存储数据库进行后期业务的处理.

2.在下阐述能力有限,建议多参考官方开发文档,谷歌前辈的干货经验…

Tags: PHP微信登录

分享到: