update pinduoduo service

master
李光春 2 years ago
parent 943f867594
commit 4a3828b709

@ -1,3 +1,7 @@
## v1.0.36 / 2021-12-27
- update pinduoduo service
## v1.0.35 / 2021-12-25
- update utils

@ -1,4 +1,6 @@
<h1><a href="https://www.dtapp.net/">Golang Library</a></h1>
<h1>
<a href="https://www.dtapp.net/">Golang Library</a>
</h1>
📦 Golang 扩展包
@ -16,7 +18,6 @@
[![codecov](https://codecov.io/gh/dtapps/go-library/branch/master/graph/badge.svg?token=BrtbyKKPQX)](https://codecov.io/gh/dtapps/go-library)
[![Build Status](https://app.travis-ci.com/dtapps/go-library.svg?branch=master)](https://app.travis-ci.com/dtapps/go-library)
#### 安装使用
```go

@ -1,5 +1,5 @@
package go_library
func Version() string {
return "v1.0.35"
return "v1.0.36"
}

@ -0,0 +1,71 @@
package pinduoduo
import (
"encoding/json"
"fmt"
"github.com/dtapps/go-library/utils/gohttp"
"github.com/dtapps/go-library/utils/gostring"
"regexp"
"strconv"
"strings"
)
// App 公共请求参数
type App struct {
ClientId string // POP分配给应用的client_id
ClientSecret string // POP分配给应用的client_secret
Pid string // 推广位
}
type ErrResp struct {
ErrorResponse struct {
ErrorMsg string `json:"error_msg"`
SubMsg string `json:"sub_msg"`
SubCode interface{} `json:"sub_code"`
ErrorCode int `json:"error_code"`
RequestId string `json:"request_id"`
} `json:"error_response"`
}
type CustomParametersResult struct {
Sid string `json:"sid"`
Uid string `json:"uid"`
}
func (app *App) request(params map[string]interface{}) (resp []byte, err error) {
// 签名
app.Sign(params)
// 发送请求
httpGet, err := gohttp.Get("https://gw-api.pinduoduo.com/api/router", params)
// 检查错误
var errResp ErrResp
_ = json.Unmarshal(httpGet.Body, &errResp)
return httpGet.Body, err
}
func (app *App) SalesTipParseInt64(salesTip string) int64 {
parseInt, err := strconv.ParseInt(salesTip, 10, 64)
if err != nil {
salesTipStr := salesTip
if strings.Contains(salesTip, "万+") {
salesTipStr = strings.Replace(salesTip, "万+", "0000", -1)
} else if strings.Contains(salesTip, "万") {
salesTipStr = strings.Replace(salesTip, "万", "000", -1)
}
re := regexp.MustCompile("[0-9]+")
SalesTipMap := re.FindAllString(salesTipStr, -1)
if len(SalesTipMap) == 2 {
return gostring.ToInt64(fmt.Sprintf("%s%s", SalesTipMap[0], SalesTipMap[1]))
} else if len(SalesTipMap) == 1 {
return gostring.ToInt64(SalesTipMap[0])
} else {
return 0
}
} else {
return parseInt
}
}
func (app *App) CommissionIntegralToInt64(GoodsPrice, CouponProportion int64) int64 {
return (GoodsPrice * CouponProportion) / 1000
}

@ -0,0 +1,15 @@
package pinduoduo
import (
"crypto/md5"
"encoding/hex"
"strings"
)
// 签名
func createSign(signStr string) string {
h := md5.New()
h.Write([]byte(signStr))
cipherStr := h.Sum(nil)
return strings.ToUpper(hex.EncodeToString(cipherStr))
}

@ -0,0 +1,7 @@
package pinduoduo
// CommonGenCustomParameters 自定义参数
type CommonGenCustomParameters struct {
Uid string `json:"uid"`
Sid string `json:"sid"`
}

@ -0,0 +1,85 @@
package pinduoduo
import (
"encoding/json"
"net/url"
"sort"
"strconv"
"time"
)
// Params 请求参数
type Params map[string]interface{}
func NewParams() Params {
p := make(Params)
return p
}
func NewParamsWithType(_type string, params ...Params) Params {
p := make(Params)
p["type"] = _type
p["timestamp"] = strconv.FormatInt(time.Now().Unix(), 10)
for _, v := range params {
p.SetParams(v)
}
return p
}
func (app *App) Sign(p Params) {
p["client_id"] = app.ClientId
// 排序所有的 key
var keys []string
for key := range p {
keys = append(keys, key)
}
sort.Strings(keys)
signStr := app.ClientSecret
for _, key := range keys {
signStr += key + getString(p[key])
}
signStr += app.ClientSecret
p["sign"] = createSign(signStr)
}
func (p Params) Set(key string, value interface{}) {
p[key] = value
}
func (p Params) SetParams(params Params) {
for key, value := range params {
p[key] = value
}
}
func (p Params) SetCustomParameters(uid string, sid string) {
p["custom_parameters"] = map[string]interface{}{
"uid": uid,
"sid": sid,
}
}
func (p Params) GetQuery() string {
u := url.Values{}
for k, v := range p {
u.Set(k, getString(v))
}
return u.Encode()
}
func getString(i interface{}) string {
switch v := i.(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)
}
}

@ -0,0 +1,90 @@
package pinduoduo
// GoodsDetailResult 返回参数
type GoodsDetailResult struct {
GoodsDetailResponse struct {
GoodsDetails []struct {
ActivityPromotionRate int `json:"activity_promotion_rate,omitempty"` // 活动佣金比例,千分比(特定活动期间的佣金比例)
ActivityTags []int `json:"activity_tags,omitempty"` // 商品活动标记数组,例:[4,7]4-秒杀 7-百亿补贴等
BrandName string `json:"brand_name,omitempty"` // 商品品牌词信息,如“苹果”、“阿迪达斯”、“李宁”等
CashGiftAmount int `json:"cash_gift_amount,omitempty"` // 全局礼金金额,单位分
CatId int `json:"cat_id,omitempty"` // 商品类目ID使用pdd.goods.cats.get接口获取
CatIds []int `json:"cat_ids,omitempty"` // 商品一~四级类目ID列表
CltCpnBatchSn string `json:"clt_cpn_batch_sn,omitempty"` // 店铺收藏券id
CltCpnDiscount int `json:"clt_cpn_discount,omitempty"` // 店铺收藏券面额,单位为分
CltCpnEndTime int `json:"clt_cpn_end_time,omitempty"` // 店铺收藏券截止时间
CltCpnMinAmt int `json:"clt_cpn_min_amt,omitempty"` // 店铺收藏券使用门槛价格,单位为分
CltCpnQuantity int `json:"clt_cpn_quantity,omitempty"` // 店铺收藏券总量
CltCpnRemainQuantity int `json:"clt_cpn_remain_quantity,omitempty"` // 店铺收藏券剩余量
CltCpnStartTime int `json:"clt_cpn_start_time,omitempty"` // 店铺收藏券起始时间
CouponDiscount int64 `json:"coupon_discount,omitempty"` // 优惠券面额,单位为分
CouponEndTime int `json:"coupon_end_time,omitempty"` // 优惠券失效时间UNIX时间戳
CouponMinOrderAmount int `json:"coupon_min_order_amount,omitempty"` // 优惠券门槛金额,单位为分
CouponRemainQuantity int `json:"coupon_remain_quantity,omitempty"` // 优惠券剩余数量
CouponStartTime int `json:"coupon_start_time,omitempty"` // 优惠券生效时间UNIX时间戳
CouponTotalQuantity int `json:"coupon_total_quantity,omitempty"` // 优惠券总数量
CreateAt int `json:"create_at,omitempty"` // 创建时间unix时间戳
DescTxt string `json:"desc_txt,omitempty"` // 描述分
ExtraCouponAmount int `json:"extra_coupon_amount,omitempty"` // 额外优惠券
GoodsDesc string `json:"goods_desc,omitempty"` // 参与多多进宝的商品描述
GoodsGalleryUrls []string `json:"goods_gallery_urls,omitempty"` // 商品轮播图
GoodsImageUrl string `json:"goods_image_url,omitempty"` // 多多进宝商品主图
GoodsName string `json:"goods_name,omitempty"` // 参与多多进宝的商品标题
GoodsSign string `json:"goods_sign,omitempty"` // 商品goodsSign支持通过goodsSign查询商品。goodsSign是加密后的goodsId, goodsId已下线请使用goodsSign来替代。使用说明https://jinbao.pinduoduo.com/qa-system?questionId=252
GoodsThumbnailUrl string `json:"goods_thumbnail_url,omitempty"` // 商品缩略图
HasCoupon bool `json:"has_coupon,omitempty"` // 商品是否有优惠券 true-有false-没有
HasMallCoupon bool `json:"has_mall_coupon,omitempty"` // 是否有店铺券
LgstTxt string `json:"lgst_txt,omitempty"` // 物流分
MallCouponDiscountPct int64 `json:"mall_coupon_discount_pct,omitempty"` // 店铺折扣
MallCouponEndTime int `json:"mall_coupon_end_time,omitempty"` // 店铺券使用结束时间
MallCouponMaxDiscountAmount int64 `json:"mall_coupon_max_discount_amount,omitempty"` // 最大使用金额
MallCouponMinOrderAmount int64 `json:"mall_coupon_min_order_amount,omitempty"` // 最小使用金额
MallCouponRemainQuantity int `json:"mall_coupon_remain_quantity,omitempty"` // 店铺券余量
MallCouponStartTime int `json:"mall_coupon_start_time,omitempty"` // 店铺券使用开始时间
MallCouponTotalQuantity int `json:"mall_coupon_total_quantity,omitempty"` // 店铺券总量
MallCps int64 `json:"mall_cps,omitempty"` // 该商品所在店铺是否参与全店推广01
MallId int64 `json:"mall_id,omitempty"` // 商家id
MallImgUrl string `json:"mall_img_url,omitempty"` // 店铺logo图
MallName string `json:"mall_name,omitempty"` // 店铺名称
MaterialList []struct {
Id string `json:"id,omitempty"` // 素材ID
ImageList []string `json:"image_list,omitempty"` // 图片列表
TextList []string `json:"text_list,omitempty"` // 文字列表
ThumbnailUrl string `json:"thumbnail_url,omitempty"` // 视频缩略图
Mtype int `json:"type,omitempty"` // 素材类型1-图文2-视频
VideoUrl string `json:"video_url,omitempty"` // 视频url
} `json:"material_list"`
MerchantType int `json:"merchant_type,omitempty"` // 店铺类型1-个人2-企业3-旗舰店4-专卖店5-专营店6-普通店(未传为全部)
MinGroupPrice int64 `json:"min_group_price,omitempty"` // 最低价sku的拼团价单位为分
MinNormalPrice int64 `json:"min_normal_price,omitempty"` // 最低价sku的单买价单位为分
OnlySceneAuth bool `json:"only_scene_auth,omitempty"` // 快手专享
OptId int `json:"opt_id,omitempty"` // 商品标签ID使用pdd.goods.opt.get接口获取
OptIds []int `json:"opt_ids,omitempty"` // 商品标签ID
OptName string `json:"opt_name,omitempty"` // 商品标签名称
PlanType int `json:"plan_type,omitempty"` // 推广计划类型: 1-全店推广 2-单品推广 3-定向推广 4-招商推广 5-分销推广
PredictPromotionRate int `json:"predict_promotion_rate,omitempty"` // 比价行为预判定佣金,需要用户备案
PromotionRate int64 `json:"promotion_rate,omitempty"` // 佣金比例,千分比
SalesTip string `json:"sales_tip,omitempty"` // 已售卖件数
ServiceTags []int `json:"service_tags,omitempty"` // 服务标签: 4-送货入户并安装,5-送货入户,6-电子发票,9-坏果包赔,11-闪电退款,12-24小时发货,13-48小时发货,17-顺丰包邮,18-只换不修,1可定制化,29-预约配送,1000001-正品发票,1000002-送货入户并安装
ServTxt string `json:"serv_txt,omitempty"` // 服务分
ShareRate int `json:"share_rate,omitempty"` // 招商分成服务费比例,千分比
SubsidyAmount int `json:"subsidy_amount,omitempty"` // 优势渠道专属商品补贴金额,单位为分。针对优质渠道的补贴活动,指定优势渠道可通过推广该商品获取相应补贴。补贴活动入口:[进宝网站-官方活动-千万补贴]报名入口https://jinbao.pinduoduo.com/ten-million-subsidy/entry
SubsidyDuoAmountTenMillion int `json:"subsidy_duo_amount_ten_million,omitempty"` // 千万补贴给渠道的收入补贴,不允许直接给下级代理展示,单位为分
UnifiedTags []string `json:"unified_tags,omitempty"` // 优惠标签列表,包括:"X元券","比全网低X元","服务费","精选素材","近30天低价","同款低价","同款好评","同款热销","旗舰店","一降到底","招商优选","商家优选","好价再降X元","全站销量XX","实时热销榜第X名","实时好评榜第X名","额外补X元"等
VideoUrls []string `json:"video_urls,omitempty"` // 商品视频url
ZsDuoId int `json:"zs_duo_id,omitempty"` // 招商团长id
GoodsId int64 `json:"goods_id"`
CategoryId int64 `json:"category_id"`
CategoryName string `json:"category_name"`
} `json:"goods_details"`
} `json:"goods_detail_response"`
}
// GoodsDetail 多多进宝商品详情查询 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.detail
func (app *App) GoodsDetail(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.goods.detail", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,23 @@
package pinduoduo
// GoodsPidGenerateResult 返回参数
type GoodsPidGenerateResult struct {
PIdGenerateResponse struct {
PIdList []struct {
CreateTime int `json:"create_time,omitempty"` // 推广位创建时间
PidName string `json:"pid_name,omitempty"` // 推广位名称
PId string `json:"p_id,omitempty"` // 调用方推广位ID
MediaId int `json:"media_id,omitempty"` // 媒体id
} `json:"p_id_list"`
RemainPidCount int `json:"remain_pid_count"` // PID剩余数量
} `json:"p_id_generate_response"`
}
// GoodsPidGenerate 创建多多进宝推广位 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.pid.generate
func (app *App) GoodsPidGenerate(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.goods.pid.generate", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,43 @@
package pinduoduo
// GoodsPromotionUrlGenerateResult 返回参数
type GoodsPromotionUrlGenerateResult struct {
GoodsPromotionUrlGenerateResponse struct {
GoodsPromotionUrlList []struct {
MobileShortUrl string `json:"mobile_short_url,omitempty"` // 对应出参mobile_url的短链接与mobile_url功能一致。
MobileUrl string `json:"mobile_url,omitempty"` // 使用此推广链接用户安装微信的情况下默认拉起拼多多福利券微信小程序否则唤起H5页面
QqAppInfo struct {
AppId string `json:"app_id,omitempty"` // 拼多多小程序id
BannerUrl string `json:"banner_url,omitempty"` // Banner图
Desc string `json:"desc,omitempty"` // 描述
PagePath string `json:"page_path,omitempty"` // 小程序path值
QqAppIconUrl string `json:"qq_app_icon_url,omitempty"` // 小程序icon
SourceDisplayName string `json:"source_display_name,omitempty"` // 来源名
Title string `json:"title,omitempty"` // 小程序标题
UserName string `json:"user_name,omitempty"` // 用户名
} `json:"qq_app_info"`
SchemaUrl string `json:"schema_url,omitempty"` // 使用此推广链接用户安装拼多多APP的情况下会唤起APP需客户端支持schema跳转协议
ShortUrl string `json:"short_url,omitempty"` // 对应出参url的短链接与url功能一致
Url string `json:"url,omitempty"` // 普通推广长链接唤起H5页面
WeAppInfo struct {
AppId string `json:"app_id,omitempty"` // 小程序id
BannerUrl string `json:"banner_url,omitempty"` // Banner图
Desc string `json:"desc,omitempty"` // 描述
PagePath string `json:"page_path,omitempty"` // 小程序path值
SourceDisplayName string `json:"source_display_name,omitempty"` // 来源名
Title string `json:"title,omitempty"` // 小程序标题
UserName string `json:"user_name,omitempty"` // 用户名
WeAppIconUrl string `json:"we_app_icon_url,omitempty"` // 小程序图片
} `json:"we_app_info"`
} `json:"goods_promotion_url_list"`
} `json:"goods_promotion_url_generate_response"`
}
// GoodsPromotionUrlGenerate 多多进宝推广链接生成 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.promotion.url.generate
func (app *App) GoodsPromotionUrlGenerate(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.goods.promotion.url.generate", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,72 @@
package pinduoduo
// GoodsRecommendGetResult 返回参数
type GoodsRecommendGetResult struct {
GoodsBasicDetailResponse struct {
List []struct {
ActivityPromotionRate int `json:"activity_promotion_rate"`
ActivityTags []int `json:"activity_tags"`
BrandName string `json:"brand_name"`
CashGiftAmount int `json:"cash_gift_amount"`
CatId string `json:"cat_id"`
CatIds []int `json:"cat_ids"`
CouponDiscount int64 `json:"coupon_discount"`
CouponEndTime int `json:"coupon_end_time"`
CouponMinOrderAmount int `json:"coupon_min_order_amount"`
CouponPrice int `json:"coupon_price"`
CouponRemainQuantity int `json:"coupon_remain_quantity"`
CouponStartTime int `json:"coupon_start_time"`
CouponTotalQuantity int `json:"coupon_total_quantity"`
CreateAt int `json:"create_at"`
DescTxt string `json:"desc_txt"`
ExtraCouponAmount int `json:"extra_coupon_amount"`
GoodsDesc string `json:"goods_desc"`
GoodsImageUrl string `json:"goods_image_url"`
GoodsLabels []int `json:"goods_labels"`
GoodsName string `json:"goods_name"`
GoodsRate int `json:"goods_rate"`
GoodsSign string `json:"goods_sign"`
GoodsThumbnailUrl string `json:"goods_thumbnail_url"`
GoodsType int `json:"goods_type"`
HasCoupon bool `json:"has_coupon"`
HasMaterial bool `json:"has_material"`
LgstTxt string `json:"lgst_txt"`
MallId int64 `json:"mall_id"`
MallName string `json:"mall_name"`
MarketFee int `json:"market_fee"`
MerchantType string `json:"merchant_type"`
MinGroupPrice int64 `json:"min_group_price"`
MinNormalPrice int `json:"min_normal_price"`
OptId string `json:"opt_id"`
OptIds []int `json:"opt_ids"`
OptName string `json:"opt_name"`
PredictPromotionRate int `json:"predict_promotion_rate"`
PromotionRate int64 `json:"promotion_rate"`
QrCodeImageUrl string `json:"qr_code_image_url"`
RealtimeSalesTip string `json:"realtime_sales_tip"`
SalesTip string `json:"sales_tip"`
SearchId string `json:"search_id"`
ServTxt string `json:"serv_txt"`
ShareDesc string `json:"share_desc"`
ShareRate int `json:"share_rate"`
SubsidyAmount int `json:"subsidy_amount"`
SubsidyDuoAmountTenMillion int `json:"subsidy_duo_amount_ten_million"`
UnifiedTags []string `json:"unified_tags"`
GoodsId int64 `json:"goods_id"`
CategoryId string `json:"category_id"`
CategoryName string `json:"category_name"`
} `json:"list"`
ListId string `json:"list_id"`
SearchId string `json:"search_id"`
Total int `json:"total"`
} `json:"goods_basic_detail_response"`
}
// GoodsRecommendGet 多多进宝商品推荐API https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.recommend.get
func (app *App) GoodsRecommendGet(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.goods.recommend.get", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,85 @@
package pinduoduo
type GoodsSearchResult struct {
GoodsSearchResponse struct {
GoodsList []struct {
ActivityPromotionRate int `json:"activity_promotion_rate"`
ActivityTags []int `json:"activity_tags"`
ActivityType int `json:"activity_type"`
BrandName string `json:"brand_name"`
CashGiftAmount int `json:"cash_gift_amount"`
CatIds []int `json:"cat_ids"`
CltCpnBatchSn string `json:"clt_cpn_batch_sn"`
CltCpnDiscount int `json:"clt_cpn_discount"`
CltCpnEndTime int `json:"clt_cpn_end_time"`
CltCpnMinAmt int `json:"clt_cpn_min_amt"`
CltCpnQuantity int `json:"clt_cpn_quantity"`
CltCpnRemainQuantity int `json:"clt_cpn_remain_quantity"`
CltCpnStartTime int `json:"clt_cpn_start_time"`
CouponDiscount int64 `json:"coupon_discount"`
CouponEndTime int `json:"coupon_end_time"`
CouponMinOrderAmount int `json:"coupon_min_order_amount"`
CouponRemainQuantity int `json:"coupon_remain_quantity"`
CouponStartTime int `json:"coupon_start_time"`
CouponTotalQuantity int `json:"coupon_total_quantity"`
CreateAt int `json:"create_at"`
DescTxt string `json:"desc_txt"`
ExtraCouponAmount int `json:"extra_coupon_amount"`
GoodsDesc string `json:"goods_desc"`
GoodsImageUrl string `json:"goods_image_url"`
GoodsLabels []int `json:"goods_labels"`
GoodsName string `json:"goods_name"`
GoodsSign string `json:"goods_sign"`
GoodsThumbnailUrl string `json:"goods_thumbnail_url"`
HasCoupon bool `json:"has_coupon"`
HasMallCoupon bool `json:"has_mall_coupon"`
HasMaterial bool `json:"has_material"`
LgstTxt string `json:"lgst_txt"`
MallCouponDiscountPct int `json:"mall_coupon_discount_pct"`
MallCouponEndTime int `json:"mall_coupon_end_time"`
MallCouponId int `json:"mall_coupon_id"`
MallCouponMaxDiscountAmount int `json:"mall_coupon_max_discount_amount"`
MallCouponMinOrderAmount int `json:"mall_coupon_min_order_amount"`
MallCouponRemainQuantity int `json:"mall_coupon_remain_quantity"`
MallCouponStartTime int `json:"mall_coupon_start_time"`
MallCouponTotalQuantity int `json:"mall_coupon_total_quantity"`
MallCps int `json:"mall_cps"`
MallId int64 `json:"mall_id"`
MallName string `json:"mall_name"`
MerchantType int `json:"merchant_type"`
MinGroupPrice int64 `json:"min_group_price"`
MinNormalPrice int `json:"min_normal_price"`
OnlySceneAuth bool `json:"only_scene_auth"`
OptId int `json:"opt_id"`
OptIds []int `json:"opt_ids"`
OptName string `json:"opt_name"`
PlanType int `json:"plan_type"`
PredictPromotionRate int `json:"predict_promotion_rate"`
PromotionRate int64 `json:"promotion_rate"`
SalesTip string `json:"sales_tip"`
SearchId string `json:"search_id"`
ServTxt string `json:"serv_txt"`
ServiceTags []int `json:"service_tags"`
ShareRate int `json:"share_rate"`
SubsidyAmount int `json:"subsidy_amount"`
SubsidyDuoAmountTenMillion int `json:"subsidy_duo_amount_ten_million"`
UnifiedTags []string `json:"unified_tags"`
ZsDuoId int `json:"zs_duo_id"`
GoodsId int64 `json:"goods_id"`
CategoryId int64 `json:"category_id"`
CategoryName string `json:"category_name"`
} `json:"goods_list"`
ListId string `json:"list_id"`
SearchId string `json:"search_id"`
TotalCount int `json:"total_count"`
} `json:"goods_search_response"`
}
// GoodsSearch 多多进宝商品查询 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.search
func (app *App) GoodsSearch(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.goods.search", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,62 @@
package pinduoduo
type OrderListIncrementGetResult struct {
OrderListGetResponse struct {
TotalCount int `json:"total_count"`
OrderList []struct {
SepMarketFee int `json:"sep_market_fee"`
GoodsPrice int64 `json:"goods_price"`
SepDuoId int `json:"sep_duo_id"`
PromotionRate int64 `json:"promotion_rate"`
Type int `json:"type"`
SubsidyDuoAmountLevel int `json:"subsidy_duo_amount_level"`
CatIds []int `json:"cat_ids"`
OrderStatus int `json:"order_status"`
OrderCreateTime int `json:"order_create_time"`
IsDirect int `json:"is_direct"`
OrderGroupSuccessTime int `json:"order_group_success_time"`
MallId int `json:"mall_id"`
OrderAmount int64 `json:"order_amount"`
PriceCompareStatus int `json:"price_compare_status"`
OrderModifyAt int `json:"order_modify_at"`
AuthDuoId int `json:"auth_duo_id"`
CpaNew int `json:"cpa_new"`
GoodsName string `json:"goods_name"`
BatchNo string `json:"batch_no"`
RedPacketType int `json:"red_packet_type"`
GoodsQuantity int `json:"goods_quantity"`
FailReason string `json:"fail_reason,omitempty"`
GoodsId int64 `json:"goods_id"`
SepParameters string `json:"sep_parameters"`
SepRate int `json:"sep_rate"`
SubsidyType int `json:"subsidy_type"`
CustomParameters string `json:"custom_parameters"`
GoodsThumbnailUrl string `json:"goods_thumbnail_url"`
ShareRate int `json:"share_rate"`
PromotionAmount int64 `json:"promotion_amount"`
OrderPayTime int64 `json:"order_pay_time"`
OrderReceiveTime int64 `json:"order_receive_time"`
OrderSettleTime int64 `json:"order_settle_time"`
ActivityTags []int `json:"activity_tags"`
GroupId int64 `json:"group_id"`
SepPid string `json:"sep_pid"`
OrderStatusDesc string `json:"order_status_desc"`
ShareAmount int `json:"share_amount"`
OrderId string `json:"order_id"`
GoodsSign string `json:"goods_sign"`
OrderSn string `json:"order_sn"`
OrderVerifyTime int64 `json:"order_verify_time"`
PId string `json:"p_id"`
ZsDuoId int `json:"zs_duo_id"`
} `json:"order_list"`
RequestId string `json:"request_id"`
} `json:"order_list_get_response"`
}
func (app *App) OrderListIncrementGet(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.order.list.increment.get", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,35 @@
package pinduoduo
// ResourceUrlGenResult 返回参数
type ResourceUrlGenResult struct {
ResourceUrlResponse struct {
MultiUrlList struct {
ShortUrl string `json:"short_url"` // 频道推广短链接
Url string `json:"url"` // 频道推广长链接
} `json:"multi_url_list"` // 多人团链接
Sign string `json:"sign,omitempty"` // sign
SingleUrlList struct {
ShortUrl string `json:"short_url"` // 频道推广短链接
Url string `json:"url"` // 频道推广长链接
} `json:"single_url_list"` // 单人团链接
WeAppInfo struct {
AppId string `json:"app_id"` // 小程序id
BannerUrl string `json:"banner_url"` // Banner图
Desc string `json:"desc"` // 描述
PagePath string `json:"page_path"` // 小程序path值
SourceDisplayName string `json:"source_display_name"` // 来源名
Title string `json:"title"` // 小程序标题
UserName string `json:"user_name"` // 用户名
WeAppIconUrl string `json:"we_app_icon_url"` // 小程序icon
} `json:"we_app_info"` // 拼多多福利券微信小程序信息
} `json:"resource_url_response"`
}
// ResourceUrlGen 创建多多进宝推广位 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.pid.generate
func (app *App) ResourceUrlGen(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.resource.url.gen", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,51 @@
package pinduoduo
// RpPromUrlGenerateResult 返回参数
type RpPromUrlGenerateResult struct {
RpPromotionUrlGenerateResponse struct {
ResourceList []struct {
Desc string `json:"desc"` // 活动描述
Url string `json:"url"` // 活动地址
} `json:"resource_list"`
UrlList []struct {
MobileShortUrl string `json:"mobile_short_url"` // 推广移动短链接对应出参mobile_url的短链接与mobile_url功能一致。
MobileUrl string `json:"mobile_url"` // 推广移动链接用户安装拼多多APP的情况下会唤起APP否则唤起H5页面
MultiGroupMobileShortUrl string `json:"multi_group_mobile_short_url"` // 推广多人团移动短链接
MultiGroupMobileUrl string `json:"multi_group_mobile_url"` // 推广多人团移动链接用户安装拼多多APP的情况下会唤起APP否则唤起H5页面
MultiGroupShortUrl string `json:"multi_group_short_url"` // 推广多人团短链接
MultiGroupUrl string `json:"multi_group_url"` // 推广多人团链接唤起H5页面
QqAppInfo struct {
AppId string `json:"app_id"` // 拼多多小程序id
BannerUrl string `json:"banner_url"` // Banner图
Desc string `json:"desc"` // 描述
PagePath string `json:"page_path"` // 小程序path值
QqAppIconUrl string `json:"qq_app_icon_url"` // 小程序icon
SourceDisplayName string `json:"source_display_name"` // 来源名
Title string `json:"title"` // 小程序标题
UserName string `json:"user_name"` // 用户名
} `json:"qq_app_info"` // qq小程序信息
SchemaUrl string `json:"schema_url"` // schema链接用户安装拼多多APP的情况下会唤起APP需客户端支持schema跳转协议
ShortUrl string `json:"short_url"` // 推广短链接对应出参url的短链接与url功能一致
Url string `json:"url"` // 普通推广长链接唤起H5页面
WeAppInfo struct {
AppId string `json:"app_id"` // 小程序id
BannerUrl string `json:"banner_url"` // Banner图
Desc string `json:"desc"` // 描述
PagePath string `json:"page_path"` // 小程序path值
SourceDisplayName string `json:"source_display_name"` // 来源名
Title string `json:"title"` // 小程序标题
UserName string `json:"user_name"` // 用户名
WeAppIconUrl string `json:"we_app_icon_url"` // 小程序icon
} `json:"we_app_info"` // 拼多多福利券微信小程序信息
} `json:"url_list"`
} `json:"rp_promotion_url_generate_response"`
}
// RpPromUrlGenerate 生成营销工具推广链接 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.rp.prom.url.generate
func (app *App) RpPromUrlGenerate(notMustParams ...Params) (body []byte, err error) {
// 参数
params := NewParamsWithType("pdd.ddk.rp.prom.url.generate", notMustParams...)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,24 @@
package pinduoduo
// GoodsCatsGetResult 返回参数
type GoodsCatsGetResult struct {
GoodsCatsGetResponse struct {
GoodsCatsList []struct {
CatId int `json:"cat_id"` // 商品类目ID
CatName string `json:"cat_name"` // 商品类目名称
Level int `json:"level"` // 类目层级1-一级类目2-二级类目3-三级类目4-四级类目
ParentCatID int `json:"parent_cat_id"` // id所属父类目ID其中parent_id=0时为顶级节点
} `json:"goods_cats_list"`
} `json:"goods_cats_get_response"`
}
// GoodsCatsGet 商品标准类目接口 https://open.pinduoduo.com/application/document/api?id=pdd.goods.cats.get
func (app *App) GoodsCatsGet(parentOptId int) (body []byte, err error) {
// 参数
param := NewParams()
param.Set("parent_cat_id", parentOptId)
params := NewParamsWithType("pdd.goods.cats.get", param)
// 请求
body, err = app.request(params)
return
}

@ -0,0 +1,24 @@
package pinduoduo
// GoodsOptGetResult 返回参数
type GoodsOptGetResult struct {
GoodsOptGetResponse struct {
GoodsOptList []struct {
Level int `json:"level"` // 层级1-一级2-二级3-三级4-四级
OptId int `json:"opt_id"` // 商品标签ID
OptName string `json:"opt_name"` // 商品标签名
ParentOptId int `json:"parent_opt_id"` // id所属父ID其中parent_id=0时为顶级节点
} `json:"goods_opt_list"`
} `json:"goods_opt_get_response"`
}
// GoodsOptGet 查询商品标签列表 https://open.pinduoduo.com/application/document/api?id=pdd.goods.opt.get
func (app *App) GoodsOptGet(parentOptId int) (body []byte, err error) {
// 参数
param := NewParams()
param.Set("parent_opt_id", parentOptId)
params := NewParamsWithType("pdd.goods.opt.get", param)
// 请求
body, err = app.request(params)
return
}

@ -1,95 +0,0 @@
package pinduoduo
import (
"bytes"
"crypto/md5"
"encoding/hex"
"github.com/bitly/go-simplejson"
"github.com/dtapps/go-library/utils/goparams"
"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(goparams.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, goparams.GetParamsString(val))
}
return args.Encode()
}

@ -1,7 +0,0 @@
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
GoodsDetail = "pdd.ddk.goods.detail" // 多多进宝商品详情查询 https://jinbao.pinduoduo.com/third-party/api-detail?apiName=pdd.ddk.goods.detail
)
Loading…
Cancel
Save