项目
微服务之间的调用
微服务之间的认证需要在在每次调用前设置一个拦截器RequestInterceptor,每次请求之间需要将令牌添加到文件中传递给其他业务
public class FeignInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { try { //使用RequestContextHolder工具获取request相关变量 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes != null) { //取出request HttpServletRequest request = attributes.getRequest(); //获取所有头文件信息的key Enumeration<String> headerNames = request.getHeaderNames(); if (headerNames != null) { while (headerNames.hasMoreElements()) { //头文件的key String name = headerNames.nextElement(); //头文件的value String values = request.getHeader(name); //将令牌数据添加到头文件中 requestTemplate.header(name, values); } } } } catch (Exception e) { e.printStackTrace(); } } }
你们支付业务是怎么实现的
1)用户在订单微服务中下单,下单后,会向MQ发送一个延时队列,延时30分钟,队列的信息主要是订单信息。
2)下单成功后,前端调用支付系统,根据订单号创建支付二维码,支付二维码的支付地址由订单微服务调用微信服务获取支付地址。
3)用户看到支付二维码后,开始扫码付款,并进行授权操作,此时如果授权成功,则用户扣款支付成功。
4)用户支付成功后,微信服务器会将支付状态发送给支付微服务,支付微服务会将该信息发给RabbitMQ。
5)在订单系统中会创建一个支付信息消息的监听,读到支付信息后,根据支付结果,如果支付成功,则修改订单状态,如果是支付失败,也修改对应订单状态。
6)防止用户长时间不支付,在订单系统中,还编写一个延时队列监听,半小时后,能监听到订单信息,并在数据库中检查订单是否已经支付,如果已经支付,则无需处理,如果未支付,则需要关闭微信支付,同时修改订单状态和商品状态。
支付过程中出现网络抖动怎么办
支付中如果出现网络古筝,而没有受到微信服务的支付装填响应没怎么处理?
微信服务器提供了一个根据订单号查询支付信息的方法,可以调用该方法查询支付状态信息。