From 0c264d50107e355e607306baaa9937384645ab8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=85=89=E6=98=A5?= Date: Thu, 19 Aug 2021 16:41:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98V3=E7=89=88?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 2 +- README.md | 2 +- service/wechatpayapiv3/app.go | 19 ++--- service/wechatpayapiv3/pay_transactions_id.go | 69 +++++++++++++++++++ .../wechatpayapiv3/pay_transactions_jsapi.go | 2 +- .../pay_transactions_out-trade-no.go | 69 +++++++++++++++++++ service/wechatpayapiv3/validate.go | 1 + 7 files changed, 153 insertions(+), 11 deletions(-) create mode 100644 service/wechatpayapiv3/pay_transactions_id.go create mode 100644 service/wechatpayapiv3/pay_transactions_out-trade-no.go create mode 100644 service/wechatpayapiv3/validate.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bf41486..860373b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## v1.0.24 / 2021-08-19 +## v1.0.25 / 2021-08-19 - 微信支付V3版增加接口 diff --git a/README.md b/README.md index d0290107..d491d62e 100644 --- a/README.md +++ b/README.md @@ -11,5 +11,5 @@ ## Install 安装 ```Importing -go get -v -u gitee.com/dtapps/go-library@v1.0.24 +go get -v -u gitee.com/dtapps/go-library@v1.0.25 ``` diff --git a/service/wechatpayapiv3/app.go b/service/wechatpayapiv3/app.go index ffd76bc2..d7a443cc 100644 --- a/service/wechatpayapiv3/app.go +++ b/service/wechatpayapiv3/app.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "fmt" + "gitee.com/dtapps/go-library/utils/request" "io/ioutil" "net/http" ) @@ -30,27 +31,29 @@ type ErrResp struct { } `json:"detail"` } -func (app *App) request(url string, params map[string]interface{}) (resp []byte, result ErrResp, err error) { +func (app *App) request(url string, params map[string]interface{}, method string) (resp []byte, result ErrResp, err error) { // common params - params["appid"] = app.AppId - params["mchid"] = app.MchId + if method == "POST" { + params["appid"] = app.AppId + params["mchid"] = app.MchId + } canonicalURL := fmt.Sprintf("%s/%s", WechatPayAPIServer, url) - method := "POST" - authorization, _ := app.authorization(method, params, canonicalURL) - + authorization, err := app.authorization(method, params, canonicalURL) marshal, _ := json.Marshal(params) var req *http.Request req, err = http.NewRequest(method, canonicalURL, bytes.NewReader(marshal)) if err != nil { - return + return nil, result, err } + req.Header.Add("Authorization", "WECHATPAY2-SHA256-RSA2048 "+authorization) + req.Header.Add("User-Agent", request.GetUserAgent()) req.Header.Add("Content-Type", "application/json") req.Header.Add("Accept", "application/json") req.Header.Add("Accept-Language", "zh-CN") - req.Header.Add("Authorization", "WECHATPAY2-SHA256-RSA2048 "+authorization) + httpClient := &http.Client{} var response *http.Response response, err = httpClient.Do(req) diff --git a/service/wechatpayapiv3/pay_transactions_id.go b/service/wechatpayapiv3/pay_transactions_id.go new file mode 100644 index 00000000..60e08a34 --- /dev/null +++ b/service/wechatpayapiv3/pay_transactions_id.go @@ -0,0 +1,69 @@ +package wechatpayapiv3 + +import ( + "encoding/json" + "fmt" +) + +type PayTransactionsId struct { + TransactionId string `json:"transaction_id"` +} + +// PayTransactionsIdResult 返回参数 +type PayTransactionsIdResult struct { + Appid string `json:"appid"` + Mchid string `json:"mchid"` + OutTradeNo string `json:"out_trade_no"` + TransactionId string `json:"transaction_id,omitempty"` + TradeType string `json:"trade_type,omitempty"` + TradeState string `json:"trade_state"` + TradeStateDesc string `json:"trade_state_desc"` + BankType string `json:"bank_type,omitempty"` + Attach string `json:"attach,omitempty"` + SuccessTime string `json:"success_time,omitempty"` + Payer struct { + Openid string `json:"openid"` + } `json:"payer"` + Amount struct { + Total int `json:"total,omitempty"` + PayerTotal int `json:"payer_total,omitempty"` + Currency string `json:"currency,omitempty"` + PayerCurrency string `json:"payer_currency,omitempty"` + } `json:"amount,omitempty"` + SceneInfo struct { + DeviceId string `json:"device_id,omitempty"` + } + PromotionDetail []struct { + CouponId string `json:"coupon_id"` + Name string `json:"name,omitempty"` + Scope string `json:"scope,omitempty"` + Type string `json:"type,omitempty"` + Amount int `json:"amount"` + StockId string `json:"stock_id,omitempty"` + WechatpayContribute int `json:"wechatpay_contribute,omitempty"` + MerchantContribute int `json:"merchant_contribute,omitempty"` + OtherContribute int `json:"other_contribute,omitempty"` + Currency string `json:"currency,omitempty"` + GoodsDetail []struct { + GoodsId string `json:"goods_id"` + Quantity int `json:"quantity"` + UnitPrice int `json:"unit_price"` + DiscountAmount int `json:"discount_amount"` + GoodsRemark string `json:"goods_remark,omitempty"` + } `json:"goods_detail"` + } +} + +// PayTransactionsId 微信支付订单号查询 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_2.shtml +func (app *App) PayTransactionsId(param PayTransactionsId) (resp PayTransactionsIdResult, result ErrResp, err error) { + + body, result, err := app.request(fmt.Sprintf("pay/transactions/id/%s?mchid=%s", param.TransactionId, app.MchId), map[string]interface{}{}, "GET") + + if err != nil { + return + } + if err = json.Unmarshal(body, &resp); err != nil { + return + } + return +} diff --git a/service/wechatpayapiv3/pay_transactions_jsapi.go b/service/wechatpayapiv3/pay_transactions_jsapi.go index 49b24708..f54f927e 100644 --- a/service/wechatpayapiv3/pay_transactions_jsapi.go +++ b/service/wechatpayapiv3/pay_transactions_jsapi.go @@ -83,7 +83,7 @@ func (app *App) PayTransactionsJsapi(param PayTransactionsJsapi) (resp PayTransa params[k] = v } - body, result, err := app.request("pay/transactions/jsapi", params) + body, result, err := app.request("pay/transactions/jsapi", params, "POST") if err != nil { return diff --git a/service/wechatpayapiv3/pay_transactions_out-trade-no.go b/service/wechatpayapiv3/pay_transactions_out-trade-no.go new file mode 100644 index 00000000..34b3cce1 --- /dev/null +++ b/service/wechatpayapiv3/pay_transactions_out-trade-no.go @@ -0,0 +1,69 @@ +package wechatpayapiv3 + +import ( + "encoding/json" + "fmt" +) + +type PayTransactionsOutTradeNo struct { + OutTradeNo string `json:"out_trade_no"` +} + +// PayTransactionsOutTradeNoResult 返回参数 +type PayTransactionsOutTradeNoResult struct { + Appid string `json:"appid"` + Mchid string `json:"mchid"` + OutTradeNo string `json:"out_trade_no"` + TransactionId string `json:"transaction_id,omitempty"` + TradeType string `json:"trade_type,omitempty"` + TradeState string `json:"trade_state"` + TradeStateDesc string `json:"trade_state_desc"` + BankType string `json:"bank_type,omitempty"` + Attach string `json:"attach,omitempty"` + SuccessTime string `json:"success_time,omitempty"` + Payer struct { + Openid string `json:"openid"` + } `json:"payer"` + Amount struct { + Total int `json:"total,omitempty"` + PayerTotal int `json:"payer_total,omitempty"` + Currency string `json:"currency,omitempty"` + PayerCurrency string `json:"payer_currency,omitempty"` + } `json:"amount,omitempty"` + SceneInfo struct { + DeviceId string `json:"device_id,omitempty"` + } + PromotionDetail []struct { + CouponId string `json:"coupon_id"` + Name string `json:"name,omitempty"` + Scope string `json:"scope,omitempty"` + Type string `json:"type,omitempty"` + Amount int `json:"amount"` + StockId string `json:"stock_id,omitempty"` + WechatpayContribute int `json:"wechatpay_contribute,omitempty"` + MerchantContribute int `json:"merchant_contribute,omitempty"` + OtherContribute int `json:"other_contribute,omitempty"` + Currency string `json:"currency,omitempty"` + GoodsDetail []struct { + GoodsId string `json:"goods_id"` + Quantity int `json:"quantity"` + UnitPrice int `json:"unit_price"` + DiscountAmount int `json:"discount_amount"` + GoodsRemark string `json:"goods_remark,omitempty"` + } `json:"goods_detail"` + } +} + +// PayTransactionsOutTradeNo 商户订单号查询 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_2.shtml +func (app *App) PayTransactionsOutTradeNo(param PayTransactionsOutTradeNo) (resp PayTransactionsOutTradeNoResult, result ErrResp, err error) { + + body, result, err := app.request(fmt.Sprintf("pay/transactions/out-trade-no/%s?mchid=%s", param.OutTradeNo, app.MchId), map[string]interface{}{}, "GET") + + if err != nil { + return + } + if err = json.Unmarshal(body, &resp); err != nil { + return + } + return +} diff --git a/service/wechatpayapiv3/validate.go b/service/wechatpayapiv3/validate.go new file mode 100644 index 00000000..4301e007 --- /dev/null +++ b/service/wechatpayapiv3/validate.go @@ -0,0 +1 @@ +package wechatpayapiv3