实现支付宝订单状态查询
支付宝文档中的样例

1、首先通过基本参数初始化AlipayClient,此处和支付模块部分相同,不再详述。
2、业务参数

业务参数就两个,选哪个都可以,其中out_trade_no是电商系统生成的,trade_no是支付宝回调后产生的。因为有可能一直就没收到支付宝的回调,也就没有trade_no,所以咱们这里使用out_trade_no。
@Autowired
AlipayClient alipayClient;
public PaymentStatus checkAlipayPayment(PaymentInfo paymentInfo){
System.out.println(“开始主动检查支付状态,paymentInfo.toString() = ” + paymentInfo.toString());
//先检查当前数据库是否已经变为“已支付状态”
if(paymentInfo.getId()==null){
System.out.println(“outTradeNo:”+paymentInfo.getOutTradeNo() );
paymentInfo = getPaymentInfo(paymentInfo);
}
if (paymentInfo.getPaymentStatus()== PaymentStatus.PAID){
System.out.println(“该单据已支付:”+paymentInfo.getOutTradeNo());
return PaymentStatus.PAID;
}
//如果不是已支付,继续去查询alipay的接口
System.out.println(“%% % % 查询alipay的接口” );
AlipayTradeQueryRequest alipayTradeQueryRequest=new AlipayTradeQueryRequest();
alipayTradeQueryRequest.setBizContent(“{\”out_trade_no\”:\””+paymentInfo.getOutTradeNo()+“\”}”);
AlipayTradeQueryResponse response=null;
try {
response = alipayClient.execute(alipayTradeQueryRequest);
} catch (AlipayApiException e) {
e.printStackTrace();
}
if(response.isSuccess()){
String tradeStatus = response.getTradeStatus();
if (“TRADE_SUCCESS”.equals(tradeStatus)){
System.out.println(“支付完成 ====================== ” );
//如果结果是支付成功 ,则更新支付状态
PaymentInfo paymentInfo4Upt=new PaymentInfo();
paymentInfo4Upt.setPaymentStatus(PaymentStatus.PAID);
paymentInfo4Upt.setCallbackTime(new Date());
paymentInfo4Upt.setCallbackContent(response.getBody());
paymentInfo4Upt.setId(paymentInfo.getId());
paymentInfoMapper.updateByPrimaryKeySelective(paymentInfo4Upt);
// 然后发送通知给订单
sendPaymentResult(paymentInfo,“success”);
return PaymentStatus.PAID;
}else{
System.out.println(“支付尚未完成 ?????????? ” );
return PaymentStatus.UNPAID;
}
}else{
System.out.println(“支付尚未完成 ?????????? ” );
return PaymentStatus.UNPAID;
}
}
|
上一篇:
Vue模板语法_前端培训
下一篇:
事务的传播行为_java培训