一种订单类型
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.hn.pay.alipay.AliPayUtils;
/**
* 支付回调
* @author admin
*/
@Slf4j
@RestController
@RequestMapping("pay")
public class PayController {
/**
* 订单类型就一种
*/
@RequestMapping("callback")
public String servePayCallback(HttpServletRequest request) {
// 将异步通知的参数转化为Map
Map<String, String> map = AliPayUtils.toMap(request);
// 获取商户订单号
String outTradeNo = map.get("out_trade_no");
// 校验签名
boolean signCheck = AliPayUtils.signCheck(map);
if(!signCheck){
log.error("订单验签失败,outTradeNo:{}", outTradeNo);
return "success";
}
// 校验支付状态
String tradeStatus = map.get("trade_status");
if(TradeStatus.TRADE_SUCCESS.equals(tradeStatus)){
// 通过 outTradeNo 查询系统订单数据
// 判断订单状态是否已更新
}else {
// 交易失败处理
}
return "success";
}
}Copy to clipboardErrorCopied
多种订单类型
注意 : 生成支付宝订单的时候,需要在回调地址后面加一个订单类型
// ... 省略
// notifyUrl + orderType
String notifyUrl = "http://hntool.vip/pay/callback/"
Integer orderType = 1;
AliPayUtils.appPay(model,notifyUrl + orderType);Copy to clipboardErrorCopied
回调代码如下
/**
* 支付回调
* @author admin
*/
@Slf4j
@RestController
@RequestMapping("pay")
public class PayController {
/**
* 多种订单类型,比如分商品订单、会员订单
*/
@RequestMapping("callback/{orderType}")
public String servePayCallback(@PathVariable Integer orderType,HttpServletRequest request) {
// 将异步通知的参数转化为Map
Map<String, String> map = AliPayUtils.toMap(request);
// 获取商户订单号
String outTradeNo = map.get("out_trade_no");
// 校验签名
boolean signCheck = AliPayUtils.signCheck(map);
if(!signCheck){
log.error("订单验签失败,outTradeNo:{}", outTradeNo);
return "success";
}
// 校验支付状态
String tradeStatus = map.get("trade_status");
if(TradeStatus.TRADE_SUCCESS.equals(tradeStatus)){
// 通过 outTradeNo 查询系统订单数据
// 判断订单状态是否已更新
}else {
// 交易失败处理
}
return "success";
}
}Copy to clipboardErrorCopied
异步通知参数
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
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 | 交易结束,不可退款。 |