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() { //// 获取商品类目 //info, err := outPddAuthGetCats() //if err != nil { // fmt.Printf(err.Error()) //} //fmt.Println(info) //// 生成自定义规格 //info, err := outPddAuthSetSpec(3820, "全新", "e7e8a719b9b74378980914c9ca9e4a3e57a6a0c8") //if err != nil { // fmt.Printf(err.Error()) //} //fmt.Println(info) //// 获取商品详情信息 //info, err := outPddAuthGetGoodsDetail("770621582375", "e7e8a719b9b74378980914c9ca9e4a3e57a6a0c8") //if err != nil { // fmt.Printf(err.Error()) //} //fmt.Println(info) //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) //clientId := "203c5a7ba8bd4b8488d5e26f93052642" //clientSecret := "892ffaa86e12b7a3d8d2942b669d9aa520ad8179" //accessToken := "5b1e9506827049a7a9335302e917d2b896a3d6c7" //logisticsCompany := "韵达快递" //logisticsId := "" //orderSn := "260107-652497405582514" //orderState := "1" //waybillNo := "312944253800986" // //synchronization, err := pddOrderSynchronization(clientId, clientSecret, accessToken, logisticsCompany, logisticsId, orderSn, orderState, waybillNo) //if err != nil { // fmt.Println(err) //} //fmt.Println(string(synchronization)) //} type DataList struct { DataTag string `json:"data_tag"` EncryptedData string `json:"encrypted_data"` } //func main() { // //jsonStr := `{"goods_name":"未厌居习作未厌居习作9787543421523叶圣陶(1894.10~1988.2)","carousel_gallery":["https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg","https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg","https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg","https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg","https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg","https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg"],"cat_id":0,"goods_type":1,"market_price":515,"detail_gallery":[],"out_goods_id":"9787543421523","sku_list":[{"is_onsale":0,"limit_quantity":999,"multi_price":415,"price":515,"sku_properties":[{"punit":"","ref_pid":0,"value":"","vid":0,"spec_id_list":"1","thumb_url":"https://img.pddpic.com/open-gw/2025-11-30/30eb451b-1fea-4f23-be25-b97454bf677a.jpeg","weight":250}],"quantity":999}],"is_folt":false,"is_pre_sale":false,"is_refundable":false,"second_hand":true,"cost_template_id":0,"country_id":0,"shipment_limit_second":172800}` // add, err := pddTimeGet("203c5a7ba8bd4b8488d5e26f93052642", // "892ffaa86e12b7a3d8d2942b669d9aa520ad8179", // "1177d0c36419417eba692a3fea88f611d42f0665") // if err != nil { // fmt.Println(err.Error()) // } // fmt.Println(add) //} //func main() { // 替换为你的图片路径 //imagePath := "D:\\isbn_images\\9771005867004.jpg" //url := "http://103.236.68.64:19000/public-img/bbb.jpg" // http://36.212.7.35:19000/public-img/e5ef25ae85853f3e_s.jpg //fPath := "D:\\isbn_images\\9780064408561.jpg" // //baseUrl := "http://36.212.7.35:19000/public-img/" + filepath.Base(fPath) ////picSpaceResult, err := utils.UploadImageToSpace(imgResult.PicPath, baseUrl) // //space, err := UploadImageToSpace(fPath, baseUrl) //if err != nil { // fmt.Println(err) //} //fmt.Println(space) //}