package pdd
import (
"bytes"
"duoduo/conf"
"duoduo/tools"
"duoduo/tools/app"
"fmt"
"io/ioutil"
"net/http"
"sort"
)
func PostPdd(inputObj interface{}, outputObj interface{}, function string) error {
//数据转json
jsonData, err := tools.JsonMarshal(inputObj)
if err != nil {
fmt.Println(err.Error())
return err
}
var jsonStr = []byte(jsonData) //转换二进制
buffer := bytes.NewBuffer(jsonStr)
fmt.Print("jsonData = ", jsonData)
confIni, errConf := conf.ConnIni()
if errConf != nil {
fmt.Println(errConf)
}
path := confIni.MustValue("pdd", "api_http")
fmt.Print(path)
//path = "https://gw-api.pinduoduo.com/api/router?type=pdd.ddk.goods.search&data_type=JSON&client_id=a5d05569c6584a50bfb6600b2d150bae×tamp=1620461572&sign=8F2C23805C8B8A388AFB512DD3EAD727"
request, err := http.NewRequest("POST", path, buffer)
if err != nil {
fmt.Println(err.Error())
return err
}
request.Header.Set("Content-Type", "application/json;charset=UTF-8")
client := http.Client{}
//创建客户端
resp, err := client.Do(request) //发送请求
if err != nil {
fmt.Printf("client.Do%v", err)
return err
}
respBytes, err := ioutil.ReadAll(resp.Body)
fmt.Print(string(respBytes))
return nil
}
func PostDDk(inputObj interface{}, outputObj interface{}) (string, error) {
//数据转json
jsonData, err := tools.JsonMarshal(inputObj)
if err != nil {
return "", err
}
fmt.Print(jsonData)
var jsonStr = []byte(jsonData) //转换二进制
buffer := bytes.NewBuffer(jsonStr)
confIni, errConf := conf.ConnIni()
if errConf != nil {
return "", err
}
path := confIni.MustValue("pdd", "api_http")
fmt.Print(path)
request, err := http.NewRequest("POST", path, buffer)
if err != nil {
fmt.Println(err.Error())
return "", err
}
request.Header.Set("Content-Type", "application/json;charset=UTF-8")
client := http.Client{}
//创建客户端
resp, err := client.Do(request) //发送请求
if err != nil {
fmt.Printf("client.Do%v", err)
return "", err
}
respBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
fmt.Print("respBytes = ", string(respBytes))
return string(respBytes), nil
}
func DDKSign(inputObj interface{}) (string, error) {
jsonData, err := tools.JsonMarshal(inputObj)
if err != nil {
return "", err
}
pddSearch := make(map[string]string)
err = tools.JsonUnmarshal(jsonData, &pddSearch)
if err != nil {
return "", err
}
confIni, errConf := conf.ConnIni()
if errConf != nil {
return "", err
}
path := confIni.MustValue("pdd", "api_http")
fmt.Print(path)
var ks []string
for k, v := range pddSearch {
fmt.Print(k)
fmt.Print(v)
if v != "sign" {
ks = append(ks, k)
}
}
sort.Strings(ks)
plainText := confIni.MustValue("pdd", "client_secret")
//排序后拼接数据
for i := 0; i < len(ks); i++ {
fmt.Print(ks[i])
plainText = plainText + ks[i]
plainText = plainText + pddSearch[ks[i]]
}
plainText += confIni.MustValue("pdd", "client_secret")
fmt.Print("plainText = ", plainText)
sign := tools.MD5(plainText)
fmt.Print(sign)
return sign, nil
}
//调用阿里接口
func Post(inputObj interface{}, outputObj interface{}, function string) error {
//加载配置
confIni, errConf := conf.ConnIni()
if errConf != nil {
fmt.Println(errConf)
}
hostAdd := fmt.Sprintf("%s", confIni.MustValue("aliSet", "ali_host"))
fmt.Println(hostAdd)
//数据转json
jsonData, err := tools.JsonMarshal(inputObj)
if err != nil {
fmt.Println(err.Error())
return err
}
app.TispELKLogs(function, "POST", jsonData)
fmt.Print("json = ", jsonData)
request, err := http.NewRequest("POST", hostAdd, bytes.NewBuffer([]byte(jsonData)))
if err != nil {
fmt.Println(err.Error())
return err
}
request.Header.Set("Content-Type", "application/json;charset=UTF-8")
client := http.Client{}
//创建客户端
resp, err := client.Do(request) //发送请求
if err != nil {
fmt.Printf("client.Do%v", err)
return err
}
respBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("ioutil.ReadAll%v", err)
return err
}
fmt.Println(string(respBytes))
err = tools.JsonUnmarshal(string(respBytes), outputObj)
if err != nil {
return err
}
app.TispELKOutDataLogs(function, "POST", string(respBytes))
return nil
////byte数组直接转成string,优化内存
//str := (*string)(unsafe.Pointer(&respBytes))
}