对接新供应链-唯品尚
This commit is contained in:
152
weipinshang_api/wei_pin_shang_client.go
Normal file
152
weipinshang_api/wei_pin_shang_client.go
Normal file
@@ -0,0 +1,152 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user