1.1.1、了解微信登錄的條件:
需要有認證的服務號才可以,如果是訂閱號或者是未認證的服務號就別瞎忙了。就不用繼續了,或者先去開通認證的服務號,再來繼續學習。
注意:
1、個人的為訂閱號(認不認證都不可以),個人不能注冊服務號;;
2、企業可以注冊服務號,未認證的服務號不可以,只有進行微信認證的服務號才可以提供微信登錄,微信支付等功能。
3、微信公眾平臺的登錄:https://mp.weixin.qq.com/
1.2.1、實現微信登錄的準備
第一、打開微信公眾平臺網址進入。https://mp.weixin.qq.com/(公眾平臺)。
第二、找到“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權回調域名。請注意,這里填寫的是域名(是一個字符串),而不是URL,因此請勿加 http:// 等協議頭;
第三、下載微信調試工具。
注意:授權回調域名配置規范為全域名,比如需要網頁授權的域名為:www.qq.com,配置以后此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進行OAuth2.0鑒權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無法進行OAuth2.0鑒權
第三、配置好回調域名后我們就可以開始了
第一步、用戶同意授權,獲取code(代碼如下)
public function index(){ //用戶同意授權,獲取code $appid = "微信公眾號的appid"; //回調地址 $redirect_uri = urlencode("http://授權回調域名/index.php/Home/Index/getUserInfo"); //在確保微信公眾賬號擁有授權作用域(scope參數)的權限的前提下(服務號獲得高級接口后,默認擁有scope參數中的snsapi_base和snsapi_userinfo) $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect"; //跳轉到 $url header("location:".$url); } public function getUserInfo(){ $code = $_GET["code"]; dump($code); }
public function getUserInfo(){ $appid = "微信公眾號的appid"; $appsecret = "微信公眾號的appsecret"; $code = $_GET["code"]; //獲取網頁授權的access_token $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code"; //請求 $url 返回一個json json_decode不加 true 會將json轉為對象,加true轉為數組 $res = json_decode(file_get_contents($url),true); //獲取access_token并賦值給變量 dump($res);}
public function getUserInfo(){ $appid = "微信公眾號的appid"; $appsecret = "微信公眾號的appsecret"; $code = $_GET["code"]; //獲取網頁授權的access_token $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code"; //請求 $url 返回一個json json_decode不加 true 會將json轉為對象,加true轉為數組 $res = json_decode(file_get_contents($url),true); //獲取access_token并賦值給變量 $access_token = $res["access_token"]; //獲取openid并賦值給變量 $openid = $res["openid"]; //拼接字符串并賦值給 $urls $urls = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; //請求用戶詳細信息,并賦值給 $userinfo $userinfo = file_get_contents($urls); dump($userinfo); }
namespace app\index\controller; class Index public function index(){ //用戶同意授權,獲取code $appid = "微信公眾號的appid"; //回調地址 $redirect_uri = urlencode("http://授權回調域名/index.php/Index/getUserInfo"); //在確保微信公眾賬號擁有授權作用域(scope參數)的權限的前提下(服務號獲得高級接口后,默認擁有scope參數中的snsapi_base和snsapi_userinfo) $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect"; //跳轉到 $url header("location:".$url); } //通過code換取網頁授權access_token public function getUserInfo(){ $appid = "微信公眾號的appid"; $appsecret = "微信公眾號的appsecret"; $code = $_GET["code"]; //獲取網頁授權的access_token $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$appsecret."&code=".$code."&grant_type=authorization_code"; //請求 $url 返回一個json json_decode不加 true 會將json轉為對象,加true轉為數組 $res = json_decode(file_get_contents($url),true); $access_token = $res["access_token"]; //獲取openid并賦值給變量 $openid = $res["openid"]; //拼接字符串并賦值給 $urls $urls = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; //請求用戶詳細信息,并賦值給 $userinfo $userinfo = file_get_contents($urls); dump($userinfo); } }
代碼如下:
add($userinfos); if ($id) { return '新增成功'; } else { $this->error('新增失敗'); } } }
注意:要建立數據庫對應字段:
{"openid":"oGma60nE6CBfiiwrBX3cavbZIsIA",
"nickname":"天道酬勤",
"sex":1,"
language":"zh_CN",
"city":"德州",
"province":"山東",
"country":"中國",
"headimgurl":"http://wx.qlogo.cn/mmopen/vi_32/DYAIOgq83ercIY5oIGoOGbGAB94zUYozCapRIDUVG21BWBELugfGINVlt7y0KILoUpIR7UR6f9Slyd8tuDGbZQ/132",
"privilege":[]}"
注意:判斷數據庫是否由此用戶。
class User extends Controller{/**之后跳轉地址**/ public function index(Request $request){ $user = new UserModel; // dump(Session::get('user_openid'));exit; $ret = $user ->get(['openid'=>Session::get('user_openid')]); if(!$ret) { $this->redirect('index/index'); }else { // 獲取session $openid=Session::get('user_openid'); $bis = $user ->show($openid); return $this->fetch('', [ 'userinfos' => $bis, ]); } }