From 1bb457b045b4b0f22f2ef2f95abb79c4d590b194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Fri, 24 Feb 2023 12:59:47 +0800 Subject: [PATCH] - update wechatpayopen --- ...ner.transactions.native.post.notify.gin.go | 70 +++++++++++++++++++ ...nsactions.out-trade-no.out_trade_no.get.go | 1 - ...refund.domestic.refunds.post.notify.gin.go | 60 ++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 service/wechatpayopen/pay.partner.transactions.native.post.notify.gin.go create mode 100644 service/wechatpayopen/refund.domestic.refunds.post.notify.gin.go diff --git a/service/wechatpayopen/pay.partner.transactions.native.post.notify.gin.go b/service/wechatpayopen/pay.partner.transactions.native.post.notify.gin.go new file mode 100644 index 00000000..dbd69332 --- /dev/null +++ b/service/wechatpayopen/pay.partner.transactions.native.post.notify.gin.go @@ -0,0 +1,70 @@ +package wechatpayopen + +import ( + "context" + "encoding/json" + "github.com/gin-gonic/gin" + "time" +) + +// PayPartnerTransactionsNativePostNotifyGinRequest 支付通知API - 请求参数 +type PayPartnerTransactionsNativePostNotifyGinRequest struct { + Id string `form:"id" json:"status" xml:"id" uri:"id" binding:"required"` // 通知ID + CreateTime string `form:"create_time" json:"create_time" xml:"create_time" uri:"create_time" binding:"required"` // 通知创建时间 + EventType string `form:"event_type" json:"event_type" xml:"event_type" uri:"event_type" binding:"required"` // 通知类型 + ResourceType string `form:"resource_type" json:"resource_type" xml:"resource_type" uri:"resource_type" binding:"required"` // 通知数据类型 + Resource struct { + Algorithm string `form:"algorithm" json:"algorithm" xml:"algorithm" uri:"algorithm" binding:"required"` // 加密算法类型 + Ciphertext string `form:"ciphertext" json:"ciphertext" xml:"ciphertext" uri:"ciphertext" binding:"required"` // 数据密文 + AssociatedData string `form:"associated_data" json:"associated_data" xml:"associated_data" uri:"associated_data" binding:"omitempty"` // 附加数据 + OriginalType string `form:"original_type" json:"original_type" xml:"original_type" uri:"original_type" binding:"required"` // 原始类型 + Nonce string `form:"nonce" json:"nonce" xml:"nonce" uri:"nonce" binding:"required"` // 随机串 + } `form:"resource" json:"resource" xml:"resource" uri:"resource" binding:"required"` // 通知数据 + Summary string `form:"summary" json:"summary" xml:"summary" uri:"summary" binding:"required"` // 回调摘要 +} + +// PayPartnerTransactionsNativePostNotifyGin 支付通知API +// https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter4_4_5.shtml +func (c *Client) PayPartnerTransactionsNativePostNotifyGin(ctx context.Context, ginCtx *gin.Context) (validateJson PayPartnerTransactionsNativePostNotifyGinRequest, response PayPartnerTransactionsNativePostNotifyGinResponse, gcm []byte, err error) { + + // 解析 + err = ginCtx.ShouldBind(&validateJson) + + gcm, err = c.decryptGCM(c.GetApiV3(), validateJson.Resource.Nonce, validateJson.Resource.Ciphertext, validateJson.Resource.AssociatedData) + if err != nil { + return validateJson, response, gcm, err + } + + err = json.Unmarshal(gcm, &response) + + return validateJson, response, gcm, err +} + +// PayPartnerTransactionsNativePostNotifyGinResponse 支付通知API - 解密后数据 +type PayPartnerTransactionsNativePostNotifyGinResponse struct { + SpAppid string `json:"sp_appid"` // 服务商应用ID + SpMchid string `json:"sp_mchid"` // 服务商户号 + SubAppid string `json:"sub_appid"` // 子商户应用ID + SubMchid string `json:"sub_mchid"` // 子商户号 + OutTradeNo string `json:"out_trade_no"` // 商户订单号 + TradeStateDesc string `json:"trade_state_desc"` // 交易状态描述 + TradeType string `json:"trade_type"` // 交易类型 + Attach string `json:"attach"` // 附加数据 + TransactionId string `json:"transaction_id"` // 微信支付订单号 + TradeState string `json:"trade_state"` // 交易状态 + BankType string `json:"bank_type"` // 付款银行 + SuccessTime time.Time `json:"success_time"` // 支付完成时间 + Amount struct { + Total int `json:"total"` // 总金额 + PayerTotal int `json:"payer_total"` // 用户支付金额 + Currency string `json:"currency"` // 货币类型 + PayerCurrency string `json:"payer_currency"` // 用户支付币种 + } `json:"amount"` // 订单金额 + Payer struct { + SpOpenid string `json:"sp_openid"` // 用户服务标识 + SubOpenid string `json:"sub_openid"` // 用户子标识 + } `json:"payer"` // 支付者 + SceneInfo struct { + DeviceId string `json:"device_id"` // 商户端设备号 + } `json:"scene_info"` // 场景信息 +} diff --git a/service/wechatpayopen/pay.partner.transactions.out-trade-no.out_trade_no.get.go b/service/wechatpayopen/pay.partner.transactions.out-trade-no.out_trade_no.get.go index 288cd353..c5bf1fa3 100644 --- a/service/wechatpayopen/pay.partner.transactions.out-trade-no.out_trade_no.get.go +++ b/service/wechatpayopen/pay.partner.transactions.out-trade-no.out_trade_no.get.go @@ -34,7 +34,6 @@ type PayPartnerOutTradeNoOutTradeNoGetResponse struct { SceneInfo struct { DeviceId string `json:"device_id"` // 商户端设备号 } `json:"scene_info"` // 场景信息 - PromotionDetail []interface{} `json:"promotion_detail"` // 优惠功能 } type PayPartnerOutTradeNoOutTradeNoGetResult struct { diff --git a/service/wechatpayopen/refund.domestic.refunds.post.notify.gin.go b/service/wechatpayopen/refund.domestic.refunds.post.notify.gin.go new file mode 100644 index 00000000..00f51f32 --- /dev/null +++ b/service/wechatpayopen/refund.domestic.refunds.post.notify.gin.go @@ -0,0 +1,60 @@ +package wechatpayopen + +import ( + "context" + "encoding/json" + "github.com/gin-gonic/gin" + "time" +) + +// RefundDomesticRefundsPostNotifyGinRequest 退款结果通知API - 请求参数 +type RefundDomesticRefundsPostNotifyGinRequest struct { + Id string `form:"id" json:"status" xml:"id" uri:"id" binding:"required"` // 通知ID + CreateTime string `form:"create_time" json:"create_time" xml:"create_time" uri:"create_time" binding:"required"` // 通知创建时间 + EventType string `form:"event_type" json:"event_type" xml:"event_type" uri:"event_type" binding:"required"` // 通知类型 + ResourceType string `form:"resource_type" json:"resource_type" xml:"resource_type" uri:"resource_type" binding:"required"` // 通知数据类型 + Resource struct { + Algorithm string `form:"algorithm" json:"algorithm" xml:"algorithm" uri:"algorithm" binding:"required"` // 加密算法类型 + Ciphertext string `form:"ciphertext" json:"ciphertext" xml:"ciphertext" uri:"ciphertext" binding:"required"` // 数据密文 + AssociatedData string `form:"associated_data" json:"associated_data" xml:"associated_data" uri:"associated_data" binding:"omitempty"` // 附加数据 + OriginalType string `form:"original_type" json:"original_type" xml:"original_type" uri:"original_type" binding:"required"` // 原始类型 + Nonce string `form:"nonce" json:"nonce" xml:"nonce" uri:"nonce" binding:"required"` // 随机串 + } `form:"resource" json:"resource" xml:"resource" uri:"resource" binding:"required"` // 通知数据 + Summary string `form:"summary" json:"summary" xml:"summary" uri:"summary" binding:"required"` // 回调摘要 +} + +// RefundDomesticRefundsPostNotifyGin 退款结果通知API +// https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter4_4_11.shtml +func (c *Client) RefundDomesticRefundsPostNotifyGin(ctx context.Context, ginCtx *gin.Context) (validateJson RefundDomesticRefundsPostNotifyGinRequest, response RefundDomesticRefundsPostNotifyGinResponse, gcm []byte, err error) { + + // 解析 + err = ginCtx.ShouldBind(&validateJson) + + gcm, err = c.decryptGCM(c.GetApiV3(), validateJson.Resource.Nonce, validateJson.Resource.Ciphertext, validateJson.Resource.AssociatedData) + if err != nil { + return validateJson, response, gcm, err + } + + err = json.Unmarshal(gcm, &response) + + return validateJson, response, gcm, err +} + +// RefundDomesticRefundsPostNotifyGinResponse 退款结果通知API - 解密后数据 +type RefundDomesticRefundsPostNotifyGinResponse struct { + SpMchid string `json:"sp_mchid"` // 服务商户号 + SubMchid string `json:"sub_mchid"` // 子商户号 + TransactionId string `json:"transaction_id"` // 商户订单号 + OutTradeNo string `json:"out_trade_no"` // 微信支付订单号 + RefundId string `json:"refund_id"` // 商户退款单号 + OutRefundNo string `json:"out_refund_no"` // 微信支付退款单号 + RefundStatus string `json:"refund_status"` // 退款状态 + SuccessTime time.Time `json:"success_time"` // 退款成功时间 + UserReceivedAccount string `json:"user_received_account"` // 退款入账账户 + Amount struct { + Total int `json:"total"` // 订单金额 + Refund int `json:"refund"` // 退款金额 + PayerTotal int `json:"payer_total"` // 用户支付金额 + PayerRefund int `json:"payer_refund"` // 用户退款金额 + } `json:"amount"` // 金额信息 +}