- update wechatpayapiv3

master
李光春 2 years ago
parent 81250f625a
commit 6511308ae7

@ -1,95 +0,0 @@
package wechatpayapiv3
import (
"go.dtapp.net/library/utils/golog"
"go.dtapp.net/library/utils/gomongo"
"go.dtapp.net/library/utils/gorequest"
"gorm.io/gorm"
"net/http"
)
// App 微信支付直连商户
type App struct {
appId string // 小程序或者公众号唯一凭证
appSecret string // 小程序或者公众号唯一凭证密钥
mchId string // 微信支付的商户id
aesKey string // 私钥
apiV3 string // API v3密钥
mchSslSerialNo string // pem 证书号
mchSslKey string // pem key 内容
mongo *gomongo.Client // 日志数据库
pgsql *gorm.DB // pgsql数据库
client *gorequest.App // 请求客户端
log *golog.Api // 日志服务
logTableName string // 日志表名
logStatus bool // 日志状态
}
// NewApp 实例化
func NewApp(appId string, appSecret string, mchId string, aesKey string, apiV3 string, mchSslSerialNo string, mchSslKey string, pgsql *gorm.DB) *App {
app := &App{appId: appId, appSecret: appSecret, mchId: mchId, aesKey: aesKey, apiV3: apiV3, mchSslSerialNo: mchSslSerialNo, mchSslKey: mchSslKey}
app.client = gorequest.NewHttp()
if pgsql != nil {
app.pgsql = pgsql
app.logStatus = true
app.logTableName = "wechatpayapiv3"
app.log = golog.NewApi(&golog.ApiConfig{
Db: pgsql,
TableName: app.logTableName,
})
}
return app
}
func (app *App) request(url string, params map[string]interface{}, method string, commonParams bool) (resp gorequest.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 gorequest.Response{}, err
}
// 创建请求
client := app.client
// 设置请求地址
client.SetUri(url)
// 设置方式
client.SetMethod(method)
// 设置JSON格式
client.SetContentTypeJson()
// 设置参数
client.SetParams(params)
// 设置头部
client.SetHeader("Authorization", "WECHATPAY2-SHA256-RSA2048 "+authorization)
client.SetHeader("Accept", "application/json")
client.SetHeader("Accept-Language", "zh-CN")
if url == "https://api.mch.weixin.qq.com/v3/merchant-service/complaints-v2" {
client.SetHeader("Wechatpay-Serial", app.mchSslSerialNo)
}
// 发起请求
request, err := client.Request()
if err != nil {
return gorequest.Response{}, err
}
// 日志
if app.logStatus == true {
go app.postgresqlLog(request)
}
return request, err
}

@ -0,0 +1,48 @@
package wechatpayapiv3
import (
"go.dtapp.net/library/utils/golog"
"go.dtapp.net/library/utils/gomongo"
"go.dtapp.net/library/utils/gorequest"
"gorm.io/gorm"
)
type ConfigClient struct {
AppId string // 小程序或者公众号唯一凭证
AppSecret string // 小程序或者公众号唯一凭证密钥
MchId string // 微信支付的商户id
AesKey string // 私钥
ApiV3 string // API v3密钥
MchSslSerialNo string // pem 证书号
MchSslKey string // pem key 内容
MongoDb *gomongo.Client // 日志数据库
PgsqlDb *gorm.DB // pgsql数据库
}
// Client 微信支付直连商户
type Client struct {
client *gorequest.App // 请求客户端
log *golog.ApiClient // 日志服务
logStatus bool // 日志状态
config *ConfigClient // 配置
}
func NewClient(config *ConfigClient) (*Client, error) {
var err error
c := &Client{config: config}
c.client = gorequest.NewHttp()
if c.config.PgsqlDb != nil {
c.logStatus = true
c.log, err = golog.NewApiClient(&golog.ConfigApiClient{
Db: c.config.PgsqlDb,
TableName: logTable,
})
if err != nil {
return nil, err
}
}
return c, nil
}

@ -0,0 +1,9 @@
package wechatpayapiv3
const (
apiUrl = "https://api.mch.weixin.qq.com"
)
const (
logTable = "wechatpayapiv3"
)

