From d7df0194b00445bfe2ed960ee4429ac24bc5a18c Mon Sep 17 00:00:00 2001 From: Jerry <85411418@qq.com> Date: Fri, 19 Apr 2024 11:33:24 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E7=BB=9F=E4=B8=80=E6=94=B6=E5=8D=95?= =?UTF-8?q?=E4=BA=A4=E6=98=93=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alipay/model_payment.go | 22 ++++++++++++++++++++-- alipay/payment_api.go | 23 +++++++++++++++++++++++ doc/alipay.md | 2 +- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/alipay/model_payment.go b/alipay/model_payment.go index 96db09dc..07cd64d6 100644 --- a/alipay/model_payment.go +++ b/alipay/model_payment.go @@ -22,6 +22,13 @@ type TradeCreateResponse struct { Sign string `json:"sign"` } +type TradeOrderPayResponse struct { + Response *TradeOrderPay `json:"alipay_trade_order_pay_response"` + AlipayCertSn string `json:"alipay_cert_sn,omitempty"` + SignData string `json:"-"` + Sign string `json:"sign"` +} + type TradeQueryResponse struct { Response *TradeQuery `json:"alipay_trade_query_response"` AlipayCertSn string `json:"alipay_cert_sn,omitempty"` @@ -155,8 +162,19 @@ type TradePrecreate struct { type TradeCreate struct { ErrorResponse - TradeNo string `json:"trade_no,omitempty"` - OutTradeNo string `json:"out_trade_no,omitempty"` + TradeNo string `json:"trade_no"` + OutTradeNo string `json:"out_trade_no"` +} + +type TradeOrderPay struct { + ErrorResponse + TradeNo string `json:"trade_no"` + OutTradeNo string `json:"out_trade_no"` + FulfillmentAmount string `json:"fulfillment_amount"` + OutRequestNo string `json:"out_request_no"` + TotalAmount string `json:"total_amount"` + GmtPayment string `json:"gmt_payment"` + AsyncPaymentMode string `json:"async_payment_mode"` } type TradeQuery struct { diff --git a/alipay/payment_api.go b/alipay/payment_api.go index dc919082..be74e59b 100644 --- a/alipay/payment_api.go +++ b/alipay/payment_api.go @@ -129,6 +129,29 @@ func (a *Client) TradeCreate(ctx context.Context, bm gopay.BodyMap) (aliRsp *Tra return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) } +// alipay.trade.order.pay(统一收单交易订单支付接口) +// 文档地址:https://opendocs.alipay.com/open/03vtew +func (a *Client) TradeOrderPay(ctx context.Context, bm gopay.BodyMap) (aliRsp *TradeOrderPayResponse, err error) { + err = bm.CheckEmptyError("trade_no") + if err != nil { + return nil, err + } + var bs []byte + if bs, err = a.doAliPay(ctx, bm, "alipay.trade.order.pay"); err != nil { + return nil, err + } + aliRsp = new(TradeOrderPayResponse) + if err = json.Unmarshal(bs, aliRsp); err != nil || aliRsp.Response == nil { + return nil, fmt.Errorf("[%w], bytes: %s", gopay.UnmarshalErr, string(bs)) + } + if err = bizErrCheck(aliRsp.Response.ErrorResponse); err != nil { + return aliRsp, err + } + signData, signDataErr := a.getSignData(bs, aliRsp.AlipayCertSn) + aliRsp.SignData = signData + return aliRsp, a.autoVerifySignByCert(aliRsp.Sign, signData, signDataErr) +} + // alipay.trade.query(统一收单线下交易查询) // 文档地址:https://opendocs.alipay.com/open/02e7gm func (a *Client) TradeQuery(ctx context.Context, bm gopay.BodyMap) (aliRsp *TradeQueryResponse, err error) { diff --git a/doc/alipay.md b/doc/alipay.md index 44770d97..d518986d 100644 --- a/doc/alipay.md +++ b/doc/alipay.md @@ -246,7 +246,7 @@ xlog.Infof("%+v", phone) * 资金授权冻结接口:`client.FundAuthOrderFreeze()` * 交易 * 统一收单交易创建接口:`client.TradeCreate()` - * 统一收单交易订单支付接口:TODO:https://opendocs.alipay.com/open/03vtew + * 统一收单交易订单支付接口:`client.TradeOrderPay()` * 统一收单线下交易查询: `client.TradeQuery()` * 统一收单交易退款接口: `client.TradeRefund()` * 统一收单交易退款查询: `client.TradeFastPayRefundQuery()`