You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-library/service/wechatpayapiv3/app.go

60 lines
1.7 KiB

package wechatpayapiv3
import (
"encoding/json"
"errors"
"go.dtapp.net/library/utils/goheader"
"go.dtapp.net/library/utils/gohttp"
"go.dtapp.net/library/utils/gomongo"
"net/http"
)
// App 微信支付服务
type App struct {
AppId string // 小程序或者公众号唯一凭证
AppSecret string // 小程序或者公众号唯一凭证密钥
MchId string // 微信支付的商户id
AesKey string // 私钥
ApiV3 string // API v3密钥
PrivateSerialNo string // 私钥证书号
MchPrivateKey string // 商户私有证书内容 apiclient_key.pem
Mongo gomongo.App // 日志数据库
}
func (app *App) request(url string, params map[string]interface{}, method string, commonParams bool) (resp gohttp.Response, err error) {
// 公共参数
if method == http.MethodPost {
if commonParams == true {
params["appid"] = app.AppId
params["mchid"] = app.MchId
}
}
authorization, err := app.authorization(method, params, url)
if err != nil {
return gohttp.Response{}, err
}
headers := goheader.NewHeaders()
headers.Set("Authorization", "WECHATPAY2-SHA256-RSA2048 "+authorization)
headers.Set("Accept", "application/json")
headers.Set("Accept-Language", "zh-CN")
switch method {
case http.MethodGet:
// 请求
getJson, err := gohttp.GetJsonHeader(url, params, headers)
// 日志
go app.mongoLog(url, params, method, getJson)
return getJson, err
case http.MethodPost:
// 请求参数
paramsStr, err := json.Marshal(params)
postJson, err := gohttp.PostJsonHeader(url, paramsStr, headers)
// 日志
go app.mongoLog(url, params, method, postJson)
return postJson, err
default:
return resp, errors.New("请求类型不支持")
}
}