背景:公司做美团洗涤上门业务,本来好好的,后面美团要求接入美团·北极星订单预约接口,才能正常使用,没办法只能去接接口了,但是遇到了无数的坑,所以就有了这篇《美团·北极星开发对接避坑指北》,记录下我开发过程中遇到的坑,希望能帮助到遇到问题的Developer,减少开发时间。
一、沟通交流
全部交流在微信群里交流,里面没有技术人员,遇到开发问题很难得到回复,都要靠里面的美团工作人员进行传达,如果需要咨询技术问题,只能通过邮件进行交流,基本在反复看文档以及问题猜测验证过程中进行;WTF,整个过程无比难受。
二、验签
一开始我用美团提供的SDK进行开发测试报错的有点多,还有些逻辑不能看懂,所有只能参照它的文档自行开发了;这样还可以不用导入它的jar包,减少jar包体积。
三、HEAD请求
写的接口通过postman这种工具进行访问是没有问题,然而使用美团的API调试器,或者上线检测工具的话,就会保一个错:
org.springframework.web.HttpRequestMethodNotSupportedException: Request method ‘HEAD’ not supported
原因就是**美团过来的请求会用一个HEAD的请求方法,HEAD:请求一个与GET请求的响应相同的响应,但没有响应体,用于测试数据是否存在、当做心跳检测等等。**
找到两个方法可以进行处理;
解决方法一:方法中引入RequestMethod.HEAD,使api可以接受HEAD方法。
@RequestMapping(value = "book/startbook", method = {RequestMethod.POST, RequestMethod.HEAD})
public ResultDataEntity<StartBookVO> startBook(StartBookBO bo) {
}
解决方法二:通过过滤器里面对HEAD方法进行忽略处理,
public class AuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
if ("HEAD".equals(request.getMethod())) {
return;
}
String token = request.getHeader(JwtUserTool.TOKEN);
if(token==null||token.equals("undefined")||token.equals("")){
filterChain.doFilter(request, response);
return;
}
JwtUser onlineUser = JwtUserTool.getJWTUser(token);
if(onlineUser!=null && onlineUser.getUserId()!=null){
Authentication authentication = new UsernamePasswordAuthenticationToken(onlineUser,token,onlineUser.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterChain.doFilter(request, response);
}
}
四、请求问题
所有post的请求都是application/x-www-form-urlencoded;不是经常用的JSON形式,要加以注意。
这里文档上明确写了,但是我读文档不仔细,也踩到了坑。
五、域名避坑
1、API调试台,可以使用内网穿透工具进行调试;但是,如果使用大众点评的点评实验室进行调用内网穿透域名,直接报错400,而且本地服务没有接到请求;
猜测是内网穿透域名没有进行备案,美团那边直接就对域名进行过滤了,于是通过Ngnix进行反向代理,进行测试,ok,请求能够到达本地服务。
解决方案:
通过Ngnix反向代理,就能解决请求问题。
六、授权的坑:session换取接口
按照api文档写的调用,结果文档都看烂了,都没有找到问题的所在;一直以为的入参的字段所问题,结果根本就不是,是TMD auth_code传的值不对,建议直接用正确的授权码来测,不要随便写,auth_code=12345,这种直接报错;直接上线上才找到问题,WTF!
解决掉这几个核心问题后,就进入业务开发阶段CRUD,终于开始丝滑了,耗费两周的时间,终于把功能做上线。
以上是我对接过程中遇到的问题进行归纳整理,若有商业对接可以留言告诉我,希望对你们有帮助,期待你们的一键三连!!!