233 lines
7.2 KiB
Go
233 lines
7.2 KiB
Go
package main
|
|
|
|
import "C"
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
// pddDLL 拼多多API调用结构体
|
|
type pddDLL struct {
|
|
dll *syscall.DLL
|
|
pddGoodsOuterCatMappingGet *syscall.Proc // 类目预测
|
|
pddLogisticsCompaniesGet *syscall.Proc // 快递公司查看
|
|
pddErpOrderSync *syscall.Proc // erp打单信息同步
|
|
freeCString *syscall.Proc // 释放C字符串
|
|
}
|
|
|
|
// InitPddDLL 初始化pddDLL
|
|
func InitPddDLL() (*pddDLL, error) {
|
|
dllPath := filepath.Join("pdd", "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"),
|
|
pddLogisticsCompaniesGet: dll.MustFindProc("PddLogisticsCompaniesGet"),
|
|
pddErpOrderSync: dll.MustFindProc("PddErpOrderSync"),
|
|
freeCString: dll.MustFindProc("FreeCString"),
|
|
}, nil
|
|
}
|
|
}
|
|
|
|
// 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
|
|
}
|
|
|
|
// PddGoodsOuterCatMappingGet 类目预测
|
|
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)
|
|
info, _, err := 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)),
|
|
)
|
|
if err != nil && err.Error() != "The operation completed successfully." {
|
|
return "", fmt.Errorf("调用函数 PddGoodsOuterCatMappingGet 失败: %v", err)
|
|
}
|
|
return m.cStr(info), nil
|
|
}
|
|
|
|
// PddLogisticsCompaniesGet 快递公司查看
|
|
func (m *pddDLL) PddLogisticsCompaniesGet(clientId, clientSecret string) (string, error) {
|
|
proc, err := m.dll.FindProc("PddLogisticsCompaniesGet")
|
|
if err != nil {
|
|
return "", fmt.Errorf("找不到函数 PddLogisticsCompaniesGet 函数: %v", err)
|
|
}
|
|
|
|
clientIdPtr, _ := syscall.BytePtrFromString(clientId)
|
|
clientSecretPtr, _ := syscall.BytePtrFromString(clientSecret)
|
|
info, _, err := proc.Call(
|
|
uintptr(unsafe.Pointer(clientIdPtr)),
|
|
uintptr(unsafe.Pointer(clientSecretPtr)),
|
|
)
|
|
if err != nil && err.Error() != "The operation completed successfully." {
|
|
return "", fmt.Errorf("调用函数 PddGoodsOuterCatMappingGet 失败: %v", err)
|
|
}
|
|
return m.cStr(info), nil
|
|
}
|
|
|
|
// PddErpOrderSync erp打单信息同步
|
|
func (m *pddDLL) PddErpOrderSync(clientId, clientSecret, accessToken, logisticsId,
|
|
orderSn, orderState, waybillNo string) (string, error) {
|
|
proc, err := m.dll.FindProc("PddErpOrderSync")
|
|
if err != nil {
|
|
return "", fmt.Errorf("找不到函数 PddErpOrderSync 函数: %v", err)
|
|
}
|
|
|
|
clientIdPtr, _ := syscall.BytePtrFromString(clientId)
|
|
clientSecretPtr, _ := syscall.BytePtrFromString(clientSecret)
|
|
accessTokenPtr, _ := syscall.BytePtrFromString(accessToken)
|
|
logisticsIdPtr, _ := syscall.BytePtrFromString(logisticsId)
|
|
orderSnPtr, _ := syscall.BytePtrFromString(orderSn)
|
|
orderStatePtr, _ := syscall.BytePtrFromString(orderState)
|
|
waybillNoPtr, _ := syscall.BytePtrFromString(waybillNo)
|
|
info, _, err := proc.Call(
|
|
uintptr(unsafe.Pointer(clientIdPtr)),
|
|
uintptr(unsafe.Pointer(clientSecretPtr)),
|
|
uintptr(unsafe.Pointer(accessTokenPtr)),
|
|
uintptr(unsafe.Pointer(logisticsIdPtr)),
|
|
uintptr(unsafe.Pointer(orderSnPtr)),
|
|
uintptr(unsafe.Pointer(orderStatePtr)),
|
|
uintptr(unsafe.Pointer(waybillNoPtr)),
|
|
)
|
|
if err != nil && err.Error() != "The operation completed successfully." {
|
|
return "", fmt.Errorf("调用函数 PddGoodsOuterCatMappingGet 失败: %v", err)
|
|
}
|
|
return m.cStr(info), nil
|
|
}
|
|
|
|
func main() {
|
|
clientId := "203c5a7ba8bd4b8488d5e26f93052642"
|
|
clientSecret := "892ffaa86e12b7a3d8d2942b669d9aa520ad8179"
|
|
accessToken := "bd96218bb2a146779701506dc1e5e5c478692539"
|
|
//outerCatId := "15543"
|
|
//outerCatName := "书籍/杂志/报纸"
|
|
//outerGoodsName := "书籍医家金鉴 妇产科学卷"
|
|
//logisticsId := 0
|
|
//orderSn := ""
|
|
//orderState := ""
|
|
//waybillNo := ""
|
|
//logisticsCompany := "德邦"
|
|
|
|
// 初始化
|
|
//dll, err := InitPddDLL()
|
|
//if err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
|
|
// 类目预测
|
|
//info, err := dll.PddGoodsOuterCatMappingGet(clientId, clientSecret, accessToken, outerCatId, outerCatName, outerGoodsName)
|
|
//if err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
//fmt.Println(info)
|
|
|
|
// 快递公司查看
|
|
//get, err := dll.PddLogisticsCompaniesGet(clientId, clientSecret)
|
|
//if err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
//fmt.Println(get)
|
|
//var logisticsResponse LogisticsResponse
|
|
//if err := json.Unmarshal([]byte(get), &logisticsResponse); err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
//
|
|
//var company string
|
|
//var available int
|
|
//var code string
|
|
//for _, logisticsCompanies := range logisticsResponse.LogisticsCompaniesGetResponse.LogisticsCompanies {
|
|
// if strings.Contains(logisticsCompanies.LogisticsCompany, logisticsCompany) {
|
|
// company = logisticsCompanies.LogisticsCompany
|
|
// logisticsId = logisticsCompanies.ID
|
|
// available = logisticsCompanies.Available
|
|
// code = logisticsCompanies.Code
|
|
// break
|
|
// }
|
|
//}
|
|
//fmt.Println("快递公司名称: ", company)
|
|
//fmt.Println("快递公司编码: ", logisticsId)
|
|
//fmt.Println("是否有效: ", available)
|
|
//fmt.Println("物流公司代码: ", code)
|
|
|
|
//file := "D:\\isbn_images\\result\\9780007935192.jpg"
|
|
//open, err := os.Open(file)
|
|
//if err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
//defer open.Close()
|
|
////base := filepath.Base(file)
|
|
//// 商品图片上传接口
|
|
//upload, err := pddGoodsImgUpload(clientId, clientSecret, accessToken, file)
|
|
//if err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
//fmt.Println(upload)
|
|
|
|
//get, err := pddLogisticsCompaniesGet(clientId, clientSecret)
|
|
//if err != nil {
|
|
// fmt.Println(err)
|
|
//}
|
|
//fmt.Println(get)
|
|
|
|
// 脱敏
|
|
|
|
jsonStr := `[{"data_tag":"251229-272441044622514","encrypted_data":"~AgAAAAPlscEH0psOJAEXpTdsLOWvDJ9bB7IEjIoqNfiDhhJR9NHOxsdZ+PEFluSSCngCikoDU+CP/sSXZJ92ic7+PdNlJNLA7g/6VUMDWF6RvjW9IeRN+lKNarsjWDQR~0~"}]`
|
|
|
|
//var records []DataList
|
|
//err := json.Unmarshal([]byte(jsonStr), &records)
|
|
//if err != nil {
|
|
// log.Fatal("解析JSON失败:", err)
|
|
//}
|
|
|
|
batch, err := pddOpenDecryptMaskBatch(clientId, clientSecret, accessToken, jsonStr)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
fmt.Println(batch)
|
|
|
|
}
|
|
|
|
type DataList struct {
|
|
DataTag string `json:"data_tag"`
|
|
EncryptedData string `json:"encrypted_data"`
|
|
}
|