接收第三方回调,请求方式小技巧

     对接第三方接口的时候你会发现,会有回调地址这么一说。一般情况下在请求第三方接口创建订单或者是执行某项操作的时候使得你的订单状态发生改变,第三方会调用你的回调地址将相关的状态变更推送给你,这种第三方主动通过地址请求你的方式,就叫做第三方回调。

   1. 第三方回调参数不准确怎么办?

    一般情况下不会碰到,但是如果碰到多个业务耦合,并且回调地址只有一个的时候。比如,滴滴打车和全平台打车(整合多家打车业务)在一家第三方这里只有一个回调地址,然而你调用不同的接口回调的参数是不同的,估计大家脑海中已经有了一个想法---request请求域。但是这个时候你要做一下改动,不然拿值是不好拿的。

 @RequestMapping(value = "/callBack")
    public BaseResponse callBackForDD( String no, String out_source_no, String state) {
       // request
        // 参数Map
        Map properties = request.getParameterMap();
        // 返回值Map
        Map returnMap = new HashMap();
        Iterator entries = properties.entrySet().iterator();
        Map.Entry entry;
        String name = "";
        String value = "";
        while (entries.hasNext()) {
            entry = (Map.Entry) entries.next();
            name = (String) entry.getKey();
            Object valueObj = entry.getValue();
            if(null == valueObj){
                value = "";
            }else if(valueObj instanceof String[]){
                String[] values = (String[])valueObj;
                for(int i=0;i<values.length;i++){
                    value = values[i] + ",";
                }
                value = value.substring(0, value.length()-1);
            }else{
                value = valueObj.toString();
            }
            log.info("回调参数:"+name+":"+ value);
            returnMap.put(name,value);
        }

        log.info(request.getParameterMap().toString());
        log.info("订单ID:" + no + "服务商单号:" + out_source_no
                + ",状态:" + state);
        return rhAllTaxiService.getCallBackForDD(no, out_source_no, state,returnMap);
    }

在这个地方,有三个参数和一个map,在我这里只是一个半成品,前期只是对接了一个业务,后期发现还要对接第二个,但是现在这个接口已经满足不了需求,干脆用request接收到相应的所有参数,这样以后再追加新的业务和功能就不用进行大的改动了。这边里面的map可以说是一个工具类吧,有兴趣的小伙伴可以保存下来,具体功能就在于将request请求域里面的值遍历循环到一个map数组中去,然后根据你相应的需求去拿到相应的值做操作即可。

     2.put请求怎么使用formdata参数?

    很难受,如果在springboot中单纯的在put请求上添加formdata格式的参数,注定你是拿不到传过来的值,是需要后台进行配置一下的。

@Bean
    public HttpPutFormContentFilter httpPutFormContentFilter() {
        return new HttpPutFormContentFilter();
    }
@EnableWebMvc
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

如果你这边是springboot项目的话,是需要新建一个类继承WebMvcConfigurerAdapter 类的,通过HiddenHttpMethodFilter获取put表单中的参数-值,HttpPutFormContentFilter过滤器的作为就是获取put表单的值,并将之传递到Controller中标注了method为RequestMethod.put的方法中。

如果你这边是其他spring类型的项目,可以在配置文件web.xml中进行配置

<filter>
		<filter-name>httpPutFormcontentFilter</filter-name>
		<filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>httpPutFormContentFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

这一点需要小伙伴们注意一下,楼主在这里踩过坑。。。

3.小经验之谈

 3.1.对接第三方接口,不管怎么对接,都要考虑到你的上游客户使用时的便捷性,在编写代码的过程中,swagger页面上的接口参数命名一定要规范,暴露出来的参数一定是要有意义的,如果暴露的参数在后台也是可以取到值的情况,那就尽量不要暴露给客户。合适的代码不仅要方便自己,还要方便其他使用你的代码的人。

 3.2.如果你的业务中,既要对接第三方,又要链接本地数据库进行操作,so,做好sql语句的优化,对于城市,影院,车型等固定的信息尽量缓存。

 3.3.通常第三方接口都会涉及下单,这个时候你需要建立一张数据库表,保存一切能保存的信息,不要怕麻烦,因为到了真正上线的时候,如果扣款失败等等情况,在这里面都是可以拿到相应的有用信息的。 

 3.4.多打日志,对于我这样的新手来说,总是会忘记打日志,事实告诉我,不打日志你会吃很大的亏,至少各种请求的入参,出参 ,已经关键地方的参数需要打出来,这样便于你快速定义相关错误,经验哟....-_-

 3.5.一定要,一定要耐得住烦,很有可能你的需求会接二连三的改动。

 3.6.尽量在公共部分做封装,如果一个第三方设计20个接口,如果你把HttpClient写20遍是不是太难受了,尽量做好封装造好轮子,便于自己更加快速的开发。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值