背景

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

一、开发须知

1.概念区分

  • 因为接触到微信开发的知识,必然会接触 OpenIDUnionID 的使用,以下为微信官方文档的的介绍,请注意区分:
> 在关注者与公众号产生消息交互后;
> 公众号可获得关注者的 OpenID(加密后的微信号,每个用户对每个公众号的 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.简要引导

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

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

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

2.官方提供的场景参考

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

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

4.授权获取 access_token 时序图

三、代码实现

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

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://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect';$wxurl = "https://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.前端显示

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

  • 通过点击上图中的微信图标,直接跳转如下链接
    https://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

  • 显示效果如下:

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

四、总结

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

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

  • 总结小点:

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

附录

>>>源代码参考>>>

PHP 网站应用微信登录相关推荐

  1. 第三方网站应用微信登录开发指南

    微信开放平台网址 网站应用微信登录开发指南 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录 ...

  2. 微信开放平台开发(2) 网站应用微信登录

    关键字:微信公众平台 微信开放平台 微信登录 微信扫码登录 使用微信账号登录网站 作者:方倍工作室  原文:http://www.cnblogs.com/txw1958/p/weixin-qrlogi ...

  3. 在哪里能收到python实例代码-python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移 ...

  4. 对于微信二维码相关官方文档的一些注解(微信登录和绑定微信、关注公众号)

    转载自:https://www.jianshu.com/p/d533c69be034 由于微信官方文档对此的描述虽然还可以,但是还是有一些让人疑惑的地方,所以笔者做了一些注解,希望对大家有所帮助 为什 ...

  5. 微信开放平台开发 微信登录

    在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现微信扫码登录的功能. 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信O ...

  6. 【编程开发】之微信登录

    一.微信登录介绍 1.准备工作 网站应用微信登录是基于 OAuth2.0 协议标准构建的微信 OAuth2.0 授权登录系统.如果想了解 OAuth2.0 可以参考我的另一篇博客:[编程开发]之 OA ...

  7. 第三方App接入微信登录 解读 (微信开放平台)

    http://www.cnblogs.com/linjunjie/p/6249989.html 微信开放平台  和  微信公众平台  概念不同. 1.首先需要注册微信开放平台,然后获取开发者认证.审批 ...

  8. python实现网页微信登录_网站微信登录-python 实现

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 微信现在提供两种登录接入方式 移动应用微信登录 网站应用微信登录 这里我 ...

  9. 网站集成第三方登录-微信登录

    网站集成第三方登录-微信登录 课程介绍 1. 第三方登录引入介绍; 2. 网站微信登录原理(重点);oauth2 3. 网站微信登录具体步骤(重点); 4. 常见疑问解答; 5. 功能实现 ...

最新文章

  1. Start Activity for Result(Bug)
  2. 2021第三封拒信来自哈佛大学计算机科学与技术专业~
  3. netsh winsock reset什么意思_商丘耐火砖什么意思,刹车片_马达加斯加嘎瓦石墨公司...
  4. boost::mp11::mp_count相关用法的测试程序
  5. Python数值类型:小数与百分数的转换
  6. zabbix安装步骤
  7. Coursera公开课-Machine_learing:编程作业7
  8. asp控制oracle,asp下用OracleInProcServer完成对Oracle的连接和操作
  9. 专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的
  10. 通过RHCE认证之路
  11. dns缓存时间 linux,如何在Linux服务器上刷新DNS缓存
  12. 基于ThingsBoard二次开发的物联网平台ThingsKit-Link白皮书
  13. 2022 年需要掌握的 5 种嵌入式技术
  14. 基于Tushare量化分析示例
  15. 贝叶斯与朴素贝叶斯入门及实战
  16. loss.backward(),scheduler(), optimizer.step()的作用
  17. 城市规划者建议将社区的所有马桶更换为每次冲水仅需2升的节水马桶。
  18. Oracle进阶(八)自定义函数(Function)
  19. 小程序离屏canvas(createOffscreenCanvas)生成推广海报
  20. Rom Redmi Note 4升级到Android11

热门文章

  1. Stable Diffusion人工智能图像合成
  2. 鸿蒙(HarmonyOS)2.0方舟编译器官方网址开源地址
  3. 单引号oracle如何转义_浅谈oracle中单引号转义
  4. mysql单引号转义_sql语句中使用单引号'作为转义字符
  5. [cf]Codeforces Round #782 (Div. 2)
  6. 分享5个计算机专业毕业总结
  7. Latex 设置标题等字号
  8. mysql服务无法启动1053错误已解决
  9. 不止是刷题——leetcode笑死人的评论合集,独乐乐不如众乐乐~~
  10. Facebook塑造了我们对“技术”的信仰