JAVA全系列 教程
3762个小节阅读:7088.6k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在支付成功后,支付宝会通知我们支付成功,此时我们需要准备一个回调方法供支付宝调用,在该方法中我们要进行验签、修改订单状态、生成交易记录。我们先重写支付接口实现类中的相关方法:
在支付服务模块编写交易记录Mapper
xxxxxxxxxx
public interface PaymentMapper extends BaseMapper<Payment> {
}
在启动类扫描交易记录Mapper
xxxxxxxxxx
@SpringBootApplication
@MapperScan("com.itbaizhan.shopping_pay_service.mapper")
public class ShoppingPayServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ShoppingPayServiceApplication.class, args);
}
}
在支付服务模块编写支付接口实现类
xxxxxxxxxx
@Override
public void checkSign(Map<String, Object> paramMap) {
// 获取所有参数
Map<String, String[]> requestParameterMap = (Map<String, String[]>) paramMap.get("requestParameterMap");
// 验签
boolean valid = ZfbVerifierUtils.isValid(requestParameterMap, zfbPayConfig.getPublicKey());
// 验签失败,抛出异常
if (!valid) {
throw new BusException(CodeEnum.CHECK_SIGN_ERROR);
}
}
@Override
public void addPayment(Payment payment) {
paymentMapper.insert(payment);
}
编写支付控制器
xxxxxxxxxx
/**
* 该方法是用户扫码支付后支付宝调用的。
* @return
*/
@PostMapping("/success/notify")
public BaseResult successNotify(HttpServletRequest request){
// 1.验签
Map<String,Object> paramMap = new HashMap();
paramMap.put("requestParameterMap",request.getParameterMap());
zfbPayService.checkSign(paramMap);
String trade_status = request.getParameter("trade_status");// 订单状态
String out_trade_no = request.getParameter("out_trade_no");// 订单编号
// 如果支付成功
if (trade_status.equals("TRADE_SUCCESS")){
// 2.修改订单状态
Orders orders = orderService.findById(out_trade_no);
orders.setStatus(2); // 订单状态为已付款
orders.setPaymentTime(new Date());
orders.setPaymentType(2); // 支付宝支付
orderService.update(orders);
// 3.添加交易记录
Payment payment = new Payment();
payment.setOrderId(out_trade_no); // 订单编号
payment.setTransactionId(out_trade_no); // 交易号
payment.setTradeType("支付宝支付"); // 交易类型
payment.setTradeState(trade_status); // 交易状态
payment.setPayerTotal(orders.getPayment()); // 付款数
payment.setContent(JSON.toJSONString(request.getParameterMap())); // 支付详情
payment.setCreateTime(new Date()); // 支付时间
zfbPayService.addPayment(payment);
}
return BaseResult.ok();
}