代公衆號調用接口
概述
公衆號在登錄授權給第三方平臺後,許多公衆號業務的實現,需要依靠調用接口來實現。本頁介紹了公衆號第三方平臺開發者在授權流程中需要用到的API,以及獲得公衆號的授權後,如何代替公衆號調用接口。另外,微信服務器會將粉絲髮給公衆號的消息,以及微信服務器發給公衆號的事件推送(如粉絲取消關注通知),發給開發者服務器(會發送到公衆號消息與事件接收URL,詳見申請資料說明頁)上,開發者需要對這些消息在5秒內進行處理(如粉絲取消關注通知需要開發者返回success,詳見http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html)。
1、代替授權公衆號調用接口
第三方平臺方在獲得公衆號授權後,可以使用authorizer_access_token(即授權公衆號的令牌)作爲憑證,代替公衆號調用API,調用方式和公衆號使用自身API的方式一樣(只是需將調用API時提供的公衆號自身access_token參數,替換爲authorizer_access_token),具體詳見 http://mp.weixin.qq.com/wiki
2、各類型公衆號的接口權限說明
各類型的公衆號具體擁有哪些API權限(每個授權的公衆號,都可以通過下文將提到的接口獲知公衆號類型),請詳見:http://mp.weixin.qq.com/wiki/7/2d301d4b757dedc333b9a9854b457b47.html
3、代替公衆號使用微信JS-SDK
微信JS-SDK的使用方法,請參閱“接口說明”-“代公衆號使用JS SDK說明”。
4、報警排查指引
在授權公衆號以及第三方平臺的開發和業務運營過程中遇到報警時,請參閱報警排查指引來解決問題:http://mp.weixin.qq.com/wiki/6/01405db0092f76bb96b12a9f954cd866.html
具體第三方平臺API列表(不包括公衆號自身已有的、第三方平臺可代替公衆號調用的接口)如下:
功能 | API名稱 |
---|---|
1、獲取第三方平臺access_token | api_component_token |
2、獲取預授權碼 | api_create_preauthcode |
3、使用授權碼換取公衆號的授權信息 | api_query_auth |
4、獲取(刷新)授權公衆號的令牌 | api_authorizer_token |
5、獲取授權方信息 | api_get_authorizer_info |
6、獲取授權方的選項設置信息 | api_get_authorizer_option |
7、設置授權方的選項信息 | api_set_authorizer_option |
8、推送component_verify_ticket協議 | 每隔10分鐘定時推送 |
9、推送取消授權通知 | 公衆號取消授權時推送給開發者 |
特別注意,所有API調用需要驗證調用者IP地址。只有在第三方平臺申請時填寫的白名單IP地址列表內的IP地址,才能合法調用,其他一律拒絕。
1、獲取第三方平臺access_token
由於第三方平臺方可能託管了大量的公衆號,第三方平臺方安全問題造成的影響會更加嚴重,故API中增加了2項安全策略。
-
A)所有API調用端只能是第三方平臺申請時填寫的白名單客戶端IP
-
B)獲取第三方平臺令牌(component_access_token),增加了component_verify_ticket參數。component_verify_ticket由公衆平臺每隔10分鐘,持續推送給第三方平臺方(在創建公衆號第三方平臺審覈通過後,纔會開始推送)。
該API用於獲取第三方平臺令牌(component_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 | 有效期 |
2、獲取預授權碼
該API用於獲取預授權碼。預授權碼用於公衆號授權時的第三方平臺方安全驗證。
接口調用請求說明
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、使用授權碼換取公衆號的授權信息
該API用於使用授權碼換取授權公衆號的授權信息,並換取authorizer_access_token和authorizer_refresh_token。 授權碼的獲取,需要在用戶在第三方平臺授權頁中完成授權流程後,在回調URI中通過URL參數提供給第三方平臺方。
接口調用請求說明
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分別代表: 消息與菜單權限集 用戶管理權限集 帳號管理權限集 網頁授權權限集 微信小店權限集 多客服權限集 業務通知權限集 微信卡券權限集 |
4、獲取(刷新)授權公衆號的令牌
該API用於在授權方令牌(authorizer_access_token)失效時,可用刷新令牌(authorizer_refresh_token)獲取新的令牌。
接口調用請求說明
http請求方式: POST(請使用https協議)
https:// api.weixin.qq.com /cgi-bin/component/api_authorizer_token?component_access_token=xxxxx
POST數據示例:
{
"component_appid":"appid_value",
"authorizer_appid":"auth_appid_value",
"authorizer_refresh_token":"refresh_token_value",
}
請求參數說明
參數 | 說明 |
---|---|
component_appid | 第三方平臺appid |
authorizer_appid | 授權方appid |
authorizer_refresh_token | 授權方的刷新令牌,刷新令牌主要用於公衆號第三方平臺獲取和刷新已授權用戶的access_token,只會在授權時刻提供,請妥善保存。 一旦丟失,只能讓用戶重新授權,才能再次拿到新的刷新令牌 |
返回結果示例
{
"authorizer_access_token": "aaUl5s6kAByLwgV0BhXNuIFFUqfrR8vTATsoSHukcIGqJgrc4KmMJ-JlKoC_-NKCLBvuU1cWPv4vDcLN8Z0pn5I45mpATruU0b51hzeT1f8",
"expires_in": 7200,
"authorizer_refresh_token": "BstnRqgTJBXb9N2aJq6L5hzfJwP406tpfahQeLNxX0w"
}
結果參數說明
參數 | 說明 |
---|---|
authorizer_access_token | 授權方令牌 |
expires_in | 有效期,爲2小時 |
authorizer_refresh_token | 刷新令牌 |
5、獲取授權方的賬戶信息
該API用於獲取授權方的公衆號基本信息,包括頭像、暱稱、帳號類型、認證類型、微信號、原始ID和二維碼圖片URL。
需要特別記錄授權方的帳號類型,在消息及事件推送時,對於不具備客服接口的公衆號,需要在5秒內立即響應;而若有客服接口,則可以選擇暫時不響應,而選擇後續通過客服接口來發送消息觸達粉絲。
接口調用請求說明
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/GPyw0pGicibl5Eda4GmSSbTguhjg9LZjumHmVjybjiaQXnE9XrXEts6ny9Uv4Fk6hOScWRDibq1fI0WOkSaAjaecNTict3n6EjJaC/0",
"service_type_info": { "id": 2 },
"verify_type_info": { "id": 0 },
"user_name":"gh_eb5e3a772040",
"alias":"paytest01"
},
"qrcode_url":"URL",
"authorization_info": {
"appid": "wxf8b4f85f3a794e77",
"func_info": [
{ "funcscope_category": { "id": 1 } },
{ "funcscope_category": { "id": 2 } },
{ "funcscope_category": { "id": 3 } }
]
}
}
結果參數說明
參數 | 說明 |
---|---|
authorizer_info | 授權方暱稱 |
head_img | 授權方頭像 |
service_type_info | 授權方公衆號類型,0代表訂閱號,1代表由歷史老帳號升級後的訂閱號,2代表服務號 |
verify_type_info | 授權方認證類型,-1代表未認證,0代表微信認證,1代表新浪微博認證,2代表騰訊微博認證,3代表已資質認證通過但還未通過名稱認證,4代表已資質認證通過、還未通過名稱認證,但通過了新浪微博認證,5代表已資質認證通過、還未通過名稱認證,但通過了騰訊微博認證 |
user_name | 授權方公衆號的原始ID |
alias | 授權方公衆號所設置的微信號,可能爲空 |
qrcode_url | 二維碼圖片的URL,開發者最好自行也進行保存 |
authorization_info | 授權信息 |
appid | 授權方appid |
func_info | 公衆號授權給開發者的權限集列表(請注意,當出現用戶已經將消息與菜單權限集授權給了某個第三方,再授權給另一個第三方時,由於該權限集是互斥的,後一個第三方的授權將去除此權限集,開發者可以在返回的func_info信息中驗證這一點,避免信息遺漏),1到9分別代表: 消息與菜單權限集 用戶管理權限集 帳號管理權限集 網頁授權權限集 微信小店權限集 多客服權限集 業務通知權限集 微信卡券權限集 微信掃一掃權限集 |
6、獲取授權方的選項設置信息
該API用於獲取授權方的公衆號的選項設置信息,如:地理位置上報,語音識別開關,多客服開關。注意,獲取各項選項設置信息,需要有授權方的授權,詳見權限集說明。
接口調用請求說明
http請求方式: POST(請使用https協議)https://api.weixin.qq.com/cgi-bin/component/ api_get_authorizer_option?component_access_token=xxxx
POST數據示例
{
"component_appid":"appid_value",
"authorizer_appid": " auth_appid_value ",
"option_name": "option_name_value"
}
請求參數說明
參數 | 說明 |
---|---|
component_appid | 第三方平臺appid |
authorizer_appid | 授權公衆號appid |
option_name | 選項名稱 |
返回結果示例
{
"authorizer_appid":"wx7bc5ba58cabd00f4",
"option_name":"voice_recognize",
"option_value":"1"
}
結果參數說明
參數 | 說明 |
---|---|
authorizer_appid | 授權公衆號appid |
option_name | 選項名稱 |
option_value | 選項值 |
7、設置授權方的選項信息
該API用於設置授權方的公衆號的選項信息,如:地理位置上報,語音識別開關,多客服開關。注意,設置各項選項設置信息,需要有授權方的授權,詳見權限集說明。
接口調用請求說明
http請求方式: POST(請使用https協議)https://api.weixin.qq.com/cgi-bin/component/ api_set_authorizer_option?component_access_token=xxxx
POST數據示例
{
"component_appid":"appid_value",
"authorizer_appid": " auth_appid_value ",
"option_name": "option_name_value",
"option_value":"option_value_value"
}
請求參數說明
參數 | 說明 |
---|---|
component_appid | 第三方平臺appid |
authorizer_appid | 授權公衆號appid |
option_name | 選項名稱 |
option_value | 設置的選項值 |
返回結果示例
{
"errcode":0,
"errmsg":"ok"
}
結果參數說明
參數 | 說明 |
---|---|
errcode | 錯誤碼 |
errmsg | 錯誤信息 |
選項名和選項值表
option_name | option_value | 選項值說明 |
---|---|---|
location_report(地理位置上報選項) | 0 | 無上報 |
1 | 進入會話時上報 | |
2 | 每5s上報 | |
voice_recognize(語音識別開關選項) | 0 | 關閉語音識別 |
1 | 開啓語音識別 | |
customer_service(客服開關選項) | 0 | 關閉多客服 |
1 | 開啓多客服 |
8、推送component_verify_ticket協議
在公衆號第三方平臺創建審覈通過後,微信服務器會向其“授權事件接收URL”每隔10分鐘定時推送component_verify_ticket。第三方平臺方在收到ticket推送後也需進行解密(詳細請見【消息加解密接入指引】),接收到後必須直接返回字符串success。
POST數據示例
<xml>
<AppId> </AppId>
<CreateTime>1413192605 </CreateTime>
<InfoType> </InfoType>
<ComponentVerifyTicket> </ComponentVerifyTicket>
</xml>
字段說明
字段名稱 | 字段描述 |
---|---|
Appid | 第三方平臺appid |
CreateTime | 時間戳 |
InfoType | component_verify_ticket |
ComponentVerifyTicket | Ticket內容 |
9、推送取消授權通知
當授權方(即授權公衆號)在公衆平臺的授權管理中,取消了對第三方平臺方的授權託管後,微信服務器會向第三方平臺方的授權事件接收URL(創建第三方平臺時填寫)推送取消授權通知。
POST數據示例
<xml>
<AppId></AppId>
<CreateTime>1413192760</CreateTime>
<InfoType> </InfoType>
<AuthorizerAppid></AuthorizerAppid>
</xml>
第三方平臺方在收到取消授權通知後也需進行解密(詳細請見【消息加解密接入指引】),接收到後之後只需直接返回字符串success。爲了加強安全性,postdata中的xml將使用服務申請時的加解密key來進行加密,具體請見【公衆號第三方平臺的加密解密技術方案】
字段說明:
字段名稱 | _(字段描述) |
---|---|
InfoType | none,代表該消息推送給服務 |
Appid | 第三方平臺appid |
CreateTime | 時間戳 |
InfoType | unauthorized |
AuthorizerAppid | 取消授權的公衆號 |