微信支付V3版增加接口

master
李光春 3 years ago
parent ca2738d9d7
commit 0c264d5010

@ -1,4 +1,4 @@
## v1.0.24 / 2021-08-19
## v1.0.25 / 2021-08-19
- 微信支付V3版增加接口

@ -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
```

@ -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)

@ -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
}

@ -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

@ -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
}

@ -0,0 +1 @@
package wechatpayapiv3
Loading…
Cancel
Save