diff --git a/platformapi/jdshopapi/jxshopapi_test.go b/platformapi/jdshopapi/jxshopapi_test.go index d1ac850c..968794bf 100644 --- a/platformapi/jdshopapi/jxshopapi_test.go +++ b/platformapi/jdshopapi/jxshopapi_test.go @@ -16,8 +16,11 @@ func init() { baseapi.Init(sugarLogger) //api = New("de8157b447584885910f429011e49cb93yjq", "E1D746D42474D5F1F1A10CECE75D99F6", "efa7e1d1a22640fa990e6cf164b28608") api = New("9ad9cf5fc8b140b19a1dbbb700b47676kown", "D5E8352BE0786ED16F77B4548F62F09A", "71e1061ac2f246f6ac27efb900edba12") - api.SetCookieWithStr(` -shshshfpa=b02d5da7-4399-dacb-d2af-dc8d6c460307-1606980337; shshshfpb=xasBIJG4GQtMArMLGnT8nqQ%3D%3D; UM_distinctid=17e421e35135b9-0570446b8f842a-3354487a-1fa400-17e421e3514257; user-key=fe50847a-cc2e-4494-bd7a-4e1cd1ec0324; areaId=22; pinId=WMIzMhF5BfKZPDIlG3adMQ; pin=shop_jxcs2021; unick=shop_jxcs2021; _tp=326SVoMf64R2LVMVFCEfiQ%3D%3D; _pst=shop_jxcs2021; PCSYCityID=CN_510000_510100_0; ipLoc-djd=22-1930-50948-57092; ceshi3.com=000; __jdu=1606964403676243720102; csrf_token=959385ad-4016-4b27-8fc2-64464f09c944; unpl=JF8EAKBnNSttCEkBVxhQTxVFS1RUWwkKGR9XPGIGUwgLSwdSHgYaFxl7XlVdXhRKEh9vZxRUXVNIVA4bBisSEXteXFZZDkoWAGZXNWReWHtVNRsFGhUYTFhRX18PTRAAamUDV1xYSlc1KwUbGyB7bVdWVQxMEABqZjVVbVpKVQYdCxMSEEJtHzBcRUsQAmhvAlFYWUlTAxwBHhAWSFxUX144SicA; __jdv=76161171|kong|t_299570028_|tuiguang|a3dc2ce6d1814e3c9eb426db1bf45048|1649647276250; bjd.advert.popup=5afaf4c2300fcde28c9d5a7582fdd73e; cn=1; shshshfp=50f73bc4e775836e11d201adab7ff646; language=zh_CN; ip_cityCode=1930; TrackID=1Q5P3-ullX0lQhmJdAIXwEIpUA3TIyGcmFdghZqHIYksZoVyEPpMxYDgIh0d8dfackJbRBfCxeMp-iuv3PHDKgMCbuVMeQZCK3ubapO6Fv6riDlcNfehEK-H8_i5QuF5v; __jda=191429163.1606964403676243720102.1606964404.1647847906.1648015537.156; __jdc=191429163; 3AB9D23F7A4B3C9B=3LXEVQM6COV5NINMQN77BN64JE2WJ76EIPRTIYTDM7GIU7BHDAMFOVQT7WP33PVNBO2DUGASISKUTTJX65DM4ZME3Y; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2XJVD24IJG4VRA63GZVNQY5IXRTCNE6YVKRXISVJLYYILNIP6OVKS3GKYL2ZCNGXSSG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ASC3D6DGS4WD4QQ5TAYF53SJ3SX7CBNYDPXFCM2ZEIMWTNGLNZHVJ3U6RK5ZBCQLZE; _vender_new_=GI63BGTJFDBQ5WAGCFF7AT6OU2UF5TDBCVVAW3W4ZGGIVOLTPK57TQKS6B2UAQGJ2CD7LXKS4Q7CWM2X5H63ED5FP7T7K3ABVJHQHYWNX4PRCUPH6XGAGN2CFHSWF22HF5JQJ4GWGC3NJSCESVRBTZGVLMVYTOT3TDDIV5MLM3NIPN5O5CIXUF5LOA44565AQ2JVMNVNKT7WMY6RWBASMJYKDSTITLP6WXMXJDJYMXAWOY2XWQCXI6RB3XVDWHR6HDOD2SNRC5NX4DRRYOYE7UGG7DZYIVI7Y64CIIPMRFBNWLLP3MQXERMDYTSLRPIZTIMGFR4OHOZ7HBC2QYY46IA63RLQ6O3BSIVFISTGB5TRZBQHZENZ3YT5J2L3PXJ3K4HTWYMSFJKEUZQPM4OIMB6JDMF6LW5NZEFZK5NO627VUSSP5BZYXV5DEZZGSFF6OIQDZKME7A4WZC3ZCVCJNC6FXJWD6YYUE3LXEPQ346CACIL4NDRACRE3LJQSJGPV573IWHJ6ILG44KW6UU4LPJ24MRVU4AJTEC7ZKG5EED5FFB6J75EI6C677TNCOUENHGGL4C5DB4GZZP3DAKLSSLIU5RJVBQR3GD2FEYBEME5BJ6CWEDNRA5DT4JO4DYMDBKDHJRLMZ34RB72SYFOC5RUCVACP2MTWIF57ZELWHUH4RK4HYT3A; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BSM2ARZ2CP7BZNHYHJTN2W4KTYUA; b-sec=S2JWP6CAFP7K4DTHFD36EP2AMQLBY2BVKWF7A3DQ7NFGDIC7II3OKWREQFGL3DVOBV5BJNHAM5IJI; thor=0067E0DF0B31013CB97AE7793EC6C972FD1F47E82C81CA371FEA19140EB6B5886558DE30A9B13F001E0F3CF06F304350C65490CB1F719FCF73ED070D6C2718A2983484F5E5C77F6D72A3D9F6A503B94FECE1369726094F7686F2A8860F6474BCEAEA97621D2692F509758D4680A01C0C422486594F7AE97BA78B325DEC2B59E944AFB5CFF692BFAB726197681AB9DA69`) - // api.SetCookie("thor", "5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C5E43030CF54E4A3A8F5E760492948E69B763D115FE234A59948BA538A4F7E18F38B80F818E28EAE71F1CF5BFE2D0DC456D56E8BEAEF10D398C709D9A4EB46923C7E63867435BD42996F1570A816FD1B0B247CD9756A1184DD61317D28BBF77F828691684AD6E60801B2BB38F9DE086D73") + api.SetCookieWithStr(`__jdu=16496474755891719920568; unpl=JF8EALNnNSttDU0HBElWE0BAQ1oHWw4KGEcLOmRRUVhQHlUBHlIeEBF7XlVdXhRKEh9vZxRUWFNIVQ4YBysSEXteU11bD00VB2xXVgQFDQ8WUUtBSUt-SF1UXVsJSxMHbG4GZG1bS2QFGjIbFRVDWlFYWA5PEwpnZwNUVVBIVQEcCysiF3ttZFpaCUMTC19mNVVtGh8IDRwGGhMQBl1TW1UPThEGaWMBXVVYTVQNEwEaFhdCbVVuXg; areaId=22; ipLoc-djd=22-1930-0-0; PCSYCityID=CN_510000_510100_0; __jdv=122270672|baidu|-|organic|notset|1649658041982; pinId=0P4L2K_8z11ZUOOc8Pyh4w; pin=jxc4liulei; unick=jxc4liulei; _tp=SNh2AuY0LCWg91owlmuS1Q%3D%3D; _pst=jxc4liulei; ceshi3.com=000; _vender_=TNK3O6PALVQGG3P24NJQFXSBHYQNFQDBDAAAFNJIJAECQG2WSQGU5RJ6KSCMVVQQRHQZD6AECSQT3YKKYMRQJDFZHEEPXXHCR3STQEL55G2S4OB7Q6QUPCVBRUAZKDRVRF2MP5BK57JOU57NKALCQQWNR5XRJWJ4AGVNOAVSZUQ4QLRQZLY62QPOMBQHAQAGNLFRNQDWAO2N2HSD33FC2BJBV3S3QAJEAEJCDK4QQCZD6R72KBKNNWCITHQ32SVZKLN526Z2KM5T3DCVCND4YAK4AZMYIVI7ULYSDQD34K63YVC2TN5AJHZFWVYZEQGPZ65I6MTWTEDVOTLQ5D2AY2PBT4JHYXKEV6DFST3FWH5NOTDOJY3IASEKA7SG6LJSRN63HAW554GZVREIKMQHQAC5IVI445ONJ6GMFECU4SNRFRAYRKKYNISVYBKRTNHJCGFX2442SELHC4MUUVLVNBKEDYTDRCC4ZMMDMWSG75UUSWWXISJA; wlfstk_smdl=91h55jyt5sfm1901tdbgehyi67o5iaor; language=zh_CN; TrackID=1oqBrsNfaNsPFZVtK-124Hk1wwpg113ZwmS2Cajw8VwRsb0RCE3ph1kEhr7BLLOhyaQ196cgJsdscvrvGuBRoZm_dfJ1RuXfLocegNnMjRM8; thor=01BA10CC3862D8315A8F658F7DD2838C910211F45B05336172446EFDFC25E684EB4B9A81E2F1012525DBB65E171F7F5049FBFB076DA4FAC0AE7898C136389DC95DE18C259981364B775EAB7385F4CFFB2BEA505D94D2C1B8D5899C421825A32F0E60967FBF20170B0F1F31A27F795E2C40F4F9A141DD7260894C5EA879FE0810E99DDEFFC34ED45459429571A06DB76E; b-sec=3XU3DWGGC3WZSRRUDORQHBODFJXKGJRSNQI4WVMLXDV5NBOUPIJGYAR6Q5ZBP3KGR7GY3A37P62ZS; __jda=191429163.16496474755891719920568.1649647476.1649658035.1649658042.4; __jdc=191429163; 3AB9D23F7A4B3C9B=CKENC5MAUU744ZQDKVRY2L7UIJ23PJRDYJ6HF3ZMQHC5FFD46FMUQXRINFCOC4SKHL5MU3PPNPP4C4AX5ZYBXJ7LZ4; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI5KK7PNC5B5UHJ2HVQ4ENFP57OC2XJVD24IJG4VRA63GZVNQY5IXRTCNE6YVKRXISVJLYYILNIP6OVKS3GKYL2ZCNGXSSG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ASWNF62HTTIQSOQAEZEGZNSDAGQWOFW3BKDHOZ5FDR4MS74LDWUDI4FNIT374F4VDI; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BSREF6DFQ4KIBNVW4OYQNH5G7P3A; _vender_new_=GI63BGTJFDBQ5WAGCFF7AT6OUYWYFPVBHAMTKOO3UVWYDSOEMFHDXQYGEAIFTLTM6ICNHRYEWG53Y3EUFLXVKLH6RMKWRM7G5WA6AFWSDWJGOQXV26K6RBZHAU5DFEA4TBIYSVY45F3GK7X3Q5FHPNMZOCRLURVOQKFM7B2D4BBXHS2QRSAAEO6RPWOL62CWNGPOHMGMAGVAJ77C4IC2ET3NVN6PBVCLI56OPZPR7RNFOAEYFZTP2BSCS5ZMNTWN4HIOX5NUKDT5EUE5QQ722X2U2H7DKPHIF7OHQ6IR4HMB5NA7ACWBHEXOENOEOZZIHVQJO7KJEXLBYIYCIDSN4MFK5XWTHEBPJHFWGJBRDK2VBA6IMVCSGASA4TPDBKXN5UZZAL2JZNRSJTR363NRPUBYOPSTMWNXIMF4UYZPUUZPLTJX56EXDHFSRQF3F4FZXK47M3A33GZHU6UCVEAOAOFE3CAHDO4DMIK7334CESHKG3LT2KSPPDT3GXU5UUQOJGGQTYURJRST3PF7U6LS5URX2WPD7XV3OBKJQ2C3NFHU35TKJPWKEJUIFFUHXPJBS6AEJ7JV4RL5QDPT7ZGGIHSED3ZCDW563MYWFUFFCNMWQEZXMPDHUOHRDBNSOWPCAI4ZR4B4NENJLWZUO3XKK4L3AUAJKICWYY6MNDA`) + //api.SetCookieWithStr(`language=zh_CN; Domain=.jd.com; Expires=Sat, 16-Apr-2022 09:49:40 GMT; Path=/`) + //api.SetCookieWithStr(`_base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI5KK7PNC5B5UHJ2HVQ4ENFP57OC2XJVD24IJG4VRA63GZVNQY5IXRTCNE6YVKRXISVJLYYILNIP6OVKS3GKYL2ZCNGXSSG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4SMNBHRJCTDFHU6SZXCZD6RFXX2OORYGL5H2GYF2IIH2KKD4T72IR4F577G2E5II2OMMXYF2GDYNTS7WGAUXFEWRJ3CTKDBDWMHUKJQF4ZFOTNBBYBIZRXZYERXXIG6ASWNF62HTTIQSOQAEZEGZNSDAGQWOFW3BKDHOZ5FDR4MS74LDWUDI4FNIT374F4VDI; Domain=.jd.com; Expires=Sat, 15-Apr-2023 09:49:40 GMT; Path=/`) + //api.SetCookieWithStr(`_vender_new_=GI63BGTJFDBQ5WAGCFF7AT6OUYWYFPVBHAMTKOO3UVWYDSOEMFHDXQYGEAIFTLTM6ICNHRYEWG53Y3EUFLXVKLH6RMKWRM7G5WA6AFWSDWJGOQXV26K6RBZHAU5DFEA4TBIYSVY45F3GK7X3Q5FHPNMZOCRLURVOQKFM7B2D4BBXHS2QRSAAEO6RPWOL62CWNGPOHMGMAGVAJ77C4IC2ET3NVN6PBVCLI56OPZPR7RNFOAEYFZTP2BSCS5ZMNTWN4HIOX5NUKDT5EUE5QQ722X2U2H7DKPHIF7OHQ6IR4HMB5NA7ACWBHEXOENOEOZZIHVQJO7KJEXLBYIYCIDSN4MFK5XWTHEBPJHFWGJBRDK2VBA6IMVCSGASA4TPDBKXN5UZZAL2JZNRSJTR363NRPUBYOPSTMWNXIMF4UYZPUUZPLTJX56EXDHFSRQF3F4FZXK47M3A33GZHU6UCVEAOAOFE3CAHDO4DMIK7334CESHKG3LT2KSPPDT3GXU5UUQOJGGQTYURJRST3PF7U6LS5URX2WPD7XV3OBKJQ2C3NFHU35TKJPWKEJUIFFUHXPJBS6AEJ7JV4RL5QDPT7ZGGIHSED3ZCDW563MYWFUFFCNMWQEZXMPDHUOHRDBNSOWPCAI4ZR4B4NENJLWZUO3XKK4L3AUAJKICWYY6MNDA; Domain=.shop.jd.com; Expires=Sat, 15-Apr-2023 09:49:40 GMT; Path=/ + //Set-Cookie: b-sec=3XU3DWGGC3WZSRRUDORQHBODFJXKGJRSNQI4WVMLXDV5NBOUPIJOQVBHAPZIOY3FR7GY3A37P62ZS; Domain=.jd.com; Expires=Fri, 15-Apr-2022 21:49:40 GMT; Path=/`) + //api.SetCookie("thor", "5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C5E43030CF54E4A3A8F5E760492948E69B763D115FE234A59948BA538A4F7E18F38B80F818E28EAE71F1CF5BFE2D0DC456D56E8BEAEF10D398C709D9A4EB46923C7E63867435BD42996F1570A816FD1B0B247CD9756A1184DD61317D28BBF77F828691684AD6E60801B2BB38F9DE086D73") } diff --git a/platformapi/jdshopapi/store_page_test.go b/platformapi/jdshopapi/store_page_test.go index 48f895f9..ec9b788f 100644 --- a/platformapi/jdshopapi/store_page_test.go +++ b/platformapi/jdshopapi/store_page_test.go @@ -71,12 +71,12 @@ func TestAllOrders(t *testing.T) { //StoreID: "", //OrderStatusArray: nil, //OrderID: "", - OrderCreateDateRange: []string{"2022-01-26 00:00:46", "2022-01-26 17:19:46"}, - //SelectedTabName: "allOrders", - //SortName: "desc", + //OrderCreateDateRange: []string{"2022-01-26 00:00:46", "2022-01-26 17:19:46"}, + SelectedTabName: "allOrders", + SortName: "desc", }) if err != nil { - t.Fatal(err) + fmt.Println("err========", err) } t.Log(utils.Format4Output(result, false)) } diff --git a/platformapi/tiktok/tiktok.go b/platformapi/tiktok/tiktok.go index 1882b697..f0d10e75 100644 --- a/platformapi/tiktok/tiktok.go +++ b/platformapi/tiktok/tiktok.go @@ -1,74 +1,73 @@ package tiktok -// -//import ( -// "encoding/json" -// "fmt" -// "git.rosy.net.cn/baseapi/platformapi" -// "git.rosy.net.cn/baseapi/utils" -// "net/http" -// "strings" -//) -// -//func (a *API) GetAppID() string { -// return a.clientKey -//} -// -//func (a *API) GetSecret() string { -// return a.clientSecret -//} -// -//func New(clientSecret, clientKey string, config ...*platformapi.APIConfig) *API { -// curConfig := platformapi.DefAPIConfig -// if len(config) > 0 { -// curConfig = *config[0] -// } -// return &API{ -// clientSecret: clientSecret, -// clientKey: clientKey, -// client: &http.Client{Timeout: curConfig.ClientTimeout}, -// config: &curConfig, -// } -//} -// -//func (a *API) AccessAPI(baseUrl, actionApi, method string, bizParams map[string]interface{}) (retVal map[string]interface{}, err error) { -// // 序列化 -// data, err := json.Marshal(bizParams) -// if err != nil { -// return nil, err -// } -// -// // 全路径请求参数 -// fullURL := utils.GenerateGetURL(baseUrl, actionApi, nil) -// -// // 发送请求 -// sendUrl := func() *http.Request { -// var request *http.Request -// if http.MethodPost == method { -// request, _ = http.NewRequest(http.MethodPost, fullURL, strings.NewReader(string(data))) -// } else { -// request, _ = http.NewRequest(http.MethodGet, utils.GenerateGetURL(baseUrl, actionApi, bizParams), nil) -// } -// switch actionApi { -// case TiktokTokenUrl: -// request.Header.Set("Content-Type", "application/x-www-form-urlencoded") -// case TiktokRefreshTokenUrl: -// request.Header.Set("Content-Type", "multipart/form-data") -// } -// -// return request -// } -// -// // 数据解析 -// dataMarshal := func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) { -// if jsonResult1 == nil { -// return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil") -// } -// -// retVal = jsonResult1 -// return errLevel, err -// } -// -// err = platformapi.AccessPlatformAPIWithRetry(a.client, sendUrl, a.config, dataMarshal) -// return retVal, err -//} +import ( + "encoding/json" + "fmt" + "git.rosy.net.cn/baseapi/platformapi" + "git.rosy.net.cn/baseapi/utils" + "net/http" + "strings" +) + +func (a *API) GetAppID() string { + return a.clientKey +} + +func (a *API) GetSecret() string { + return a.clientSecret +} + +func New(clientSecret, clientKey string, config ...*platformapi.APIConfig) *API { + curConfig := platformapi.DefAPIConfig + if len(config) > 0 { + curConfig = *config[0] + } + return &API{ + clientSecret: clientSecret, + clientKey: clientKey, + client: &http.Client{Timeout: curConfig.ClientTimeout}, + config: &curConfig, + } +} + +func (a *API) AccessAPI(baseUrl, actionApi, method string, bizParams map[string]interface{}) (retVal map[string]interface{}, err error) { + // 序列化 + data, err := json.Marshal(bizParams) + if err != nil { + return nil, err + } + + // 全路径请求参数 + fullURL := utils.GenerateGetURL(baseUrl, actionApi, nil) + + // 发送请求 + sendUrl := func() *http.Request { + var request *http.Request + if http.MethodPost == method { + request, _ = http.NewRequest(http.MethodPost, fullURL, strings.NewReader(string(data))) + } else { + request, _ = http.NewRequest(http.MethodGet, utils.GenerateGetURL(baseUrl, actionApi, bizParams), nil) + } + switch actionApi { + case TiktokTokenUrl: + request.Header.Set("Content-Type", "application/x-www-form-urlencoded") + case TiktokRefreshTokenUrl: + request.Header.Set("Content-Type", "multipart/form-data") + } + + return request + } + + // 数据解析 + dataMarshal := func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) { + if jsonResult1 == nil { + return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil") + } + + retVal = jsonResult1 + return errLevel, err + } + + err = platformapi.AccessPlatformAPIWithRetry(a.client, sendUrl, a.config, dataMarshal) + return retVal, err +} diff --git a/platformapi/tiktok/tiktok_const.go b/platformapi/tiktok/tiktok_const.go index 48531dba..1f1085e8 100644 --- a/platformapi/tiktok/tiktok_const.go +++ b/platformapi/tiktok/tiktok_const.go @@ -1,25 +1,24 @@ package tiktok -// -//import ( -// "git.rosy.net.cn/baseapi/platformapi" -// "net/http" -// "sync" -//) -// -//const ( -// BaseURL = "https://open.douyin.com" -// TiktokTokenUrl = "/oauth/access_token/" -// TiktokRefreshTokenUrl = "/oauth/renew_refresh_token/" -//) -// -//type API struct { -// clientSecret string // 应用唯一标识对应的密钥 -// clientKey string // 应用唯一标识 -// client *http.Client -// config *platformapi.APIConfig -// locker sync.RWMutex -// -// msgToken string -// msgKey string -//} +import ( + "git.rosy.net.cn/baseapi/platformapi" + "net/http" + "sync" +) + +const ( + BaseURL = "https://open.douyin.com" + TiktokTokenUrl = "/oauth/access_token/" + TiktokRefreshTokenUrl = "/oauth/renew_refresh_token/" +) + +type API struct { + clientSecret string // 应用唯一标识对应的密钥 + clientKey string // 应用唯一标识 + client *http.Client + config *platformapi.APIConfig + locker sync.RWMutex + + msgToken string + msgKey string +} diff --git a/platformapi/tiktok/tiktok_token.go b/platformapi/tiktok/tiktok_token.go index 460090de..a576f2d1 100644 --- a/platformapi/tiktok/tiktok_token.go +++ b/platformapi/tiktok/tiktok_token.go @@ -1,82 +1,81 @@ package tiktok -// -//import ( -// "git.rosy.net.cn/baseapi/utils" -// "net/http" -//) -// -//// OauthAccessTokenResData access_token -//type OauthAccessTokenResData struct { -// AccessToken string `json:"access_token"` // 接口调用凭证 -// UnionId string `json:"union_id"` // 当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。 -// Scope string `json:"scope"` // 用户授权的作用域(Scope),使用逗号(,)分隔,开放平台几乎几乎每个接口都需要特定的Scope。 -// ExpiresIn uint64 `json:"expires_in"` // access_token接口调用凭证超时时间,单位(秒) -// OpenId string `json:"open_id"` // 授权用户唯一标识 -// RefreshToken string `json:"refresh_token"` // 用户刷新access_token -// DYError -//} -// -//// DYError 错误结构体 -//type DYError struct { -// ErrorCode int64 `json:"error_code,omitempty"` // 错误码 -// Description string `json:"description,omitempty"` // 错误码描述 -//} -// -//// OauthAccessTokenRes access_token -//type OauthAccessTokenRes struct { -// Data OauthAccessTokenResData `json:"data"` -// Message string `json:"message"` -//} -// -//// 获取抖音token -//func (a *API) GetTiktokToken(code string) (*OauthAccessTokenRes, error) { -// tokenReq := make(map[string]interface{}, 4) -// tokenReq["client_secret"] = a.clientSecret -// tokenReq["code"] = code -// tokenReq["grant_type"] = "authorization_code" -// tokenReq["client_key"] = a.clientKey -// result, err := a.AccessAPI(BaseURL, TiktokTokenUrl, http.MethodPost, tokenReq) -// if err != nil { -// return nil, err -// } -// -// oauthAccessToken := &OauthAccessTokenRes{} -// if err := utils.Map2StructByJson(result, oauthAccessToken, false); err != nil { -// return nil, err -// } -// return oauthAccessToken, nil -//} -// -//// OauthRefreshTokenResData 刷新access_token -//type OauthRefreshTokenResData struct { -// AccessToken string `json:"access_token"` // 接口调用凭证 -// Scope string `json:"scope"` // 用户授权的作用域 -// ExpiresIn uint64 `json:"expires_in"` // 过期时间,单位(秒) -// OpenId string `json:"open_id"` // 当前应用下,授权用户唯一标识 -// RefreshToken string `json:"refresh_token"` // 用户刷新 -// DYError -//} -// -//// OauthRefreshTokenRes 刷新access_token -//type OauthRefreshTokenRes struct { -// Data OauthRefreshTokenResData `json:"data"` -// Message string `json:"message"` -//} -// -//// 刷新用户Refresh token -//func (a *API) RefreshToken(refreshToken string) (*OauthRefreshTokenRes, error) { -// tokenReq := make(map[string]interface{}, 2) -// tokenReq["client_key"] = a.clientKey -// tokenReq["refresh_token"] = refreshToken -// // 通过旧的refresh_token获取新的refresh_token,调用后旧refresh_token会失效,新refresh_token有30天有效期。最多只能获取5次新的refresh_token,5次过后需要用户重新授权。 -// result, err := a.AccessAPI(BaseURL, TiktokRefreshTokenUrl, http.MethodPost, tokenReq) -// if err != nil { -// return nil, err -// } -// oauthRefreshToken := &OauthRefreshTokenRes{} -// if err := utils.Map2StructByJson(result, oauthRefreshToken, false); err != nil { -// return nil, err -// } -// return oauthRefreshToken, nil -//} +import ( + "git.rosy.net.cn/baseapi/utils" + "net/http" +) + +// OauthAccessTokenResData access_token +type OauthAccessTokenResData struct { + AccessToken string `json:"access_token"` // 接口调用凭证 + UnionId string `json:"union_id"` // 当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。 + Scope string `json:"scope"` // 用户授权的作用域(Scope),使用逗号(,)分隔,开放平台几乎几乎每个接口都需要特定的Scope。 + ExpiresIn uint64 `json:"expires_in"` // access_token接口调用凭证超时时间,单位(秒) + OpenId string `json:"open_id"` // 授权用户唯一标识 + RefreshToken string `json:"refresh_token"` // 用户刷新access_token + DYError +} + +// DYError 错误结构体 +type DYError struct { + ErrorCode int64 `json:"error_code,omitempty"` // 错误码 + Description string `json:"description,omitempty"` // 错误码描述 +} + +// OauthAccessTokenRes access_token +type OauthAccessTokenRes struct { + Data OauthAccessTokenResData `json:"data"` + Message string `json:"message"` +} + +// 获取抖音token +func (a *API) GetTiktokToken(code string) (*OauthAccessTokenRes, error) { + tokenReq := make(map[string]interface{}, 4) + tokenReq["client_secret"] = a.clientSecret + tokenReq["code"] = code + tokenReq["grant_type"] = "authorization_code" + tokenReq["client_key"] = a.clientKey + result, err := a.AccessAPI(BaseURL, TiktokTokenUrl, http.MethodPost, tokenReq) + if err != nil { + return nil, err + } + + oauthAccessToken := &OauthAccessTokenRes{} + if err := utils.Map2StructByJson(result, oauthAccessToken, false); err != nil { + return nil, err + } + return oauthAccessToken, nil +} + +// OauthRefreshTokenResData 刷新access_token +type OauthRefreshTokenResData struct { + AccessToken string `json:"access_token"` // 接口调用凭证 + Scope string `json:"scope"` // 用户授权的作用域 + ExpiresIn uint64 `json:"expires_in"` // 过期时间,单位(秒) + OpenId string `json:"open_id"` // 当前应用下,授权用户唯一标识 + RefreshToken string `json:"refresh_token"` // 用户刷新 + DYError +} + +// OauthRefreshTokenRes 刷新access_token +type OauthRefreshTokenRes struct { + Data OauthRefreshTokenResData `json:"data"` + Message string `json:"message"` +} + +// 刷新用户Refresh token +func (a *API) RefreshToken(refreshToken string) (*OauthRefreshTokenRes, error) { + tokenReq := make(map[string]interface{}, 2) + tokenReq["client_key"] = a.clientKey + tokenReq["refresh_token"] = refreshToken + // 通过旧的refresh_token获取新的refresh_token,调用后旧refresh_token会失效,新refresh_token有30天有效期。最多只能获取5次新的refresh_token,5次过后需要用户重新授权。 + result, err := a.AccessAPI(BaseURL, TiktokRefreshTokenUrl, http.MethodPost, tokenReq) + if err != nil { + return nil, err + } + oauthRefreshToken := &OauthRefreshTokenRes{} + if err := utils.Map2StructByJson(result, oauthRefreshToken, false); err != nil { + return nil, err + } + return oauthRefreshToken, nil +}