这里写自定义目录标题
简单记录第一次写回调的使用
第一次写回调,总是有一些忐忑和蒙蔽,虽然知道是什么原理,听过支付宝和微信的回调,支付宝提供了同步和异步,同步可以理解为简单的跳转到一个页面,而异步则是当我们请求成功时它会主动调用我们的回调函数,同步只是调用一次,而异步会调用多次,比如你通知你的小伙伴去买东西,他没去,同步就是你只告诉它一次,而异步就是告诉他多次,支付宝的异步是25小时内会调用8次,现在基本上在公司都是用异步。
再说为什么要回调呢?举个例子,比如支付宝的付款操作,我们下单,只有两种结果,一种是成功,一种是失败,无论哪一种都会返回给我们参数,但是它返回给我们是需要时间的,我们不可能等它返回给我们,我们再做自己的业务,所以有了回调一说,当我们提交下单请求的同时,把回调也进行提交,这样它们同时到后台,如果成功直接调用,我们就不用等它给我们返回的结果。
最后还有一点就是,回调的时候是它返回给我们数据,我们拿到数据再处理,这段时间在做快递寄件的时候,看他们官方给的Api文档,看的一脸懵,其实他们给的文档很清楚,可是当时自己脑子没转过来,文档里面说的请求参数指的是他们返回给我们的参数,而返回的数据指的是我们给他们后台返回的参数。
下面是快递100中的下单回调接口,做的时候确实很迷,具体写好的代码如下
//下单回调接口
public String callBackUrl(HttpServletRequest request){
System.out.println("callBackUrl3");
String taskId = request.getParameter("taskId");
String param = request.getParameter("param");
String sign = request.getParameter("sign");
//记录回调的内容,方便出问题后双方排查问题
System.out.println("taskId"+taskId+"...param"+param+"....sign"+sign);
//下单时给的salt,没有可以忽略
String salt="123456";
String ourSign = SignUtils.sign(param+salt);
System.out.println(ourSign);
SubscribeResp subscribeResp = new SubscribeResp();
subscribeResp.setResult(Boolean.TRUE);
subscribeResp.setReturnCode("200");
subscribeResp.setMessage("成功");
String resp = new Gson().toJson(subscribeResp);
if(ourSign.equals(sign)){
//处理自己的业务
System.out.println("数据更新到数据库成功1");
return resp;
}
return null;
};