502 lines
13 KiB
Markdown
502 lines
13 KiB
Markdown
# pdd.dll 使用教程
|
||
## 1.创建DLL工具实例
|
||
### 加载DLL文件
|
||
```gotemplate
|
||
// PddDLL 拼多多工具DLL结构
|
||
type pddDLL struct {
|
||
dll *syscall.DLL
|
||
pddGoodsOuterCatMappingGet *syscall.Proc // 类目预测
|
||
freeCString *syscall.Proc // 释放C字符串
|
||
}
|
||
|
||
// 初始化pddDLL
|
||
func InitPddDLL() (*pddDLL, error) {
|
||
dllPath := filepath.Join("dll", "pdd.dll")
|
||
if _, err := os.Stat(dllPath); os.IsNotExist(err) {
|
||
return nil, fmt.Errorf("pdd DLL 不存在: %s", dllPath)
|
||
}
|
||
if dll, err := syscall.LoadDLL(dllPath); err != nil {
|
||
return nil, fmt.Errorf("加载pdd DLL 失败: %s", err)
|
||
} else {
|
||
return &pddDLL{
|
||
dll: dll,
|
||
pddGoodsOuterCatMappingGet: dll.MustFindProc("PddGoodsOuterCatMappingGet"),
|
||
freeCString: dll.MustFindProc("FreeCString"),
|
||
}, nil
|
||
}
|
||
}
|
||
|
||
dll, err := InitPddDLL()
|
||
```
|
||
|
||
### 获取C字符串
|
||
```gotemplate
|
||
// cStr 获取C字符串
|
||
func (m *pddDLL) cStr(p uintptr) string {
|
||
if p == 0 {
|
||
return ""
|
||
}
|
||
b := []byte{}
|
||
for i := uintptr(0); ; i++ {
|
||
c := *(*byte)(unsafe.Pointer(p + i))
|
||
if c == 0 {
|
||
break
|
||
}
|
||
b = append(b, c)
|
||
}
|
||
s := string(b)
|
||
if m.freeCString != nil {
|
||
m.freeCString.Call(p)
|
||
}
|
||
return s
|
||
}
|
||
```
|
||
|
||
## 2. 使用dll函数示例
|
||
```gotemplate
|
||
// 类目预测
|
||
func (m *pddDLL) PddGoodsOuterCatMappingGet(clientId, clientSecret, accessToken,
|
||
outerCatId, outerCatName, outerGoodsName string) (string, error) {
|
||
proc, err := m.dll.FindProc("PddGoodsOuterCatMappingGet")
|
||
if err != nil {
|
||
return "", fmt.Errorf("找不到函数 PddGoodsOuterCatMappingGet: %v", err)
|
||
}
|
||
|
||
clientIdPtr, _ := syscall.BytePtrFromString(clientId)
|
||
clientSecretPtr, _ := syscall.BytePtrFromString(clientSecret)
|
||
accessTokenPtr, _ := syscall.BytePtrFromString(accessToken)
|
||
outerCatIdPtr, _ := syscall.BytePtrFromString(outerCatId)
|
||
outerCatNamePtr, _ := syscall.BytePtrFromString(outerCatName)
|
||
outerGoodsNamePtr, _ := syscall.BytePtrFromString(outerGoodsName)
|
||
|
||
resultPtr, _, _ := proc.Call(
|
||
uintptr(unsafe.Pointer(clientIdPtr)),
|
||
uintptr(unsafe.Pointer(clientSecretPtr)),
|
||
uintptr(unsafe.Pointer(accessTokenPtr)),
|
||
uintptr(unsafe.Pointer(outerCatIdPtr)),
|
||
uintptr(unsafe.Pointer(outerCatNamePtr)),
|
||
uintptr(unsafe.Pointer(outerGoodsNamePtr)),
|
||
)
|
||
|
||
result := m.cStr(resultPtr)
|
||
return result, nil
|
||
}
|
||
```
|
||
|
||
# 接口详情
|
||
## 1. 类目预测--PddGoodsOuterCatMappingGet
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddGoodsOuterCatMappingGet(clientId, clientSecret, accessToken,
|
||
outerCatId, outerCatName, outerGoodsName)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| outerCatId | string | 是 | 外部平台类目ID |
|
||
| outerCatName | string | 是 | 外部平台类目名称 |
|
||
| outerGoodsName | string | 是 | 外部商品名称 |
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"outer_cat_mapping_get_response": {
|
||
"cat_id2": 16028,
|
||
"cat_id3": 16031,
|
||
"cat_id1": 15543,
|
||
"request_id": "17666480184871649",
|
||
"cat_id4": 0
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 2. 快递公司查看--PddLogisticsCompaniesGet
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddLogisticsCompaniesGet(clientId, clientSecret)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"logistics_companies_get_response": {
|
||
"logistics_companies": [
|
||
{
|
||
"available": 1,
|
||
"code": "SF",
|
||
"id": 1,
|
||
"logistics_company": "顺丰速运"
|
||
},
|
||
{
|
||
"available": 1,
|
||
"code": "STO",
|
||
"id": 2,
|
||
"logistics_company": "申通快递"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 3. erp打单信息同步--PddErpOrderSync
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddErpOrderSync(clientId, clientSecret, accessToken, logisticsId,
|
||
orderSn, orderState, waybillNo)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| logisticsId | string | 是 | 物流公司ID |
|
||
| orderSn | string | 是 | 拼多多订单号 |
|
||
| orderState | string | 是 | 订单状态 |
|
||
| waybillNo | string | 是 | 运单号 |
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"erp_order_sync_response": {
|
||
"is_success": true,
|
||
"request_id": "17666480184871650"
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 4. 拼多多订单同步--PddOrderSynchronization
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddOrderSynchronization(clientId, clientSecret, accessToken, logisticsCompany, logisticsOnlineSendJson)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| logisticsCompany | string | 是 | 物流公司名称 |
|
||
| logisticsOnlineSendJson | string | 是 | 拼多多订单同步json字符串 |
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"erp_order_sync_response": {
|
||
"is_success": true,
|
||
"request_id": "17666480184871651"
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 5. 商品图片上传接口--PddGoodsImgUpload
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddGoodsImgUpload(clientId, clientSecret, accessToken, filePath)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| filePath | string | 是 | 图片文件路径 |
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"goods_img_upload_response": {
|
||
"image_url": "http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg",
|
||
"request_id": "17666480184871652"
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 6. 商品新增接口--PddGoodsAdd
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddGoodsAdd(clientId, clientSecret, accessToken, goodsAddJson)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| goodsAddJson | string | 是 | 商品信息JSON字符串 |
|
||
#### 商品信息JSON结构示例
|
||
```json
|
||
{
|
||
"goods_name": "测试商品",
|
||
"goods_desc": "商品描述",
|
||
"cat_id": 20111,
|
||
"goods_type": 1,
|
||
"market_price": 9900,
|
||
"is_folt": false,
|
||
"is_pre_sale": false,
|
||
"is_refundable": true,
|
||
"shipment_limit_second": 86400,
|
||
"cost_template_id": 10001,
|
||
"image_url": "http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg",
|
||
"carousel_gallery": [
|
||
"http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg"
|
||
],
|
||
"detail_gallery": [
|
||
"http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg"
|
||
],
|
||
"sku_list": [
|
||
{
|
||
"out_sku_sn": "SKU001",
|
||
"price": 8900,
|
||
"quantity": 100,
|
||
"spec_id_list": "1001:10001",
|
||
"sku_properties": [
|
||
{
|
||
"ref_pid": 1001,
|
||
"value": "红色",
|
||
"vid": 10001,
|
||
"punit": "个"
|
||
}
|
||
],
|
||
"is_onsale": 1,
|
||
"limit_quantity": 10,
|
||
"multi_price": 8500,
|
||
"thumb_url": "http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg",
|
||
"weight": 500
|
||
}
|
||
]
|
||
}
|
||
```
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"goods_add_response": {
|
||
"goods_id": 123456789,
|
||
"goods_name": "测试商品",
|
||
"goods_sn": "G202501200001",
|
||
"request_id": "17666480184871653"
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 7. 联合拼多多图片上传的商品新增--SelfPddGoodsAdd
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.SelfPddGoodsAdd(clientId, clientSecret, accessToken, filePath, goodsAddJson)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| filePath | string | 是 | 图片文件路径 |
|
||
| goodsAddJson | string | 是 | 商品信息JSON字符串(不需包含image_url)|
|
||
#### 接口说明
|
||
此接口为组合接口,内部执行以下步骤:
|
||
1.上传商品主图文件到拼多多服务器
|
||
2.获取图片URL并自动填充到商品信息中
|
||
3.调用商品新增接口创建商品
|
||
#### 商品信息JSON结构示例
|
||
```json
|
||
{
|
||
"goods_name": "测试商品",
|
||
"goods_desc": "商品描述",
|
||
"cat_id": 20111,
|
||
"goods_type": 1,
|
||
"market_price": 9900,
|
||
"is_folt": false,
|
||
"is_pre_sale": false,
|
||
"is_refundable": true,
|
||
"shipment_limit_second": 86400,
|
||
"cost_template_id": 10001,
|
||
"image_url": "",
|
||
"carousel_gallery": [
|
||
"http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg"
|
||
],
|
||
"detail_gallery": [
|
||
"http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg"
|
||
],
|
||
"sku_list": [
|
||
{
|
||
"out_sku_sn": "SKU001",
|
||
"price": 8900,
|
||
"quantity": 100,
|
||
"spec_id_list": "1001:10001",
|
||
"sku_properties": [
|
||
{
|
||
"ref_pid": 1001,
|
||
"value": "红色",
|
||
"vid": 10001,
|
||
"punit": "个"
|
||
}
|
||
],
|
||
"is_onsale": 1,
|
||
"limit_quantity": 10,
|
||
"multi_price": 8500,
|
||
"thumb_url": "http://oms-imageimg.pinduoduo.com/upload/2025/01/20/e9a8c1b6e1a84f1d8d7c3a8b9e2f5c7d.jpg",
|
||
"weight": 500
|
||
}
|
||
]
|
||
}
|
||
```
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"goods_add_response": {
|
||
"goods_id": 123456790,
|
||
"goods_name": "测试商品",
|
||
"goods_sn": "G202501200002",
|
||
"request_id": "17666480184871654"
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 8. 批量数据解密脱敏接口--PddOpenDecryptMaskBatch
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.PddOpenDecryptMaskBatch(clientId, clientSecret, accessToken, reqJson)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| clientId | string | 是 | 拼多多开放平台ClientID |
|
||
| clientSecret | string | 是 | 拼多多开放平台ClientSecret |
|
||
| accessToken | string | 是 | 授权令牌 |
|
||
| reqJson | string | 是 | 信息JSON字符串 |
|
||
#### 信息JSON结构示例
|
||
```json
|
||
[
|
||
{
|
||
"data_tag": "251229-272441044622514",
|
||
"encrypted_data": "~AgAAAAPlscEH0psOJAEXpTdsLOWvDJ9bB7IEjIoqNfiDhhJR9NHOxsdZ+PEFluSSCngCikoDU+CP/sSXZJ92ic7+PdNlJNLA7g/6VUMDWF6RvjW9IeRN+lKNarsjWDQR~0~"
|
||
}
|
||
]
|
||
```
|
||
### 响应示例
|
||
```json
|
||
{
|
||
"open_decrypt_mask_batch_response": {
|
||
"data_decrypt_list": [
|
||
{
|
||
"data_tag": "str",
|
||
"data_type": 0,
|
||
"decrypted_data": "str",
|
||
"encrypted_data": "str",
|
||
"error_code": 0,
|
||
"error_msg": "str"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
### 错误响应示例
|
||
```json
|
||
{
|
||
"error_response": {
|
||
"error_msg": "公共参数错误:type",
|
||
"sub_msg": "",
|
||
"sub_code": null,
|
||
"error_code": 10001,
|
||
"request_id": "15440104776643887"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 12.释放C字符串内存--FreeCString
|
||
### 请求信息
|
||
```gotemplate
|
||
dll.FreeCString(str)
|
||
```
|
||
### 请求参数
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
|--|--|--|----------|
|
||
| str | string | 是 | 需要释放的字符串 |
|