调用开放平台的api的回调分析

最近在做一个使用美团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时,如果程序端执行解绑操作又失败了,那就提示用户操作失败,请重试。

 

 

应该是出现这种情况的可能微乎其微,再加上美团的开发者不可能不了解三次握手确认来讲
对这些业务做这样的确认操作是没有必要的。

但是对于钱财交易这样的方式就必须采取三次握手这样的操作方式了。

 

本人系新手上路,文章可能显得臃肿,写下来记录自己的成长历程。

水平有限,欢迎并感谢纠错指正

 

 

 

posted on 2017-09-28 10:45  不上,道  阅读(2298)  评论(1编辑  收藏  举报

导航