1. 程式人生 > >公眾號第三方平臺開發,獲取授權公眾號使用者資訊

公眾號第三方平臺開發,獲取授權公眾號使用者資訊

公眾號第三方平臺的申請資料說明


授權發起頁域名指公眾號在登入授權給第三方平臺方時的授權回撥域名,在公眾號進行登入授權流程中,必須從本域名內網頁跳轉到登入授權頁,才可完成登入授權。授權成功後會回撥授權時提供的URI,公眾平臺會檢查URI,必須保證URI所屬域名與服務申請時提供的授權域名保持一致。請注意,域名不需帶有“http://”等協議內容,也不能在域名末尾附加詳細目錄,嚴格按照類似www.qq.com的寫法。

授權測試公眾號列表:在全網釋出之前,僅該列表內公眾號才可進行授權,以便測試。請填寫公眾號的原始ID(可在公眾平臺網站的公眾號設定頁找到),最多10個,以英文“;”隔開。請至少要填寫這一個:

gh_ea3c04785154這是全網釋出時必須用到的。

授權事件接收URL:用於接收取消授權通知、授權成功通知、授權更新通知,也用於接收ticket,ticket是驗證平臺方的重要憑據,服務方在獲取component_access_token時需要提供最新推送的ticket以供驗證身份合法性。此ticket作為驗證服務方的重要憑據,請妥善儲存。

公眾號訊息校驗Token:開發者在代替公眾號接收到訊息時,用此Token來校驗訊息。用法與普通公眾號token一致

公眾號訊息加解密Key: 在代替公眾號收發訊息過程中使用。必須是長度為43位的字串,只能是字母和數字。用法與普通公眾號symmetric_key一致

公眾號訊息與事件接收URL:該URL用於接收已授權公眾號的訊息和事件,訊息內容、訊息格式、簽名方式、加密方式與普通公眾號接收的一致,唯一區別在於簽名token和加密symmetric_key使用的是服務方申請時所填寫的資訊。由於訊息具體內容不會變更,故根據訊息內容裡的ToUserName,服務方是可以區分出具體訊息所屬的公眾號


白名單IP地址列表:僅當開發者IP地址在該列表中時,才被允許呼叫相關介面。最多填寫100個IP地址,以英文“;”隔開。後續有出口IP變更時一定要先在申請資料裡填寫並覆蓋現網,否則會被攔截。

1,獲取第三方平臺access_token  

http請求方式: POST(請使用https協議) 

https://api.weixin.qq.com/cgi-bin/component/api_component_token

POST資料示例:

{
"component_appid":"appid_value" ,
"component_appsecret": "appsecret_value", 
"component_verify_ticket": "ticket_value" 
}
   

請求引數說明
引數 說明
component_appid 第三方平臺appid
component_appsecret 第三方平臺appsecret
component_verify_ticket 微信後臺推送的ticket,此ticket會定時推送,具體請見本頁末尾的推送說明
返回結果示例

{
"component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA", 
"expires_in":7200
}
   

結果引數說明
引數 說明
component_access_token 第三方平臺access_token
expires_in 有效期
上述中的引數前兩個在平臺中都可以找到,component_verify_ticke這個引數需要去獲取。 獲取方法:

上述是你自己的第三方的開發平臺的詳情,其中的授權事件接受URl就是獲取component_verify_ticket的關鍵。

在第三方平臺建立稽核通過後,微信伺服器會向其“授權事件接收URL”每隔10分鐘定時推送component_verify_ticket。第三方平臺方在收到ticket推送後也需進行解密。所以在授權的方法中,需要去接受微信推送的post資料,然後解密獲得引數:

官方給出了個java的例子,可以看著例子進行講述:

