网站实现微信扫码登录 php
微信开放平台账号一个,必须是商户,不然你也开不了
1.在开放平台创建应用,并设置回调地址(域名即可)
2.生成二维码,前端代码,用户扫码后会给你的回调地址发送code
<span id="login_container"></span> <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script> <script> var obj = new WxLogin({ id: "login_container", appid: "appid",你的appid scope: "snsapi_login", redirect_uri: encodeURIComponent("你的回调地址(域名必须和你在开放平台的一致)"), state: Math.ceil(Math.random()*1000), style: "black", href: ""}); </script>
3.根据code获取 access_token 和 openid ,再用他们获取用户信息 代码如下
public function login(){ $code = input('code'); $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid= 你的appid &secret= 你的AppSecret &code=".$code."&grant_type=authorization_code"; $access_token = $this->curl_get($url); if (!$access_token || isset($access_token['errcode'])){ return json(['code'=>0,'message'=>'登录失败']); } $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token['access_token']."&openid=".$access_token['openid']; $user = $this->curl_get($url); if (!$user){ return json(['code'=>0,'message'=>'登录失败']); } var_dump($user); // ["openid"]=> string(28) "" // ["nickname"]=> string(1) "" 普通用户昵称 // ["sex"]=> int(1) 普通用户性别,1为男性,2为女性 // ["language"]=> string(5) "zh_CN" // ["city"]=> string(0) "" 普通用户个人资料填写的城市 // ["province"]=> string(0) "" 普通用户个人资料填写的省份 // ["country"]=> string(2) "CN" 国家,如中国为CN // ["headimgurl"]=> string(128) "" 头像 // ["privilege"]=> array(0) { } 用户特权信息,json数组,如微信沃卡用户为(chinaunicom) // ["unionid"]=> string(28) "" 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。 } protected function curl_get($url){ $header = array( 'Accept: application/json', ); $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, $url); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 0); // 超时设置,以秒为单位 curl_setopt($curl, CURLOPT_TIMEOUT, 1); // 超时设置,以毫秒为单位 // curl_setopt($curl, CURLOPT_TIMEOUT_MS, 500); // 设置请求头 curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //设置获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); //执行命令 $data = curl_exec($curl); // 显示错误信息 if (curl_error($curl)) { return false; } else { // 打印返回的内容 return json_decode($data,true); } }
参考文章 :https://www.jianshu.com/p/070586d73eba