1 Star 1 Fork 0

颜言/gopay

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
client.go 2.37 KB
一键复制 编辑 原始数据 按行查看 历史
颜言 提交于 2024-09-13 09:11 +08:00 . 重构:统一gopay包的依赖路径
package saobei
import (
"context"
"crypto/md5"
"fmt"
"hash"
"sync"
"gitee.com/ujq/gopay"
"gitee.com/ujq/gopay/pkg/xhttp"
"gitee.com/ujq/gopay/pkg/xlog"
)
type Client struct {
instNo string //商户系统机构号inst_no
key string // 商户系统令牌
merchantNo string // 支付系统:商户号
terminalId string // 支付系统:商户号终端号
accessToken string // 支付系统: 令牌
isProd bool // 是否正式环境
payVer string //版本号 当前201
serviceId string //接口类型,当前类型015
hc *xhttp.Client
mu sync.Mutex
md5Hash hash.Hash
}
// NewClient 初始化扫呗客户端
// instNo string //商户系统机构号inst_no
// key string // 商户系统令牌
// merchantNo string // 支付系统:商户号
// terminalId string // 支付系统:商户号终端号
// accessToken string // 支付系统: 令牌
// isProd:是否是正式环境
func NewClient(instNo, key, merchantNo, terminalId, accessToken string, isProd bool) (*Client, error) {
return &Client{
instNo: instNo,
key: key,
merchantNo: merchantNo,
terminalId: terminalId,
accessToken: accessToken,
isProd: isProd,
hc: xhttp.NewClient(),
md5Hash: md5.New(),
payVer: "201",
serviceId: "015",
}, nil
}
// pubParamsHandle 公共参数处理
func (c *Client) pubParamsHandle(bm gopay.BodyMap) gopay.BodyMap {
if ver := bm.GetString("pay_ver"); ver == gopay.NULL {
bm.Set("pay_ver", c.payVer)
}
if v := bm.GetString("service_id"); v == gopay.NULL {
bm.Set("service_id", c.serviceId)
}
if v := bm.GetString("merchant_no"); v == gopay.NULL {
bm.Set("merchant_no", c.merchantNo)
}
if v := bm.GetString("terminal_id"); v == gopay.NULL {
bm.Set("terminal_id", c.terminalId)
}
sign := c.getRsaSign(bm)
bm.Set("key_sign", sign)
return bm
}
// doPost 发起请求
func (c *Client) doPost(ctx context.Context, path string, bm gopay.BodyMap) (bs []byte, err error) {
param := c.pubParamsHandle(bm)
xlog.Debugf("saobeiParam:%+v", param.JsonBody())
url := baseUrl
if !c.isProd {
url = sandboxBaseUrl
}
res, bs, err := c.hc.Req(xhttp.TypeJSON).Post(url + path).SendBodyMap(param).EndBytes(ctx)
if err != nil {
return nil, err
}
if res.StatusCode != 200 {
return nil, fmt.Errorf("HTTP Request Error, StatusCode = %d", res.StatusCode)
}
return bs, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/ujq/gopay.git
git@gitee.com:ujq/gopay.git
ujq
gopay
gopay
95cb943fb81a

搜索帮助