public static void main(String[] args) throws Exception {

		//
		// 第三方回覆公眾平臺
		//

		// 需要加密的明文
		String encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";
		String token = "pamtest";
		String timestamp = "1409304348";
		String nonce = "xxxxxx";
		String appId = "wxb11529c136998cb6";
		String replyMsg = " 中文<xml><ToUserName><![CDATA[oia2TjjewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName><CreateTime>1407743423</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[eYJ1MbwPRJtOvIEabaxHs7TX2D-HV71s79GUxqdUkjm6Gs2Ed1KF3ulAOA9H1xG0]]></MediaId><Title><![CDATA[testCallBackReplyVideo]]></Title><Description><![CDATA[testCallBackReplyVideo]]></Description></Video></xml>";

		WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId);
		String mingwen = pc.encryptMsg(replyMsg, timestamp, nonce);
		System.out.println("加密後: " + mingwen);

		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		DocumentBuilder db = dbf.newDocumentBuilder();
		StringReader sr = new StringReader(mingwen);
		InputSource is = new InputSource(sr);
		Document document = db.parse(is);

		Element root = document.getDocumentElement();
		NodeList nodelist1 = root.getElementsByTagName("Encrypt");
		NodeList nodelist2 = root.getElementsByTagName("MsgSignature");

		String encrypt = nodelist1.item(0).getTextContent();
		String msgSignature = nodelist2.item(0).getTextContent();

		String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%1$s]]></Encrypt></xml>";
		String fromXML = String.format(format, encrypt);

		//
		// 公眾平臺傳送訊息給第三方,第三方處理
		//

		// 第三方收到公眾號平臺傳送的訊息
		String result2 = pc.decryptMsg(msgSignature, timestamp, nonce, fromXML);
		System.out.println("解密後明文: " + result2);
		
		//pc.verifyUrl(null, null, null, null);
	}

