更新拼多多服务

master
李光春 3 years ago
parent 4697deaffb
commit ab39efe8d0

@ -2,8 +2,8 @@ package params
import (
"encoding/json"
"github.com/nilorg/sdk/convert"
"net/url"
"strconv"
)
type Params map[string]interface{}
@ -39,19 +39,18 @@ func (p Params) GetQuery() string {
return u.Encode()
}
func GetParamsString(i interface{}) string {
switch v := i.(type) {
func GetParamsString(src interface{}) string {
switch src.(type) {
case string:
return v
case []byte:
return string(v)
case int:
return strconv.Itoa(v)
case bool:
return strconv.FormatBool(v)
default:
bytes, _ := json.Marshal(v)
return string(bytes)
return src.(string)
case int, int8, int32, int64:
case uint8, uint16, uint32, uint64:
case float32, float64:
return convert.ToString(src)
}
return ""
data, err := json.Marshal(src)
if err != nil {
panic(err)
}
return string(data)
}

@ -0,0 +1,93 @@
package pinduoduo
import (
"bytes"
"crypto/md5"
"encoding/hex"
"github.com/bitly/go-simplejson"
params2 "gopkg.in/dtapps/go-library.v2/params"
"io"
"io/ioutil"
"net/http"
"net/url"
"sort"
"strconv"
"strings"
"time"
)
const api = "https://gw-api.pinduoduo.com/api/router"
// Parameter 参数
type Parameter map[string]interface{}
// ParameterEncode 参数
type ParameterEncode []string
// PinDuoDuo 公共请求参数
type PinDuoDuo struct {
ClientId string //必填 POP分配给应用的client_id
ClientSecret string //必填 POP分配给应用的client_secret
}
func (d *PinDuoDuo) Send(method string, param Parameter) (*simplejson.Json, error) {
param["type"] = method
param.setRequestData(d)
resp, err := http.Post(api, "application/x-www-form-urlencoded;charset=utf-8", strings.NewReader(param.getRequestData()))
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
respJson, err := simplejson.NewJson(body)
if err != nil {
return nil, err
}
return respJson, nil
}
// 签名数据
func sign(params Parameter, clientSecret string) string {
// 参数按照参数名的字典升序排列
var keys []string
for k := range params {
keys = append(keys, k)
}
sort.Strings(keys)
// 拼接参数
query := bytes.NewBufferString(clientSecret)
for _, k := range keys {
query.WriteString(k)
query.WriteString(params2.GetParamsString(params[k]))
}
query.WriteString(clientSecret)
// MD5加密
h := md5.New()
io.Copy(h, query)
// 把二进制转化为大写的十六进制
return strings.ToUpper(hex.EncodeToString(h.Sum(nil)))
}
// 设置请求数据
func (p Parameter) setRequestData(d *PinDuoDuo) {
hh, _ := time.ParseDuration("8h")
loc := time.Now().UTC().Add(hh)
p["timestamp"] = strconv.FormatInt(loc.Unix(), 10)
p["client_id"] = d.ClientId
p["data_type"] = "JSON"
p["version"] = "v1"
// 设置签名
p["sign"] = sign(p, d.ClientSecret)
}
// 获取请求数据
func (p Parameter) getRequestData() string {
// 公共参数
args := url.Values{}
// 请求参数
for key, val := range p {
args.Set(key, params2.GetParamsString(val))
}
return args.Encode()
}

@ -0,0 +1,23 @@
package pinduoduo
import (
_type "gopkg.in/dtapps/go-library.v2/pinduoduo/type"
"log"
"testing"
)
func TestName(t *testing.T) {
duo := PinDuoDuo{
ClientId: "",
ClientSecret: "",
}
param := Parameter{
"keyword": "小米",
}
send, err := duo.Send(_type.GoodsSearch, param)
log.Printf("send%v\n", send)
if err != nil {
t.Errorf("错误:%v", err)
return
}
}

@ -0,0 +1,6 @@
package _type
const (
GoodsPidGenerate = "pdd.ddk.goods.pid.generate"
GoodsSearch = "pdd.ddk.goods.search" // 多多进宝商品查询 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.search
)

@ -11,7 +11,7 @@ func TestName(t *testing.T) {
// 连接
err := InitRedis("127.0.0.1", 6379, "", 2)
if err != nil {
panic(err)
t.Errorf("err%v", err)
}
jsonSimpleJson()
}

@ -146,7 +146,7 @@ func (p Parameter) getRequestData() string {
// 获取签名
func getSign(params Parameter) string {
// 获取Key
keys := []string{}
var keys []string
for k := range params {
keys = append(keys, k)
}

@ -1,7 +1,7 @@
package ddk
import (
"fmt"
"log"
"testing"
)
@ -11,7 +11,6 @@ func init() {
}
func TestName(t *testing.T) {
fmt.Println("Hello World")
res, err := Execute("pdd.ddk.goods.recommend.get", Parameter{
"limit": 10,
"channel_type": 3,
@ -21,9 +20,9 @@ func TestName(t *testing.T) {
"Y9v2lh2s6e1GWdnxwfbZF9sHlepFWs13_JmF4wnW72",
},
})
log.Printf("res%#v\n", res)
if err != nil {
fmt.Printf("错误:%#v\n", err)
t.Errorf("错误:%#v\n", err)
}
fmt.Printf("结果:%#v\n", res)
}

@ -16,3 +16,7 @@ func HmacSha256Hex(key, strToSign string) string {
func ToLower(str string) string {
return strings.ToLower(str)
}
func ToUpper(str string) string {
return strings.ToUpper(str)
}

Loading…
Cancel
Save