ssgf_utils/weipinshang_api/wei_pin_shang_client.go
2025-05-23 17:46:48 +08:00

153 lines
3.4 KiB
Go

package weipinshang_api
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"io"
"net/http"
"strings"
)
type WeiPinShangClient struct {
Host string
ChannelType string
Key string
}
func NewWeiPinShangClient(host string, channelType, key string) *WeiPinShangClient {
return &WeiPinShangClient{
Host: host,
ChannelType: channelType,
Key: key,
}
}
func (w *WeiPinShangClient) GetOrderInfo(orderNo string) (res any, err error) {
fmt.Println("orderNo", orderNo)
paramMap := make(map[string]any)
paramMap["orderNo"] = orderNo
postRes, err := w.WPSPost("/mcang/Mcang/getOrderInfo", paramMap)
if err != nil {
return
}
err = json.Unmarshal(postRes, &res)
if err != nil || res == nil {
err = fmt.Errorf("转换结构体失败: %s", string(postRes))
return
}
return
}
func (w *WeiPinShangClient) IsRefund(mcOrderNo string) (res any, err error) {
fmt.Println("mcOrderNo", mcOrderNo)
paramMap := make(map[string]any)
paramMap["mcOrderNo"] = mcOrderNo
postRes, err := w.WPSPost("/mcang/Refunds/IsRefund", paramMap)
if err != nil {
return
}
err = json.Unmarshal(postRes, &res)
if err != nil || res == nil {
err = fmt.Errorf("转换结构体失败: %s", string(postRes))
return
}
return
}
func (w *WeiPinShangClient) CreateAfsApply(createAfsApplyReq CreateAfsApplyReq) (res any, err error) {
fmt.Println("createAfsApplyReq", createAfsApplyReq)
paramMap := make(map[string]any)
paramMap["createAfsApplyReq"] = createAfsApplyReq
postRes, err := w.WPSPost("/mcang/Refunds/IsRefund", paramMap)
if err != nil {
return
}
err = json.Unmarshal(postRes, &res)
if err != nil || res == nil {
err = fmt.Errorf("转换结构体失败: %s", string(postRes))
return
}
return
}
func (w *WeiPinShangClient) OrderCancel(mcOrderNo string) (res any, err error) {
fmt.Println("mcOrderNo", mcOrderNo)
paramMap := make(map[string]any)
paramMap["mcOrderNo"] = mcOrderNo
postRes, err := w.WPSPost("/mcang/Refunds/IsRefund", paramMap)
if err != nil {
return
}
err = json.Unmarshal(postRes, &res)
if err != nil || res == nil {
err = fmt.Errorf("转换结构体失败: %s", string(postRes))
return
}
return
}
func (w *WeiPinShangClient) Sign(paramMap map[string]any) (res string, err error) {
var sumParamString string
if len(paramMap) != 0 {
sumParamString = SortedString(paramMap) + w.ChannelType + w.Key
} else {
sumParamString = w.ChannelType + w.Key
}
md5Sum := md5.Sum([]byte(sumParamString))
md5Str := hex.EncodeToString(md5Sum[:])
md5Str = strings.ToUpper(md5Str)
return md5Str, nil
}
func (w *WeiPinShangClient) WPSPost(url string, paramMap map[string]any) (res []byte, err error) {
bodyByte, _ := json.Marshal(paramMap)
req, err := http.NewRequest("POST", w.Host+url, bytes.NewBuffer(bodyByte))
if err != nil {
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("channelType", w.ChannelType)
sign, err := w.Sign(paramMap)
if err != nil {
return
}
req.Header.Set("md5", sign)
// 创建 HTTP 客户端
client := &http.Client{}
// 发送请求
resp, err := client.Do(req)
if err != nil {
return
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
// 读取响应体
res, err = io.ReadAll(resp.Body)
if err != nil {
return
}
//fmt.Printf("res: %s\n", string(res))
if !json.Valid(res) {
return nil, fmt.Errorf("响应不是有效的JSON格式: %s", string(res))
}
return
}