這個是給出例子的加解密的程式碼,而我們在授權的方法中獲取的就是微信加密後的xml檔案,所以我們要做的就是解密其中的檔案,我們可以修改上述程式碼,下面是我解析推送的資料:
public void auth_webhook() {
		logger.info("微信服務推送請求。");
		Context context = getContext();
		HttpServletRequest request = context.getReq();
		HttpServletResponse response = context.getResp();
		logger.info("處理請求資料");
		PrintWriter out = null;
		StringBuffer json = new StringBuffer();
		try {
			request.setCharacterEncoding("utf-8");
			out = response.getWriter();
			BufferedReader reader = request.getReader();
			String line = null;
			while ((line = reader.readLine()) != null) {
				json.append(line);
			}
		} catch (Exception e) {
			logger.error(e.toString(), e);
			return;
		}
		logger.info("json:=="+json);
		logger.info("json.toString:=="+json.toString());
		processAuthorizeEvent(request,json.toString());
//		output(response, "success"); // 直接返回success。
	}
	
	/**
	* 處理授權事件的推送
	* @param request
	* @throws AesException
	* @throws IOException
	*/
	public void processAuthorizeEvent(HttpServletRequest request,String xml){
		logger.info("開始處理請求資料");
	    String nonce = request.getParameter("nonce");
	    String timestamp = request.getParameter("timestamp");
	    String signature = request.getParameter("signature");
	    String msgSignature = request.getParameter("msg_signature");
	    String token="你平臺的token";
	    String encodingAesKey="你的key";
	    String appId="你的id";
	    logger.info("noce:{},timestamp:{}", nonce, timestamp);
	    logger.info("signature:{},msgSignature:{}", signature, msgSignature);
	    try {
			WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId);
			xml = pc.decryptMsg(msgSignature, timestamp, nonce, xml);
			logger.info("解密後的資料:"+xml);
		} catch (AesException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
上面中的xml就是解密後我們要的資料,我們可以根據這個資料在進行解析獲得我們要的那個欄位,具體參照http://blog.csdn.net/jackren_developer/article/details/78882408

2,獲取預授權碼 

http請求方式: POST(請使用https協議)

https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx

POST資料示例:

{
"component_appid":"appid_value" 
}
   

請求引數說明
引數 說明
component_appid 第三方平臺方appid
返回結果示例

{
"pre_auth_code":"Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw",
"expires_in":600
}
   

結果引數說明
引數 說明
pre_auth_code 預授權碼
expires_in 有效期,為20分鐘
拿到了預授權碼後,緊接著我們就要啟動授權頁,可以在自己的介面加上一個按鈕調起微信的授權頁

3,引導進入授權頁面

在任何一個html或者jsp頁面,加一個按鈕,按鈕的響應地址為:

https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx
該網址中第三方平臺方需要提供第三方平臺方appid、預授權碼和回撥URI

其中在redirect_uri這個URL中需要獲取掃碼使用者的授權碼,當公眾號使用者掃過後,會回撥上述的URI,將使用者的授權碼返回給你,你只需要接受儲存

4,授權後回撥URI,得到授權碼和過期時間

授權流程完成後,會進入回撥URI,並在URL引數中返回授權碼和過期時間(redirect_url?auth_code=xxx&expires_in=600)

5,使用授權碼換取公眾號的授權資訊

介面呼叫請求說明

http請求方式: POST(請使用https協議)

https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx

POST資料示例:

{
"component_appid":"appid_value" ,
" authorization_code": "auth_code_value"
}
   

請求引數說明
引數 說明
component_appid 第三方平臺appid
authorization_code 授權code,會在授權成功時返回給第三方平臺,詳見第三方平臺授權流程說明
返回結果示例


"authorization_info": {
"authorizer_appid": "wxf8b4f85f3a794e77", 
"authorizer_access_token": "QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM", 
"expires_in": 7200, 
"authorizer_refresh_token": "dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY", 
"func_info": [
{
"funcscope_category": {
"id": 1
}
}, 
{
"funcscope_category": {
"id": 2
}
}, 
{
"funcscope_category": {
"id": 3
}
}
]
}
   

結果引數說明
引數 說明
authorization_info 授權資訊
authorizer_appid 授權方appid
authorizer_access_token 授權方令牌(在授權的公眾號具備API許可權時,才有此返回值)
expires_in 有效期(在授權的公眾號具備API許可權時,才有此返回值)
authorizer_refresh_token 重新整理令牌(在授權的公眾號具備API許可權時,才有此返回值),重新整理令牌主要用於公眾號第三方平臺獲取和重新整理已授權使用者的access_token,只會在授權時刻提供,請妥善儲存。 一旦丟失,只能讓使用者重新授權,才能再次拿到新的重新整理令牌
func_info 公眾號授權給開發者的許可權集列表(請注意,當出現使用者已經將訊息與選單許可權集授權給了某個第三方,再授權給另一個第三方時,由於該許可權集是互斥的,後一個第三方的授權將去除此許可權集,開發者可以在返回的func_info資訊中驗證這一點,避免資訊遺漏),1到8分別代表:
訊息與選單許可權集
使用者管理許可權集
帳號管理許可權集
網頁授權許可權集
微信小店許可權集
多客服許可權集
業務通知許可權集
微信卡券許可權集
           
最後拿到上述的authorizer_appid去獲取使用者的資訊:

http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token=xxxx

POST資料示例:

{
"component_appid":"appid_value" ,
"authorizer_appid": "auth_appid_value" 
}

請求引數說明
引數 說明
component_appid 服務appid
authorizer_appid 授權方appid
返回結果示例

{
"authorizer_info": {
"nick_name": "微信SDK Demo Special", 
"head_img": "http://wx.qlogo.cn/mmopen/GPy", 
"service_type_info": { "id": 2 }, 
"verify_type_info": { "id": 0 },
"user_name":"gh_eb5e3a772040",

"principal_name":"騰訊計算機系統有限公司",

"business_info": {"open_store": 0, "open_scan": 0, "open_pay": 0, "open_card": 0, "open_shake": 0},

"alias":"paytest01"

"qrcode_url":"URL",

},     

"authorization_info": {

"appid": "wxf8b4f85f3a794e77", 
"func_info": [
{ "funcscope_category": { "id": 1 } }, 
{ "funcscope_category": { "id": 2 } }, 
{ "funcscope_category": { "id": 3 } }
]
}
}

結果引數說明
引數 說明
nick_name 授權方暱稱
head_img 授權方頭像
service_type_info 授權方公眾號型別,0代表訂閱號,1代表由歷史老帳號升級後的訂閱號,2代表服務號
verify_type_info 授權方認證型別,-1代表未認證,0代表微信認證,1代表新浪微博認證,2代表騰訊微博認證,3代表已資質認證通過但還未通過名稱認證,4代表已資質認證通過、還未通過名稱認證,但通過了新浪微博認證,5代表已資質認證通過、還未通過名稱認證,但通過了騰訊微博認證
user_name 授權方公眾號的原始ID
principal_name 公眾號的主體名稱
alias 授權方公眾號所設定的微訊號,可能為空
 business_info

 用以瞭解以下功能的開通狀況(0代表未開通,1代表已開通):

 open_store:是否開通微信門店功能

 open_scan:是否開通微信掃商品功能

 open_pay:是否開通微信支付功能

 open_card:是否開通微信卡券功能

 open_shake:是否開通微信搖一搖功能

 qrcode_url  二維碼圖片的URL,開發者最好自行也進行儲存
authorization_info 授權資訊
appid 授權方appid
func_info 公眾號授權給開發者的許可權集列表,ID為1到15時分別代表:
訊息管理許可權
使用者管理許可權
帳號服務許可權
網頁服務許可權
微信小店許可權
微信多客服許可權
群發與通知許可權
微信卡券許可權

微信掃一掃許可權

微信連WIFI許可權

素材管理許可權

微信搖周邊許可權

微信門店許可權

微信支付許可權

自定義選單許可權

請注意:
1)該欄位的返回不會考慮公眾號是否具備該許可權集的許可權(因為可能部分具備),請根據公眾號的帳號型別和認證情況,來判斷公眾號的介面許可權。


