一种订单类型

  1. import com.alipay.api.domain.AlipayTradeAppPayModel;
  2. import com.hn.pay.alipay.AliPayUtils;
  3. /**
  4. * 支付回调
  5. * @author admin
  6. */
  7. @Slf4j
  8. @RestController
  9. @RequestMapping("pay")
  10. public class PayController {
  11. /**
  12. * 订单类型就一种
  13. */
  14. @RequestMapping("callback")
  15. public String servePayCallback(HttpServletRequest request) {
  16. // 将异步通知的参数转化为Map
  17. Map<String, String> map = AliPayUtils.toMap(request);
  18. // 获取商户订单号
  19. String outTradeNo = map.get("out_trade_no");
  20. // 校验签名
  21. boolean signCheck = AliPayUtils.signCheck(map);
  22. if(!signCheck){
  23. log.error("订单验签失败,outTradeNo:{}", outTradeNo);
  24. return "success";
  25. }
  26. // 校验支付状态
  27. String tradeStatus = map.get("trade_status");
  28. if(TradeStatus.TRADE_SUCCESS.equals(tradeStatus)){
  29. // 通过 outTradeNo 查询系统订单数据
  30. // 判断订单状态是否已更新
  31. }else {
  32. // 交易失败处理
  33. }
  34. return "success";
  35. }
  36. }Copy to clipboardErrorCopied

多种订单类型

注意 : 生成支付宝订单的时候,需要在回调地址后面加一个订单类型

  1. // ... 省略
  2. // notifyUrl + orderType
  3. String notifyUrl = "http://hntool.vip/pay/callback/"
  4. Integer orderType = 1;
  5. AliPayUtils.appPay(model,notifyUrl + orderType);Copy to clipboardErrorCopied

回调代码如下

  1. /**
  2. * 支付回调
  3. * @author admin
  4. */
  5. @Slf4j
  6. @RestController
  7. @RequestMapping("pay")
  8. public class PayController {
  9. /**
  10. * 多种订单类型,比如分商品订单、会员订单
  11. */
  12. @RequestMapping("callback/{orderType}")
  13. public String servePayCallback(@PathVariable Integer orderType,HttpServletRequest request) {
  14. // 将异步通知的参数转化为Map
  15. Map<String, String> map = AliPayUtils.toMap(request);
  16. // 获取商户订单号
  17. String outTradeNo = map.get("out_trade_no");
  18. // 校验签名
  19. boolean signCheck = AliPayUtils.signCheck(map);
  20. if(!signCheck){
  21. log.error("订单验签失败,outTradeNo:{}", outTradeNo);
  22. return "success";
  23. }
  24. // 校验支付状态
  25. String tradeStatus = map.get("trade_status");
  26. if(TradeStatus.TRADE_SUCCESS.equals(tradeStatus)){
  27. // 通过 outTradeNo 查询系统订单数据
  28. // 判断订单状态是否已更新
  29. }else {
  30. // 交易失败处理
  31. }
  32. return "success";
  33. }
  34. }Copy to clipboardErrorCopied

异步通知参数

官方文档: https://opendocs.alipay.com/open/204/105301/

