微信第三方平台開發流程和總結
創建第三方平台
1).在微信開放平台-管理中心-第三方平台中創建第三方平台賬號。創建第三方平台
2).選擇“平台型服務商類型”創建第三方平台。填寫第三方平台的基本信息. 填寫基本信息
3).設置相關權限信息,具體權限集信息可參考:第三方平台權限說明
4).填寫開發資料的信息說明, 可參考:第三方平台申請資料說明
開發接入
- 接收第三方驗證票據(component_verity_ticket)
在第三方平台創建審核通過后,微信服務器會向其“授權事件接收URL”每隔10分鍾定時推送component_verify_ticket。第三方平台方在收到ticket推送后也需進行解密(詳細請見【消息加解密接入指引】),接收到后必須直接返回字符串success。
注意1:component_verity_ticket建議每次接受都進行寫入緩存/數據庫/文件
注意2:微信發送的請求中總共有5個參數,具體如下:
時間戳 timestamp,隨機數nonce , encrypt_type(加密類型,為aes)和msg_signature(消息體簽名,用於驗證消息體的正確性)以及xml內容 詳細可以查看
XML內容
<xml>
<AppId></AppId>
<CreateTime>1413192605 </CreateTime>
<InfoType> </InfoType>
<ComponentVerifyTicket> </ComponentVerifyTicket>
</xml>
注意3:對上述XML內容解密
解密/加密方式都是aes,
需要在創建第三方平台時填寫開發資料時填寫的:消息驗證token,消息加解密key,appid
和微信請求來的參數:msg_signature(簽名),timestamp(時間戳),nonce(隨機數),postDataStr(post來的數據字符串),進行校驗和解密成明文內容。然后提取出ComponentVerifyTicket進行寫入緩存/數據庫/文件(后續所有的操作都需要用到)
- 獲取令牌(component_access_token)
第三方平台component_access_token是第三方平台的下文中接口的調用憑據,也叫做令牌(component_access_token)。每個令牌是存在有效期(2小時)的,且令牌的調用不是無限制的,請第三方平台做好令牌的管理,在令牌快過期時(比如1小時30分)再進行刷新.
接口調用請求說明
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"
}
- 判斷token未過期直接返回(不要頻繁的請求token,微信有請求次數限制)
- 判斷ticket是否存在或過期
- 拼裝請求數據
- 發送Https請求並獲取結果
- 解析結果並保存token
- 獲取預授權碼(pre_auth_code)
該API用於獲取預授權碼。預授權碼用於公眾號或小程序授權時的第三方平台方安全驗證。
接口調用請求說明
http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx
POST數據示例:
{
"component_appid":"appid_value"
}
步驟:
- 判斷pre_auth_code未過期直接返回
- 獲取token,如果過期則重新請求
- 替換url中的xxx
- 拼裝請求參數
- 發送請求並獲取返回結果
- 保存pre_auth_code
- 重定向到授權頁,引入用戶進入授權頁
第三方平台方可以在自己的網站:中放置“微信公眾號授權”的入口,引導公眾號進入授權頁。授權頁網址為
該網址中第三方平台方需要提供第三方平台方appid、預授權碼和回調URI(授權成功后直接跳轉的頁面),
步驟:
- 在第三方平台指定的域名下做一個簡單的頁面作為授權頁的入口
- 獲取pre_auth_code
- 替換重定向的url的參數
- 接收授權方授權請求並保存授權方信息
在第四步后重定向到授權頁后,在授權頁上會有一個二維碼,微信公眾號管理員通過的使用本人微信掃描二維碼對第三方平台進行授權,在公眾號管理員掃描二維碼后,第三方平台后台給定的回調地址(redirect_uri),將會收到一條請求,請求中包含了授權方的authorization_code和authorization_code的有效期 ;
- 使用authorization_code換取授權方的authorizer_access_token和authorizer_refresh_token。
接口調用請求說明
http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx
POST數據示例:
{
"component_appid":"appid_value" ,//第三方appid
"authorization_code": "auth_code_value" //授權code
}
返回參數如圖看微信文檔里面
步驟:
- 獲取第三方平台的token
- 獲取授權方授權信息
- 獲取授權方賬號信息進行保存
- 接收微信用戶發送的事件以及消息
簡單講,就是微信用戶在手機上給公眾號發的普通文本消息會以上面的格式發到第三方平台的公眾號消息與事件接收URL
然后這個xml是加密過的,msg_signature(簽名),timestamp(時間戳),nonce(隨機數),postDataStr(post來的數據字符串),進行校驗和解密成明文內容
注意:被動回復時消息需要進行加密處理
步驟:
- 對post來的數據解密
- 根據解密后的明文處理不同的業務
特別注意:
- component_verity_ticket是獲取component_access_token必備參數
- component_access_token是獲取公眾號(授權方)authorizer_access_token時必備參數。
- authorizer_access_token是代公眾號(授權方)處理業務的必備參數。
- component_verity_ticket有效期3600(目前接口推送時返回的)。
- component_access_token有效期時2小時,且不是無限的。需要保存到緩存中(最好設置1小時30分)
- authorizer_access_token有效期是2小時,且不是無限的。需要保存到緩存中(最好設置1小時30分)