若有疑問聯絡QQ:1147726728

相關推薦

公眾第三方平臺開發獲取授權公眾使用者資訊

公眾號第三方平臺的申請資料說明 授權發起頁域名:指公眾號在登入授權給第三方平臺方時的授權回撥域名,在公眾號進行登入授權流程中,必須從本域名內網頁跳轉到登入授權頁,才可完成登入授權。授權成功後會回撥授權時提供的URI,公眾平臺會檢查URI,必須保證URI所屬域名與服務

微信開放平臺 公眾第三方平臺開發 教程四 代公眾呼叫介面的SDK和demo

 前幾章中我講解了微信開發平臺提供第三方平臺的好處,和使用流程,如果你看了我的文章相信你對開放平臺有了初步的瞭解,但是在實際的開發過程中可能會遇見很多問題。今天我將對每一個介面分別講解一下,以及的SKD的使用方法。

微信開放平臺 公眾第三方平臺開發 教程四 代公眾調用接口的SDK和demo

人工智能 itl 回調 one jeecg clas 每一個 ans msu 更多微信技術交流,請加QQ群:289709451、287090836 前幾章中我講解了微信開發平臺提供第三方平臺的好處,和使用流程,如果你看了我的文章相信你對開放平臺有了初

微信開放平臺 公眾第三方平臺開發 教程三 一鍵登錄授權第三方平臺

mil ims 貼圖 並且 流程 xxx one div call 更多微信技術交流,請加QQ群:289709451、287090836 公眾號第三方平臺的開放,是為了讓公眾號運營者,在面向垂直行業需求時,可以一鍵登錄授權給第三方的公眾號運營平臺,通過第三方開

微信開放平臺公眾第三方平臺開發 教程一 平臺介紹

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

公眾第三方平臺開發流程詳解

準備工作 1. 註冊申請 2. 建立第三方平臺 進入‘管理中心->建立第三方平臺’ 2.1. 輸入基本資訊 !基本資訊將顯示在授權頁被使用者看到,請認真填寫 修改平臺稽核成功後,僅對測試公眾號生效,屆時再提交“覆

php微信公眾開發獲取使用者微信個人資訊

        很多開發者在開發微信公眾號的時候,都需要獲取使用者的頭像,如果是個人的微信賬號,需要申請“公眾平臺測試賬號”來獲取微信公眾號所有介面許可權;        首先要獲取微信傳送過來的access_token,然後根據openid和access_token,來獲取

微信公眾三方平臺開發【生成授權頁】

之前我們講過,在獲取到預授權碼之後,我們需要在自己的網站中設定授權頁入口(如下圖),從而引導微信公眾號管理員進入到授權頁,對第三方平臺進行微信公眾號的託管授權。 對於微信授權頁,簡單的說就是一個帶有規定引數的URL,其中包括第三方平臺的appid、預授權碼

微信開放平臺 公眾第三方平臺開發 教程二 創建公眾第三方平臺