参数 类型 必填 描述
notify_time Date 通知的发送时间。格式为 yyyy-MM-dd HH:mm:ss示例值2015-14-27 15:45:58
notify_type String(64) 通知的类型。示例值:trade_status_sync
notify_id String(128) 通知校验 ID。示例值:ac05099524730693a8b330c5ecf72da9786
app_id String(32) 支付宝分配给开发者的应用 Id。示例值:2014072300007148
charset String(10) 编码格式。如 utf-8、gbk、gb2312 等。示例值:utf-8
version String(3) 调用的接口版本,固定为:1.0。示例值:1.0
sign_type String(10) 签名类型。商户生成签名字符串所使用的签名算法类型,目前支 RSA2 和 RSA,推荐使用 RSA2。示例值:RSA2
sign String(256) 签名。详情请参考 异步返回结果的验签示例值:601510b7970e52cc63db0f44997cf70e
trade_no String(64) 支付宝交易号。示例值:2013112011001004330000121536
out_trade_no String(64) 商户订单号。原支付请求的商户订单号。示例值:6823789339978248
out_biz_no String(64) 商户业务号。商户业务 ID,主要是退款通知中返回退款申请的流水号。示例值:HZRF001
buyer_id String(16) 买家支付宝用户号。买家支付宝账号对应的支付宝唯一用户号。以 2088 开头的纯 16 位数字。示例值:2088102122524333
buyer_logon_id String(100) 买家支付宝账号。示例值:15901825620
seller_id String(30) 卖家支付宝用户号。示例值:2088101106499364
seller_email String(100) 卖家支付宝账号。示例值:zhuzhanghu@alitest.com
trade_status String(32) 交易状态。交易目前所处的状态,见下张表 交易状态说明示例值:TRADE_CLOSED
total_amount Number(9,2) 订单金额。本次交易支付的订单金额,单位为人民币(元)。示例值:20
receipt_amount Number(9,2) 实收金额。商家在交易中实际收到的款项,单位为人民币(元)。示例值:15
invoice_amount Number(9,2) 开票金额。用户在交易中支付的可开发票的金额。示例值:10.00
buyer_pay_amount Number(9,2) 付款金额。用户在交易中支付的金额。示例值:13.88
point_amount Number(9,2) 集分宝金额。使用集分宝支付的金额。示例值:12.00
refund_fee Number(9,2) 总退款金额。退款通知中,返回总退款金额,单位为元,支持两位小数。示例值:2.58
subject String(256) 订单标题。商品的标题/交易标题/订单标题/订单关键字等,是请求时对应的参数,原样通知回来。示例值:当面付交易
body String(400) 商品描述。该订单的备注、描述、明细等。对应请求时的 body 参数,原样通知回来。示例值:当面付交易内容
gmt_create Date 交易创建时间。该笔交易创建的时间。格式为 yyyy-MM-dd HH:mm:ss示例值2015-14-27 15:45:57
gmt_payment Date 交易付款时间。该笔交易的买家付款时间。格式为 yyyy-MM-dd HH:mm:ss示例值2015-14-27 15:45:57
gmt_refund Date 交易退款时间。该笔交易的退款时间。格式为 yyyy-MM-dd HH:mm:ss示例值2015-14-27 15:45:57.320
gmt_close Date 交易结束时间。该笔交易结束时间。格式为 yyyy-MM-dd HH:mm:ss。。示例值2015-14-27 15:45:57
fund_bill_list String(512) 支付金额信息。支付成功的各个渠道金额信息,详见下表 资金明细信息说明示例值:[{“amount”:“15.00”,“fundChannel”:“ALIPAYACCOUNT”}]
passback_params String(512) 回传参数。公共回传参数,如果请求时传递了该参数,则返回给商户时会在异步通知时将该参数原样返回。本参数必须进行 UrlEncode 之后才可以发送给支付宝。示例值:merchantBizType%3d3C%26merchantBizNo%3d2016010101111
voucher_detail_list String 优惠券信息。本交易支付时所使用的所有优惠券信息,详见下表 优惠券信息说明示例值:[{“amount”:“0.20”,“merchantContribute”:“0.00”,“name”:“一键创建券模板的券名称”,“otherContribute”:“0.20”,“type”:“ALIPAY_DISCOUNT_VOUCHER”,“memo”:“学生卡8折优惠”}]

交易状态说明

枚举名称 枚举说明
WAIT_BUYER_PAY 交易创建,等待买家付款。
TRADE_CLOSED 未付款交易超时关闭,或支付完成后全额退款。
TRADE_SUCCESS 交易支付成功。
TRADE_FINISHED 交易结束,不可退款。