153 lines
3.4 KiB
Go
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
|
|
}
|