支付中间件设计思路

前言

现如今,第三方支付平台国内有支付宝、微信、银联、京东、百度等平台,国外有各类信用卡。这么多的支付方式,如果一个一个去写,不仅浪费时间,还不太好维护。怎么办?我也是摸着石头过河,想着能不能总结下他们的共同点,做个统一的接口给公司内部用。。So,just do it

发送请求入口统一

完成一次请求,所需的步骤有:
1.构建Http Header,其中Conetent-Type有application/json、text/plain两种
2.构建Http Body,其中格式有json格式、queryString格式(a=1&b=1&c=1这样的)
3.发送Http请求
4.请求发送成功,解析处理响应。请求发送失败,走请求失败流程。

模板方法设计就是:
BasePayOrderTemplate.java

public abstract class BasePayOrderTemplate<T extends PayOrder,R extends PayOrderResult> implements PayOrderTemplate<T,R> {
        @Resource
        private RestTemplate restTemplate;//注入Spring的restTemplate
		public abstract HttpHeader buildHttpHeader(T payOrder); //构建Http Header
		public abstract String buildHttpBody(T payOrder); //构建Http Body
		public abstract R handleSuccess(String resBody);//请求发送成功,解析处理响应
		public abstract R handleFail(ResponseEntity<String> resBody);//请求发送失败,走请求失败流程。
        public R excute(T payOrder){
                //1.构建Http Header
        		HttpHeader headers = this.buildHttpHeader(payOrder);
        		//2.构建Http Body
        		String body = this.buildHttpBody(payOrder);
        		HttpEntity httpEntity = new HttpEntity(body,headers);
        		//3.发生Http请求
               ResponseEntity<String> resEntity = restTemplate.postForEntity(payOrder.getUrl(),body,String.class);
               if(resEntity.getStatus() == 200){
               			//4.请求发送成功,解析处理响应
               			return this.handleSuccess(resEntity.getBody());
               }
               //4.请求发送失败,走请求失败流程。
               return this.handleFail(resEntity);
              
		}
}

PayOrderTemplate.java

public interface PayOrderTemplate<T,R>{
 	 R excute(T payOrder);
}

PayOrder.java

@Data
public abstract class PayOrdeer<T>{
	private String url;
	private T data;
}

针对不通的平台,各自都有不同的构建HttpHeader、构建HttpBody的实现。只要相对应得地现出AlipayPayOrderTemplate.java、WxPayOrderTemplate.java即可。譬如,有些会把签名sign放在body里,有些会放header。

支付流程模板

目前,支付的请求方式大致就两类:
-同步方式。 一次请求,完成支付
-异步方式。一次请求,在请求中带上回调地址,待支付完成后,访问回调地址。

这里只说下异步模板:

未完。。。。

你可能感兴趣的:(支付中间件设计思路)