height 詳細步驟 spa org 地址 nbsp 創建 open sans 上節我們簡單介紹了一下什麽是公眾號第三方平臺,今天我們將具體操作如何創建屬於您自己的微信第三方平臺。用戶首先需要註冊成為開發平臺的用戶,註冊地址:https://open.weixi

微信公眾平臺開發模板消息網頁授權微信JS-SDK二維碼生成(4)

支持 post 網頁 信息 行業 使用步驟 獲取 公眾 符號 微信公眾平臺開發,模板消息,什麽是模板消息,模板消息接口指的是向用戶發送重要的服務通知,只能用於符合場景的要求中去,如信用卡刷卡通知,購物成功通知等等。不支持廣告營銷,打擾用戶的消息,模板消息類有固定的模板,每個

請確認授權入口頁所在域名授權後回調頁所在域名相同(微信第三方平臺開發)

微信 預授權 解決方式:生成的預授權URL地址放在頁面上,讓用戶點擊過去,而不是從後臺跳轉過去。請確認授權入口頁所在域名,與授權後回調頁所在域名相同(微信第三方平臺開發)

微信公眾開發獲取token獲取公眾粉絲獲取Unionid傳送客戶訊息

public class WeChatUtil { /** * 獲取token */ private static String ACCESSTOKENURL = "https://api.weixin.qq.com/cgi-bin/t

微信公眾對接第三方平臺開發

前言         微信公眾號對接第三方開發的前提就是授權。首先是開通開放平臺。開通時填寫資料包括公司資訊,還需要300大洋。開放平臺包括移動應用、網站應用、公眾號賬號、小程式、第三方平臺。這裡我們開通第三方平臺。       &nb

微信公眾平臺開發那些走過的坑

內置瀏覽器 點滴 播放 中一 ffmpeg 時間 想要 文件 設計 最近接手了一個微信公眾平臺的項目,歷時兩個月,基本完工,終於有時間可以總結一下這過程當中遇到的點點滴滴。 1、關於微信的內置瀏覽器 開始以為,微信內置瀏覽器是一個瀏覽器,對於安卓機和蘋果機都是一樣的,後來發

微信公眾平臺開發教程-微信公眾服務申請、認證(開通支付)-微信開發教程

微信公眾號服務號與訂閱號的區別 訂閱號: 1、每天可以發1次資訊,每次可以傳送8篇文章(資訊展示在微信公眾號摺疊檔案中) 2、不能申請微信支付功能 3、認證後才可以使用自定義選單功能 4、訂閱號適合:不需要支付功能,以為使用者提供諮詢資訊的企業。 服務號: 1、每月可以發4次資訊,每次可以傳送8

微信公眾平臺開發——微信授權登入(OAuth2.0)

1、OAuth2.0簡介   OAuth(開放授權)是一個開放標準,允許使用者讓第三方應用訪問該使用者在某一網站上儲存的私密的資源(如照片,視訊,聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。   允許使用者提供一個令牌,而不是使用者名稱和密碼來訪問他們存放在特

微信公眾平臺開發網頁獲取使用者地理位置

在這篇微信公眾平臺開發教程中,我們將介紹如何在網頁中獲取使用者的地理位置資訊。本文分為以下二個部分:生成JS-SDK許可權驗證簽名使用地理位置介面獲取座標一、微信JS-SDK1. 獲得Access Token2. 獲取jsapi_ticket生成簽名之前必須先了解一下jsap

微信第三方平臺開發經驗總結(五):接收授權授權請求並儲存授權資訊

public String queryAuth(String authCode,String expiresIn) {     String componentAccessToken = getComponentAccessToken();//把之前儲存的component_access_token取出來

Java微信公眾平臺開發獲取地理位置

本部分需要用到微信的JS-SDK,微信JS-SDK是微信公眾平臺面向網頁開發者提供的基於微信內的網頁開發工具包。通過使用微信JS-SDK,網頁開發者可藉助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信

微信公眾平臺開發(122) 獲取微信會員卡使用者姓名和手機號

1. SDK介面定義 //拉取會員資訊介面 public function get_membercard_userinfo($msg) { $url = "https://api.weixin.qq.com/card/membercard/u