下单之策略模式
下单简单的设计
一个小DEMO,可以在此基础上增加返回页面,对应的通道返回对应的页面(H5,银行卡,扫码等等),然后根据传参,返回页面或者支付链接
1.定义一个interface接口
package com.xukehong.demo.service.payment;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.http.HttpServletRequest;
/**
* @Author: xkh
* @Date: 2019/12/7 14:10
* @Version 1.0
*/
public interface IPaymentService {
/**
* 发起支付下单
*/
JSONObject payOrder(JSONObject params, HttpServletRequest request);
/**
* 查询支付情况
*/
JSONObject queryPay(JSONObject params);
/**
* 发起代付下单
*/
JSONObject cashOrder(JSONObject params);
/**
* 查询代付结果
*/
JSONObject queryCash(JSONObject params);
/**
* 查询余额
*/
String queryBalance(JSONObject params);
}
2.定义一个抽象类实现IPaymentService接口
package com.xukehong.demo.service.payment;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
/**
* @Author: xkh
* @Date: 2019/12/7 14:04
* @Version 1.0
*/
public abstract class AbstractPaymentService implements IPaymentService {
@Autowired
AbstractPaymentService abstractPaymentService;
@Transactional
public JSONObject payOrder(JSONObject params, HttpServletRequest request) {
//业务处理...
JSONObject jsonObject = abstractPaymentService.payOrder(params, request);
return jsonObject;
}
@Override
public JSONObject cashOrder(JSONObject params) {
return null;
}
@Override
public JSONObject queryCash(JSONObject params) {
return null;
}
@Override
public String queryBalance(JSONObject params) {
return null;
}
}
3.假如需要接支付宝支付接口(又要接微信的话,copy一份 不同的@Service即可)
package com.xukehong.demo.service.payment;
import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
/**
* @Author: xkh
* @Date: 2019/12/7 14:12
* @Version 1.0
*/
@Service("pass1Pay")
public class Pass1PaymentService extends AbstractPaymentService {
@Override
public JSONObject payOrder(JSONObject params, HttpServletRequest request) {
//请求接口后的结果
JSONObject jsonObject = new JSONObject();
jsonObject.put("upCode", "ABC123456789");
jsonObject.put("qrcode", "http://www.baidu.com");
return jsonObject;
}
@Override
public JSONObject queryPay(JSONObject params) {
//请求接口后的结果
JSONObject jsonObject = new JSONObject();
jsonObject.put("upCode", "ABC123456789");
jsonObject.put("status", "1"); //支付成功
return jsonObject;
}
}
4.测试接口
/**
* @Author: xkh
* @Date: 2019/8/22 11:06
* @Version 1.0
*/
@RestController
@RequestMapping("/pay")
@Api(tags = "支付")
@Slf4j
public class PayController {
@Autowired
private ApplicationContextProvider applicationContextProvider;
/**
* 下单之策略模式
*/
@ApiOperation("下单之策略模式")
@PostMapping("/payTest")
public JSONObject test(@RequestBody JSONObject params, HttpServletRequest request) {
//通过下单的商户号获取到通道编号(假如已在后台配置)
String channelNumber = "pass1Pay";
AbstractPaymentService service = applicationContextProvider.getBean(channelNumber, AbstractPaymentService.class);
JSONObject jsonObject = service.payOrder(params, request);
return jsonObject;
}
}
5.测试接口
版权声明:本文为qq_33532188原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。