@ -1,5 +1,17 @@
package wechatpayapiv3
func (app *App) GetAppId() string {
return app.appId
func (c *Client) GetAppId() string {
return c.config.AppId
}
func (c *Client) GetMchId() string {
return c.config.MchId
}
func (c *Client) GetMchSslKey() string {
return c.config.MchSslKey
}
func (c *Client) GetMchSslSerialNo() string {
return c.config.MchSslSerialNo
}

@ -57,22 +57,22 @@ type MerchantServiceComplaintsV2Result struct {
Err error // 错误
}
func NewMerchantServiceComplaintsV2Result(result MerchantServiceComplaintsV2Response, body []byte, http gorequest.Response, err error) *MerchantServiceComplaintsV2Result {
func newMerchantServiceComplaintsV2Result(result MerchantServiceComplaintsV2Response, body []byte, http gorequest.Response, err error) *MerchantServiceComplaintsV2Result {
return &MerchantServiceComplaintsV2Result{Result: result, Body: body, Http: http, Err: err}
}
// MerchantServiceComplaintsV2 查询投诉单列表API
// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter10_2_11.shtml
func (app *App) MerchantServiceComplaintsV2(notMustParams ...Params) *MerchantServiceComplaintsV2Result {
func (c *Client) MerchantServiceComplaintsV2(notMustParams ...gorequest.Params) *MerchantServiceComplaintsV2Result {
// 参数
params := app.NewParamsWith(notMustParams...)
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := app.request("https://api.mch.weixin.qq.com/v3/merchant-service/complaints-v2", params, http.MethodGet, false)
request, err := c.request(apiUrl+"/v3/merchant-service/complaints-v2", params, http.MethodGet, false)
if err != nil {
return NewMerchantServiceComplaintsV2Result(MerchantServiceComplaintsV2Response{}, request.ResponseBody, request, err)
return newMerchantServiceComplaintsV2Result(MerchantServiceComplaintsV2Response{}, request.ResponseBody, request, err)
}
// 定义
var response MerchantServiceComplaintsV2Response
err = json.Unmarshal(request.ResponseBody, &response)
return NewMerchantServiceComplaintsV2Result(response, request.ResponseBody, request, err)
return newMerchantServiceComplaintsV2Result(response, request.ResponseBody, request, err)
}

@ -30,8 +30,8 @@ func (m *mongoZap) TableName() string {
return "wechatpayapiv3"
}
func (app *App) mongoLog(request gorequest.Response) {
_, _ = app.mongo.Model(&mongoZap{}).InsertOne(mongoZap{
func (c *Client) mongoLog(request gorequest.Response) {
_, _ = c.config.MongoDb.Model(&mongoZap{}).InsertOne(mongoZap{
RequestTime: gomongo.BsonTime(request.RequestTime), //【请求】时间
RequestUri: request.RequestUri, //【请求】链接
RequestUrl: gorequest.UriParse(request.RequestUri).Url, //【请求】链接

@ -1,27 +0,0 @@
package wechatpayapiv3
// Params 请求参数
type Params map[string]interface{}
func NewParams() Params {
p := make(Params)
return p
}
func (app *App) NewParamsWith(params ...Params) Params {
p := make(Params)
for _, v := range params {
p.SetParams(v)
}
return p
}
func (p Params) Set(key string, value any) {
p[key] = value
}
func (p Params) SetParams(params Params) {
for key, value := range params {
p[key] = value
}
}

@ -22,26 +22,26 @@ type GetJsApiResult struct {
}
// GetJsApi JSAPI调起支付API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml
func (app *App) GetJsApi(param GetJsApi) (result GetJsApiResult, err error) {
func (c *Client) GetJsApi(param GetJsApi) (result GetJsApiResult, err error) {
// sign params
timeStamp := time.Now().Unix()
nonce := gorandom.Alphanumeric(32)
result.AppId = app.appId
result.AppId = c.GetAppId()
result.TimeStamp = fmt.Sprintf("%v", timeStamp)
result.NonceStr = nonce
result.Package = param.Package
// 签名
message := fmt.Sprintf("%s\n%s\n%s\n%s\n", app.appId, fmt.Sprintf("%v", timeStamp), nonce, param.Package)
message := fmt.Sprintf("%s\n%s\n%s\n%s\n", c.GetAppId(), fmt.Sprintf("%v", timeStamp), nonce, param.Package)
signBytes, err := app.signPKCS1v15(message, []byte(app.mchSslKey))
signBytes, err := c.signPKCS1v15(message, []byte(c.GetMchSslKey()))
if err != nil {
return result, err
}
sign := app.base64EncodeStr(signBytes)
sign := c.base64EncodeStr(signBytes)
result.PaySign = sign
result.SignType = "RSA"
return result, nil

@ -58,19 +58,19 @@ type PayTransactionsIdResult struct {
Err error // 错误
}
func NewPayTransactionsIdResult(result PayTransactionsIdResponse, body []byte, http gorequest.Response, err error) *PayTransactionsIdResult {
func newPayTransactionsIdResult(result PayTransactionsIdResponse, body []byte, http gorequest.Response, err error) *PayTransactionsIdResult {
return &PayTransactionsIdResult{Result: result, Body: body, Http: http, Err: err}
}
// PayTransactionsId 微信支付订单号查询 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_2.shtml
func (app *App) PayTransactionsId(transactionId string) *PayTransactionsIdResult {
func (c *Client) PayTransactionsId(transactionId string) *PayTransactionsIdResult {
// 请求
request, err := app.request(fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/transactions/id/%s?mchid=%s", transactionId, app.mchId), map[string]interface{}{}, http.MethodGet, true)
request, err := c.request(fmt.Sprintf(apiUrl+"/v3/pay/transactions/id/%s?mchid=%s", transactionId, c.GetMchId()), map[string]interface{}{}, http.MethodGet, true)
if err != nil {
return NewPayTransactionsIdResult(PayTransactionsIdResponse{}, request.ResponseBody, request, err)
return newPayTransactionsIdResult(PayTransactionsIdResponse{}, request.ResponseBody, request, err)
}
// 定义
var response PayTransactionsIdResponse
err = json.Unmarshal(request.ResponseBody, &response)
return NewPayTransactionsIdResult(response, request.ResponseBody, request, err)
return newPayTransactionsIdResult(response, request.ResponseBody, request, err)
}

@ -17,22 +17,22 @@ type PayTransactionsJsapiResult struct {
Err error // 错误
}
func NewPayTransactionsJsapiResult(result PayTransactionsJsapiResponse, body []byte, http gorequest.Response, err error) *PayTransactionsJsapiResult {
func newPayTransactionsJsapiResult(result PayTransactionsJsapiResponse, body []byte, http gorequest.Response, err error) *PayTransactionsJsapiResult {
return &PayTransactionsJsapiResult{Result: result, Body: body, Http: http, Err: err}
}
// PayTransactionsJsapi 小程序 JSAPI下单
// https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
func (app *App) PayTransactionsJsapi(notMustParams ...Params) *PayTransactionsJsapiResult {
func (c *Client) PayTransactionsJsapi(notMustParams ...gorequest.Params) *PayTransactionsJsapiResult {
// 参数
params := app.NewParamsWith(notMustParams...)
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := app.request("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi", params, http.MethodPost, true)
request, err := c.request(apiUrl+"/v3/pay/transactions/jsapi", params, http.MethodPost, true)
if err != nil {
return NewPayTransactionsJsapiResult(PayTransactionsJsapiResponse{}, request.ResponseBody, request, err)
return newPayTransactionsJsapiResult(PayTransactionsJsapiResponse{}, request.ResponseBody, request, err)
}
// 定义
var response PayTransactionsJsapiResponse
err = json.Unmarshal(request.ResponseBody, &response)
return NewPayTransactionsJsapiResult(response, request.ResponseBody, request, err)
return newPayTransactionsJsapiResult(response, request.ResponseBody, request, err)
}

@ -12,16 +12,16 @@ type PayTransactionsOutTradeNoCloseResult struct {
Err error // 错误
}
func NewPayTransactionsOutTradeNoCloseResult(body []byte, http gorequest.Response, err error) *PayTransactionsOutTradeNoCloseResult {
func newPayTransactionsOutTradeNoCloseResult(body []byte, http gorequest.Response, err error) *PayTransactionsOutTradeNoCloseResult {
return &PayTransactionsOutTradeNoCloseResult{Body: body, Http: http, Err: err}
}
// PayTransactionsOutTradeNoClose 关闭订单API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_3.shtml
func (app *App) PayTransactionsOutTradeNoClose(OutTradeNo string) *PayTransactionsOutTradeNoCloseResult {
func (c *Client) PayTransactionsOutTradeNoClose(OutTradeNo string) *PayTransactionsOutTradeNoCloseResult {
// 参数
params := NewParams()
params["mchid"] = app.mchId
params := gorequest.NewParams()
params["mchid"] = c.GetMchId()
// 请求
request, err := app.request(fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/%s/close", OutTradeNo), params, http.MethodPost, false)
return NewPayTransactionsOutTradeNoCloseResult(request.ResponseBody, request, err)
request, err := c.request(fmt.Sprintf(apiUrl+"/v3/pay/transactions/out-trade-no/%s/close", OutTradeNo), params, http.MethodPost, false)
return newPayTransactionsOutTradeNoCloseResult(request.ResponseBody, request, err)
}

@ -58,19 +58,19 @@ type PayTransactionsOutTradeNoResult struct {
Err error // 错误
}
func NewPayTransactionsOutTradeNoResult(result PayTransactionsOutTradeNoResponse, body []byte, http gorequest.Response, err error) *PayTransactionsOutTradeNoResult {
func newPayTransactionsOutTradeNoResult(result PayTransactionsOutTradeNoResponse, body []byte, http gorequest.Response, err error) *PayTransactionsOutTradeNoResult {
return &PayTransactionsOutTradeNoResult{Result: result, Body: body, Http: http, Err: err}
}
// PayTransactionsOutTradeNo 商户订单号查询 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_2.shtml
func (app *App) PayTransactionsOutTradeNo(outTradeNo string) *PayTransactionsOutTradeNoResult {
func (c *Client) PayTransactionsOutTradeNo(outTradeNo string) *PayTransactionsOutTradeNoResult {
// 请求
request, err := app.request(fmt.Sprintf("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/%s?mchid=%s", outTradeNo, app.mchId), map[string]interface{}{}, http.MethodGet, true)
request, err := c.request(fmt.Sprintf(apiUrl+"/v3/pay/transactions/out-trade-no/%s?mchid=%s", outTradeNo, c.GetMchId()), map[string]interface{}{}, http.MethodGet, true)
if err != nil {
return NewPayTransactionsOutTradeNoResult(PayTransactionsOutTradeNoResponse{}, request.ResponseBody, request, err)
return newPayTransactionsOutTradeNoResult(PayTransactionsOutTradeNoResponse{}, request.ResponseBody, request, err)
}
// 定义
var response PayTransactionsOutTradeNoResponse
err = json.Unmarshal(request.ResponseBody, &response)
return NewPayTransactionsOutTradeNoResult(response, request.ResponseBody, request, err)
return newPayTransactionsOutTradeNoResult(response, request.ResponseBody, request, err)
}

@ -8,8 +8,8 @@ import (
)
// 记录日志
func (app *App) postgresqlLog(request gorequest.Response) {
app.log.Record(golog.ApiPostgresqlLog{
func (c *Client) postgresqlLog(request gorequest.Response) {
c.log.Record(golog.ApiPostgresqlLog{
RequestTime: golog.TimeString{Time: request.RequestTime}, //【请求】时间
RequestUri: request.RequestUri, //【请求】链接
RequestUrl: gorequest.UriParse(request.RequestUri).Url, //【请求】链接

@ -55,21 +55,21 @@ type RefundDomesticRefundsResult struct {
Err error // 错误
}
func NewRefundDomesticRefundsResult(result RefundDomesticRefundsResponse, body []byte, http gorequest.Response, err error) *RefundDomesticRefundsResult {
func newRefundDomesticRefundsResult(result RefundDomesticRefundsResponse, body []byte, http gorequest.Response, err error) *RefundDomesticRefundsResult {
return &RefundDomesticRefundsResult{Result: result, Body: body, Http: http, Err: err}
}
// RefundDomesticRefunds 申请退款API https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter6_1_26.shtml
func (app *App) RefundDomesticRefunds(notMustParams ...Params) *RefundDomesticRefundsResult {
func (c *Client) RefundDomesticRefunds(notMustParams ...gorequest.Params) *RefundDomesticRefundsResult {
// 参数
params := app.NewParamsWith(notMustParams...)
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := app.request("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds", params, http.MethodPost, false)
request, err := c.request(apiUrl+"/v3/refund/domestic/refunds", params, http.MethodPost, false)
if err != nil {
return NewRefundDomesticRefundsResult(RefundDomesticRefundsResponse{}, request.ResponseBody, request, err)
return newRefundDomesticRefundsResult(RefundDomesticRefundsResponse{}, request.ResponseBody, request, err)
}
// 定义
var response RefundDomesticRefundsResponse
err = json.Unmarshal(request.ResponseBody, &response)
return NewRefundDomesticRefundsResult(response, request.ResponseBody, request, err)
return newRefundDomesticRefundsResult(response, request.ResponseBody, request, err)
}

@ -56,19 +56,19 @@ type RefundDomesticRefundsOutRefundNoResult struct {
Err error // 错误
}
func NewRefundDomesticRefundsOutRefundNoResult(result RefundDomesticRefundsOutRefundNoResponse, body []byte, http gorequest.Response, err error) *RefundDomesticRefundsOutRefundNoResult {
func newRefundDomesticRefundsOutRefundNoResult(result RefundDomesticRefundsOutRefundNoResponse, body []byte, http gorequest.Response, err error) *RefundDomesticRefundsOutRefundNoResult {
return &RefundDomesticRefundsOutRefundNoResult{Result: result, Body: body, Http: http, Err: err}
}
// RefundDomesticRefundsOutRefundNo 查询单笔退款API https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter4_5_10.shtml
func (app *App) RefundDomesticRefundsOutRefundNo(outRefundNo string) *RefundDomesticRefundsOutRefundNoResult {
func (c *Client) RefundDomesticRefundsOutRefundNo(outRefundNo string) *RefundDomesticRefundsOutRefundNoResult {
// 请求
request, err := app.request(fmt.Sprintf("https://api.mch.weixin.qq.com/v3/refund/domestic/refunds/%s", outRefundNo), map[string]interface{}{}, http.MethodGet, true)
request, err := c.request(fmt.Sprintf(apiUrl+"/v3/refund/domestic/refunds/%s", outRefundNo), map[string]interface{}{}, http.MethodGet, true)
if err != nil {
return NewRefundDomesticRefundsOutRefundNoResult(RefundDomesticRefundsOutRefundNoResponse{}, request.ResponseBody, request, err)
return newRefundDomesticRefundsOutRefundNoResult(RefundDomesticRefundsOutRefundNoResponse{}, request.ResponseBody, request, err)
}
// 定义
var response RefundDomesticRefundsOutRefundNoResponse
err = json.Unmarshal(request.ResponseBody, &response)
return NewRefundDomesticRefundsOutRefundNoResult(response, request.ResponseBody, request, err)
return newRefundDomesticRefundsOutRefundNoResult(response, request.ResponseBody, request, err)
}

@ -0,0 +1,59 @@
package wechatpayapiv3
import (
"go.dtapp.net/library/utils/gorequest"
"net/http"
)
func (c *Client) request(url string, params map[string]interface{}, method string, commonParams bool) (gorequest.Response, error) {
// 公共参数
if method == http.MethodPost {
if commonParams == true {
params["appid"] = c.GetAppId()
params["mchid"] = c.GetMchId()
}
}
// 认证
authorization, err := c.authorization(method, params, url)
if err != nil {
return gorequest.Response{}, err
}
// 创建请求
client := c.client
// 设置请求地址
client.SetUri(url)
// 设置方式
client.SetMethod(method)
// 设置JSON格式
client.SetContentTypeJson()
// 设置参数
client.SetParams(params)
// 设置头部
client.SetHeader("Authorization", "WECHATPAY2-SHA256-RSA2048 "+authorization)
client.SetHeader("Accept", "application/json")
client.SetHeader("Accept-Language", "zh-CN")
if url == "https://api.mch.weixin.qq.com/v3/merchant-service/complaints-v2" {
client.SetHeader("Wechatpay-Serial", c.GetMchSslSerialNo())
}
// 发起请求
request, err := client.Request()
if err != nil {
return gorequest.Response{}, err
}
// 日志
if c.logStatus == true {
go c.postgresqlLog(request)
}
return request, err
}

@ -1,9 +1,9 @@
package wechatpayapiv3
func (app *App) SetAppId(appId string) {
app.appId = appId
func (c *Client) SetAppId(appId string) {
c.config.AppId = appId
}
func (app *App) SetAppSecret(appSecret string) {
app.appSecret = appSecret
func (c *Client) SetAppSecret(appSecret string) {
c.config.AppSecret = appSecret
}

@ -19,7 +19,7 @@ import (
)
// 对消息的散列值进行数字签名
func (app *App) signPKCS1v15(msg string, privateKey []byte) ([]byte, error) {
func (c *Client) signPKCS1v15(msg string, privateKey []byte) ([]byte, error) {
block, _ := pem.Decode(privateKey)
if block == nil {
@ -33,7 +33,7 @@ func (app *App) signPKCS1v15(msg string, privateKey []byte) ([]byte, error) {
if ok == false {
return nil, errors.New("private key format error")
}
sign, err := rsa.SignPKCS1v15(rand.Reader, key, crypto.SHA256, app.haSha256(msg))
sign, err := rsa.SignPKCS1v15(rand.Reader, key, crypto.SHA256, c.haSha256(msg))
if err != nil {
return nil, errors.New("sign error")
}
@ -41,19 +41,19 @@ func (app *App) signPKCS1v15(msg string, privateKey []byte) ([]byte, error) {
}
// base编码
func (app *App) base64EncodeStr(src []byte) string {
func (c *Client) base64EncodeStr(src []byte) string {
return base64.StdEncoding.EncodeToString(src)
}
// sha256加密
func (app *App) haSha256(str string) []byte {
func (c *Client) haSha256(str string) []byte {
h := sha256.New()
h.Write([]byte(str))
return h.Sum(nil)
}
// 生成身份认证信息
func (app *App) authorization(method string, paramMap map[string]interface{}, rawUrl string) (token string, err error) {
func (c *Client) authorization(method string, paramMap map[string]interface{}, rawUrl string) (token string, err error) {
var body string
if len(paramMap) != 0 {
paramJsonBytes, err := json.Marshal(paramMap)
@ -71,21 +71,21 @@ func (app *App) authorization(method string, paramMap map[string]interface{}, ra
nonce := gorandom.Alphanumeric(32)
message := fmt.Sprintf("%s\n%s\n%d\n%s\n%s\n", method, canonicalUrl, timestamp, nonce, body)
signBytes, err := app.signPKCS1v15(message, []byte(app.mchSslKey))
signBytes, err := c.signPKCS1v15(message, []byte(c.GetMchSslKey()))
if err != nil {
return token, err
}
sign := app.base64EncodeStr(signBytes)
sign := c.base64EncodeStr(signBytes)
token = fmt.Sprintf("mchid=\"%s\",nonce_str=\"%s\",timestamp=\"%d\",serial_no=\"%s\",signature=\"%s\"",
app.mchId, nonce, timestamp, app.mchSslSerialNo, sign)
c.GetMchId(), nonce, timestamp, c.GetMchSslSerialNo(), sign)
return token, nil
}
// 报文解密
func (app *App) decryptGCM(aesKey, nonceV, ciphertextV, additionalDataV string) ([]byte, error) {
func (c *Client) decryptGCM(aesKey, nonceV, ciphertextV, additionalDataV string) ([]byte, error) {
key := []byte(aesKey)
nonce := []byte(nonceV)
additionalData := []byte(additionalDataV)

Loading…
Cancel
Save