PHP 实现微信登录
因为近期项目开发用到微信登录功能,在这里记录一下。
1.网站应用微信登录授权流程说明
(1) 第三方发起微信授权登录请求,会生成微信登录二维码,微信用户扫描登录后,微信重定向到第三方网站,并且带上授权临时票据code参数;
(2)通过code参数加上AppID和AppSecret,通过API换取access_token和openid;
(3)通过access_token和openid进行接口调用,获取用户基本信息三方网站实现用户登录。
2.登录微信开放平台,更改授权回调域名
3.编写请求代码
实现思路:
首先请求微信登录二维码,传过去回调地址
在微信回调时,接收code参数,并通过code获取用户access_token和openid
再通过access_token和openid请求微信API得到用户的信息,最后返回给客户端
路由
//微信网页授权调试
Route::get('getWeChatCode', 'Controller@getWeChatCode');
//获取微信回调信息
Route::get('weChatCallback', 'Controller@weChatCallback');
控制器
/*** 网页登录授权*/public function getWeChatCode(){$object = new WeChat();$callback_url = request()->input('url');$res = $object->getKFLoginUrl($callback_url);echo "<a href='" . $res . "'>点击</a>";}/*** 回调获取用户信息*/public function weChatCallback(){$code = request()->input('code');$object = new WeChat();$openInfo = $object->getKFOpenId($code);if (isset($openInfo['errcode'])) {echo '微信登录登录失败' . $openInfo['errmsg'];die;}$userInfo = $object->getUserInfo($openInfo['access_token'], $openInfo['openid']);echo '登录用户信息:';print_r($userInfo);}
微信类方法
class WeChat
{/*** 微信开放平台appid* @var string*/protected static $kF_AppId = 'xxxxxxxxxx';/*** 微信开放平台app secret* @var string*/protected static $KF_AppSecret = 'xxxxxxxxxxxxx';/*** 通过开放平台key获取微信登录页面* 可通过回调获取code参数* @param $callback_url:回调地址* @return string*/public function getKFLoginUrl($callback_url){$callback = urlencode($callback_url);$AppId = self::$kF_AppId;$get_code_url = "https://open.weixin.qq.com/connect/qrconnect?appid={$AppId}&redirect_uri={$callback}&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect";return $get_code_url;}/*** 通过开放平台key* 获取用户openId access_token* @param $code* @return bool|string*/public function getKFOpenId($code){$AppId = self::$kF_AppId;$AppSecret = self::$KF_AppSecret;$get_openid_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$AppId}&secret={$AppSecret}&code={$code}&grant_type=authorization_code";$res = file_get_contents($get_openid_url);$res = json_decode($res, true);return $res;}/*** 获取微信用户信息* @param $access_token* @param $openId* @return bool|mixed*/public function getUserInfo($access_token, $openId){$url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openId}&lang=zh_CN";$res = $this->linkCurl($url, 'GET');$res = json_decode($res, true);return $res;}/*** 请求接口返回内容* @param $url :请求的URL地址* @param $method :请求方式POST|GET* @param $params :请求的参数* @param $header : 请求头* @return bool|string*/protected function linkCurl($url, $method, $params = array(), $header = array()){$ch = curl_init();curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HTTPHEADER, $header);curl_setopt($ch, CURLOPT_FAILONERROR, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);if (strpos("$" . $url, "https://") == 1) {curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);}curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);curl_setopt($ch, CURLOPT_TIMEOUT, 60);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);if ($method == "POST") {curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_POSTFIELDS, $params);} else if ($params) {curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));}$response = curl_exec($ch);if ($response === false) {return false;}curl_close($ch);return $response;}
}
4.直接用浏览器打开走流程即可
点击后,扫描二维码进行登录
登录完成后,获取用户信息
注意:
如果微信登录和公众号网页授权都在一个项目中,就不能通过简单的通过微信用户openid来判断是否为同一个用户,因为这两个平台返回的同一个用户openid不一致,只能通过返回用户信息中的unionid来判断,而这个参数需要在微信开放平台上绑定相应微信公众号操作才会出现。
PHP 实现微信登录相关推荐
- 利用WxJava实现PC网站集成微信登录功能,核心代码竟然不超过10行
最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建"网站应用"2.获取AppID和AppSecret二.开发指南 ...
- ios微信登录不上服务器,iOS微信授权登录
首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录.支付等功能还涉及付费,具体申请流程就不再这里说了.到开放平台->管理中心->移动应用->查看应用,确认你 ...
- Android之集成微信登录
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/44041241 本文出自:[顾林海的博客] 前言 这篇微信登录的文章是 ...
- 在哪里能收到python实例代码-python实现网站微信登录的示例代码
最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移 ...
- 网站微信登录授权 ASP.NET
最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...
- 详解如何进行第三方App接入微信登录
微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...
- 第三方登录之微信登录,基于ThinkSDK
本文基于ThinkSDK,为其补充微信登录demo 增加ThinkSDK的微信第三方登录 阅读本文之前请先了解ThinkSDK的文档 http://www.echomod.com/nexstep/fo ...
- 利用微信登录掘金网站的HTTP请求分析
点这个微信登录的icon: https://open.weixin.qq.com/connect/qrconnect?appid=wx1f78f78832fc2c16&redirect_uri ...
- 友盟的微信登录,QQ,新浪微博登录功能和分享功能
在这里我用的是友盟的登录,需要的请参考本文,直接撸代码, 提示:微信登录在一段时间内,只授权一次(只能调起一次登录页面),除非更换用户,才可以再调起登录页面. 0.本文需要导入jar包导完后鼠标右键A ...
- 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...
最新文章
- 一年半跻身网约车业务前二,现发起首个自动驾驶联盟,T3出行是一家怎样的公司?...
- 在简历中应用STAR法则
- 『ACM C++』 PTA 天梯赛练习集L1 | 016-017
- g4e基础篇#4 了解Git存储库(Repo)
- iis服务器显示http1.1,IIS服务器“500”内部错误 HTTP/1.1 新建会话失败
- 深度学习第五课-训练注意事项与框架使用
- 人寿保险分红型的十年能取出来吗?
- Linux下硬盘性能测试
- Swagger使用总结
- 4_while循环结构和breakcontinue
- linux日常学习笔记
- C++ 数字 4294967295是什么意思
- PC端天天生鲜页面实现
- JavaScript中的NaN
- html中日期怎么显示,浅谈在网页上显示日期的两种方法_html
- 终端数据防泄漏解决方案
- 连接交换路由器的方式
- 长虹 Watch FLY 智能手表 评测
- 使用高德地图做经纬度转换( 把GPS 转高德的经纬度 )
- Adobe Premiere Pro CS6打开报错(Oxc000007b)解决办法