微信公眾賬號開發之微信登陸Oauth授權-第一篇


我曾經在2012年的時候開始研究微信,那時微信的版本還是處於1.0,當時給朋友幫忙做一個基於微信端的web應用,官方的文檔是相當少的,百度搜索出來的東西基本也沒有多少實用價值,不過是在官網的基礎上作了很少一些改動,就傲驕的發上去說是原創。目前的微信文檔已經完善了很多,不過就我個人而言,仍過於有些寬泛,應該詳細的地方未做補充,甚至是官方的SDK都有問題(其中有一個微信支付模塊下的單詞拼錯了),給開發者帶來不少困擾。

趁着現在手上的事情不多,我打算做一期微信的開發專欄,把每個步驟都盡可能的記錄下來,當然,有不足的地方請大家糾正。

 

第一篇:微信登陸Oauth授權

開發者首先要在公眾號中配置好授權域名

1.登陸公眾號管理后台

點擊接口權限,找到右邊欄里的 網頁授權獲取用戶基本信息 點擊 修改輸入需要授權的域名信息,域名前綴不需要輸入http或https

 

2.查看公眾號APPID

點擊左側的基本配置,找到右邊的APPID項,截圖如下:

 

3.獲取網站回調code

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

鏈接中的APPID對應公眾號中的APPID,REDIRECT_URL對應授權后回調的域名,這個域名必須和配置的網頁回調域名一致,微信會有強制正則校驗

SCOPE有snsapi_base和snsapi_userinfo兩種類型,snsapi_base獲取用戶基本信息

 

4.通過code換取授權的access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

微信授權中有兩個access_token,一個全局token,可用來獲取用戶詳細信息、發送文字、圖片等,這個獲取到的access_token是臨時網頁授權token

正確返回的JSON格式如下:

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE",
   "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

返回參數的詳細介紹參考官方文檔:

http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

 

PHP示例文檔

<?php
$act = !empty($_REQUEST['act']) ? $_REQUEST['act'] : 'oauth';
$appid = 'XXX';
$secret = "XXX";
if($act=='oauth'){

$redirect_uri ='http%3a%2f%2fwww.XXX.com%2froute.php%3fact%3dcallback';
if(!empty($_REQUEST['redirect_uri']))
{
	$redirect_uri.=urlencode('&redirect_uri='.$_REQUEST['redirect_uri']);
}

$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appid.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect';
header('location:'.$url);
}
else{
	$code = $_GET["code"];
        $redirect_uri = $_GET['redirect_uri'];
	$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code';
	$json_obj = json_decode(file_get_contents($get_token_url));
	if(isset($json_obj->errcode))
	{
		die('error');
	}
	$openid = $json_obj->openid;
	if(!empty($redirect_uri))
		{
		  $symbol =preg_match('/.*((\.php)|\/)$/',$redirect_uri) ? '?' : '&';
		  $url =$redirect_uri.$symbol.'openid='.$openid;
		 
		 header('location:'.$url);
		  die();
		}
	header('location:https://www.XXX.com/mobile/index.php?source=weixin&openid='.$openid);
}	

 

 
        
 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM