最近在做一個使用美團api的項目,當用到美團門店解綁功能的回調時,開始思考它的功能
這是美團官方提供的api文檔,鏈接在這:http://developer.meituan.com/openapi#4.4
美團官方文檔部分:
開發者如果想要支持自主解綁功能需要進行一下對接步驟:
- 開發者在開發者中心的回調接口設置頁面設置"門店映射解綁回調地址"
- 開發者接入解綁UISDK或者WEB解綁方式供商家使用
- 商家自己操作解綁后,開放平台會通過開發者設置的"門店映射解綁回調地址",將解綁信息回傳給開發者
注意
- 回傳的參數不是json,http方式是POST,contentType是application/x-www-form-urlencoded
- 由於歷史原因,存在兩個相同意義的參數ePoiId,epoiId。對於像linux等區分大小寫的系統,沒什么問題,但是像windows系統的程序,需要單獨處理一下兩個epoiId
- 開發者接收到回調參數之后,必須返回json字符串{"data":"success"},開放平台如果沒有推送成功,或者沒有收到{"data":"success"},或發起重試,最多重試10次,每次重試的間隔隨時間增加而增加。開發者需要自己處理重試推送的消息。
- 一店一token,團購和外賣同時解綁,再次綁定token會更新;只解綁其中一個業務再次綁定,token和之前的一致。
流程大致是這樣:
1.程序先調開放平台的解綁地址
2.開放平台回調程序的回調方法
3.回調方法返回success,開放平台執行解綁操作,返回其他,則不執行解綁操作
思考,如果開放平台沒有回調,直接執行解綁方法,那么如果此時,程序解綁操作失敗后,會造成信息不一致的情況:我的程序上顯示還在綁定狀態,美團上卻已經解除綁定了
所以,用到了回調函數,當程序請求開放平台的解綁方法時,開放平台回調,等待客戶端執行成功操作返回sucess,然后再執行解綁操作,保證了數據的一致性。
那么,問題來了:
如果說,當客戶端成功執行了操作,而開放平台美團卻執行操作失敗了,又造成了信息的不一致。
這個情形,類似於TCP的通信,采用了三次握手來解決這個問題:
程序調開放平台的解綁函數
程序執行操作成功后返回success,但是不知到開放平台是否執行操作成功,所以再去調開放平台的回調
當開放平台返回的是sucess時,那么就執行操作,返回的時fail時,那么就不執行解綁操作。
當開放平台返回的是sucess時,如果程序端執行解綁操作又失敗了,那就提示用戶操作失敗,請重試。
應該是出現這種情況的可能微乎其微,再加上美團的開發者不可能不了解三次握手確認來講
對這些業務做這樣的確認操作是沒有必要的。
但是對於錢財交易這樣的方式就必須采取三次握手這樣的操作方式了。
本人系新手上路,文章可能顯得臃腫,寫下來記錄自己的成長歷程。
水平有限,歡迎並感謝糾錯指正