diff --git a/platformapi/jdapi/order_test.go b/platformapi/jdapi/order_test.go index d3bbf136..ce18ff97 100644 --- a/platformapi/jdapi/order_test.go +++ b/platformapi/jdapi/order_test.go @@ -204,3 +204,10 @@ func TestConfirmReceiveGoods(t *testing.T) { t.Fatal(err.Error()) } } + +func TestAfsOpenApprove(t *testing.T) { + err := api.AfsOpenApprove("34290642", 1, "同意退款", "jxadmin-13689038670") + if err != nil { + t.Fatal(err.Error()) + } +} diff --git a/platformapi/jdshopapi/jxshopapi_test.go b/platformapi/jdshopapi/jxshopapi_test.go index a4631365..5dc4e9a0 100644 --- a/platformapi/jdshopapi/jxshopapi_test.go +++ b/platformapi/jdshopapi/jxshopapi_test.go @@ -17,7 +17,7 @@ func init() { //api = New("de8157b447584885910f429011e49cb93yjq", "E1D746D42474D5F1F1A10CECE75D99F6", "efa7e1d1a22640fa990e6cf164b28608") api = New("9ad9cf5fc8b140b19a1dbbb700b47676kown", "D5E8352BE0786ED16F77B4548F62F09A", "71e1061ac2f246f6ac27efb900edba12") api.SetCookieWithStr(` -__jdu=16193999982702078345144; shshshfpa=972f47df-9252-dc1a-1d6d-40594ce0501b-1619400562; webp=1; visitkey=44137284214309276; shshshfp=4d574741223da61a369c18ce2febefe8; shshshfpb=msX4%202n384blCOGusOxGDvQ%3D%3D; unpl=V2_ZzNtbRUHSx19DENcKBtUBWIHEF4RU0MddVwVXCwYDAVkBRVVclRCFnUUR1NnGFQUZwcZXUZcQBFFCEdkeB5fA2AFEFlBZxBFLV0CFi9JH1c%2bbRFdS1NBFH0JRFB6Hmw1ZAMiXUNnQxJ1AERccxFUDGQFE15DUUoXcAxGUX4pbAJXMyJbQFdHE3I4R2R6KR5ROwQXW0RUQVh1D0ZceRFUDW8KEVtDVEITfApDUHscWTVmMxE%3d; pinId=WMIzMhF5BfI9awOQjAcbdQ; pin=shop_jxcs2020; unick=shop_jxcs2020; _tp=VqmxIvk3BVEJnO6UciQrRA%3D%3D; _pst=shop_jxcs2020; __jdv=95931165|direct|-|none|-|1624524264932; language=zh_CN; TrackID=1jHqnwWToF-j2xO5Jbn4Zduzzc_eqhvzeqb0dx60xpiPIAb4kXfCPOza2pM_rtWv4bbs09aBJWqdDLQSHAY1bUKQkLBlTbElkdRtJ0ldvsbM; ceshi3.com=000; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2NCIWTST4KDNCWZES6EV2TD5XDTCNE6YVKRXISVWNQHZDBO6QEKYXMXGPYGVEOCQCSG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4AUHV3TOJD7MGBX53BNNP2E6MSSOORYGL5H2GYFRURR5ACFJ54GH7PTHFL22YL3C6ODFYFTWGV5UAWCX5C6J372TDCL6LDNEERERTGCXN3XYGB7JQCROLLYPI62QZPHX3VQAQIWW3S2YBFMIMTF6SWAFAQ52UF5TATP7KZIQ; _vender_new_=GI63BGTJFDBQ4KTM333PMOGFGXGN2MWJNA4WUIW4ZGGIVOLTPK5TRV2UVRGJOLSZFF5XPPV376V2IZYUUTIZYUOSJ7XLQQXULY7UZCFHNUYZEPA5K4NKJ62CC6Q756VRE47INBENIPCNYN4MUZRCB27NNIDWST32H7A66G2G3UMJWUPPXMHKRJ4I6UJ43SNLTY755O3QKSMGQHPHSOAKK5R74V6PBVCLI56OPZPR7RNFOAEYFZTP2BSCS5ZMNTWN4HIOX5NUKDT5E75AVXNKX43RBTJ6W255CTVTEQ67VYYOGAEFV3CBL4MM5MFU6T2V7DWAKVLHWY2IK72YOJU4FK5DKLZTJI52FKDTHMWY7IILEV7H4VD7RXGVJKSRURJW6M2KHORKQ4Z3FWH2CCZFPZ7FI54BBC6T7IT4RBGRQHU63BU24NLT3B722WUBKZ7XZVGJA3N5V5QQZAJ27O3QLTP5M5YE6OWLQPEH5LY76SIQJO62K63LPG6XGQM4I32SFFJR3R5NLQZPFLJTI6K74ICYFOP5LP54YOAU3MF223TH7RBNDQKQZAJGFHE3CEO3PDGTDMTFA3LOKDRYE3RCNZ3IIQEQZ3EKQ7Y7EZPHVW2EPN7W4FOKDTFUR4TGVDUVW2SA4A7FYLR5J4BLOKS2EKR6C4; csrf_token=fd293f0c-489a-4518-8935-978971720aa5; thor=5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C592C7B16C9A84E38958D7FBD6B99E76A29070B6B08B0636DB6B2706BE6DF56E320D852C53FACD5A121849FBFB3B1B77C7391CC6732B51462E556CBF096F706E3E850B0A5142478BB1F083E021A2CD2CEC6158EC7E9ED6D0B647DE7831D8E7940EE46BCEA1D191F950D8AA181AB163DBCD; __jda=191954476.16193999982702078345144.1619399998.1625452973.1625802197.18; __jdb=191954476.9.16193999982702078345144|18.1625802197; __jdc=191954476; 3AB9D23F7A4B3C9B=CKENC5MAUU744ZQDKVRY2L7UIJ23PJRDYJ6HF3ZMQHC5FFD46FMUQXRINFCOC4SKHL5MU3PPNPP4C4AX5ZYBXJ7LZ4; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BSFBETNC6EV5BAG4NETFPEAMB65Q; b-sec=S2JWP6CAFP7K44GG6BEY2DLMRHSHR25YQUFIV6XSMOXLNDF7YPPYZTUHI23JACESN4HYTVEGLJ2WA +__jdu=16193999982702078345144; shshshfpa=972f47df-9252-dc1a-1d6d-40594ce0501b-1619400562; webp=1; visitkey=44137284214309276; shshshfp=4d574741223da61a369c18ce2febefe8; shshshfpb=msX4%202n384blCOGusOxGDvQ%3D%3D; pinId=WMIzMhF5BfI9awOQjAcbdQ; pin=shop_jxcs2020; unick=shop_jxcs2020; _tp=VqmxIvk3BVEJnO6UciQrRA%3D%3D; _pst=shop_jxcs2020; language=zh_CN; __jdv=95931165|direct|-|none|-|1626139457812; QRCodeKEY=CEDFF94E2F62838ABD14AAEB9E971DD4A4C72EF9F23BB22D3F8F3E7CE20A13929D2938D1818DA81A6C2501F503C01641; AESKEY=FDE0FB408DB873F3; UIDKEY=102096759651360469; TrackID=18Rmsry2JrlCR4jAjUYgkWO9CHy6lDi1ATJAzuF1NhRyAqXWBhB5QLvEeE3m9jYcCKGbU5lp2LGl2u4HEduunES9GekGjWNvo_qRm5LeM6m4; thor=5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C5A7A09FC0949C10573F2FD04E416362ACFDE8BCF94A259D588CC3BB15E6E69FBD1195DD82CE7836A1CB5D8ECED58FE36AB4D51D4442705232086597BC7B9C3F2DF407CBB7A7332804A0AA1DC8D765DEF02B1A3A149E8E2945E010BC7C5C15ED66371DC09459CDD121A6E5FD117593D912; ceshi3.com=000; _base_=YKH2KDFHMOZBLCUV7NSRBWQUJPBI7JIMU5R3EFJ5UDHJ5LCU7R2NILKK5UJ6GLA2RGYT464UKXAI4Z6HPCTN4UQM3WHVQ4ENFP57OC2NCIWTST4KDNCWZES6EV2TD5XDTCNE6YVKRXISVWNQHZDBO6QEKYXMXGPYGVEOCQCSG4SOQWCP5WPWO6EFS7HEHMRWVKBRVHB33TFD4AUHV3TOJD7MGBX53BNNP2E6MSSOORYGL5H2GYFRURR5ACFJ54GH7PTHFL22YL3C6ODFYFTWGV5UAWCX5C6J372TDCL6LDNEERERTGCSRD4JODICQEQYV5Q33MMFXEM7ZVQAQIWW3S2YBFMIMTF6SWAFAQ52UF5TATP7KZIQ; _BELONG_CLIENT_=WPSC4XJXWK5USS4JNZY2X7VRLR5MCBKRSVHEXABGTHDGISIQK5YOLZUXYE7IOIM7MOKO74H6CRN6WHAAR4TMDV3XZWMXZRCRT5XRNE3V356BTOB2Y7LPK66VWQK6HPTGWVXIDXDCPVE3W5WMHAIO6AT2LX2XXVNUCXR34ZWFK6HY45CORGIKOSYDYZBF27WOKTUX6BS4FZMIJWNUX6CB4JAA25ZLF7ZEKYOO4QV5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BMTUJZACIBHXQFAVLRF76VQY5PNJGGJNBEZHSFYYJA3YORRT7FB5AHCOIFQKF3W5RWNUX6CB4JAA26JNMO7AYWNUPZF5HTSBXGNRM3E242MBI6V5D4C5VJDQ3EOYCOW5BWZDKMOJ5BS6II53ERY6ALV3ZWPF42L4CPUHEGPYIII35KDC4FCNVCORCXFD6IVNLBEDPB2GGP4UHWNRUDOQBDIW7RZJXBA2WV5ANZOTEGUCDWYRVQS2YUTIZNZ276PRYG4N56V6YTII7MBKBC7LYHO7C555HTSBXGNRM3E466AYN67DHWVM5HQFJ4NFDO5BSPSQ5K2XUIBV2LHR26T6IVB4O6Q; _vender_new_=GI63BGTJFDBQ4KTM333PMOGFGXGN2MWJNA4WUIW4ZGGIVOLTPK5TRV2UVRGJOLSZFF5XPPV376V2IZYUUTIZYUOSJ7XLQQXULY7UZCFHNUYZEPA5K4NKJ62CC6Q756VRE47INBENIPCNYN4MUZRCB27NNIDWST32H7A66G2G3UMJWUPPXMHKRJ4I6UJ43SNLTY755O3QKSMGQHPHSOAKK5R74V6PBVCLI56OPZPR7RNFOAEYFZTP2BSCS5ZMNTWN4HIOX5NUKDT5E75AVXNKX43RBTJ6W255CTVTEQ67VYYOGAEFV3CBL4MM5MFU6T2V7DWAKVLHWY2IK72YOJU4FK5DKKOCPDRBPM4JZTBEJGDBPGRYHGA7RXGVJKSRURJWTQTY4IL3HCOMYJCJQYLZUOBZQF4BBC6T7IT4RBGRQHU63BU24NLT3B722WUBKZ7XZVGJA3N5V5QQZAJ27O3QLTP5M5YE6OWLQPEH5LY76SIQJO62K63LPG6XGQM4I32SFFJR3R5NLQZPFLJTI6K74ICYFOP5LP54YOAU3MF223TH7RBNDQKQZAJGFHE3CEO3PDGTDMTFA3LOKDRYE3RCNZ3IIQEQZ3EKQ7Y7EZPHVW2EPN7W4FOKDTFUR4TGVDUVABISWKHYSIKJVXRHIB7RENQODU; b-sec=S2JWP6CAFP7K44GG6BEY2DLMRHSHR25YQUFIV6WL722Y5OZSYAV5X3VSN5YZIAYR3XC6MEXK22XK6; __jda=191429163.16193999982702078345144.1619399998.1625802197.1626139458.19; __jdc=191429163; __jdb=191429163.5.16193999982702078345144|19.1626139458; 3AB9D23F7A4B3C9B=CKENC5MAUU744ZQDKVRY2L7UIJ23PJRDYJ6HF3ZMQHC5FFD46FMUQXRINFCOC4SKHL5MU3PPNPP4C4AX5ZYBXJ7LZ4 `) // api.SetCookie("thor", "5E1D1AE7BBC42FACA3496D9C54AF9F879CF4836860E75FF70BFCDEAC5A75C1C5E43030CF54E4A3A8F5E760492948E69B763D115FE234A59948BA538A4F7E18F38B80F818E28EAE71F1CF5BFE2D0DC456D56E8BEAEF10D398C709D9A4EB46923C7E63867435BD42996F1570A816FD1B0B247CD9756A1184DD61317D28BBF77F828691684AD6E60801B2BB38F9DE086D73") diff --git a/platformapi/jdshopapi/store_page_test.go b/platformapi/jdshopapi/store_page_test.go index 6e9843e0..fa521bf2 100644 --- a/platformapi/jdshopapi/store_page_test.go +++ b/platformapi/jdshopapi/store_page_test.go @@ -5,7 +5,6 @@ import ( "crypto/aes" "crypto/cipher" "encoding/base64" - "encoding/hex" "fmt" "git.rosy.net.cn/baseapi/utils" "golang.org/x/text/encoding/simplifiedchinese" @@ -74,7 +73,7 @@ func TestAllOrders(t *testing.T) { } func TestOrderDetail(t *testing.T) { - result, err := api.OrderDetail("204667541886") + result, err := api.OrderDetail("213358191041") if err != nil { t.Fatal(err) } @@ -763,39 +762,26 @@ func h8l82int(h, l string) (i int64) { func TestUpdateStatus(t *testing.T) { //data2 := []byte{0x00, 0x01} //key := RandStringBytes(16) - data, _ := Utf8ToGbk([]byte("")) - fmt.Println(int2h8l8(int64(len(hex.EncodeToString(data)+"0101")) / 2)) - fmt.Println(hex.EncodeToString(data)) - fmt.Println(fmt.Sprintf("%x", (len("fd002a0101")+len(hex.EncodeToString(data)))/2)) - //result, _ := hex.DecodeString(data2) - //fmt.Println(strconv.FormatInt(255, 16)) - //var lenData int64 = 257 - //fmt.Println(strconv.FormatInt(lenData, 16)[:2] + "0" + strconv.FormatInt(lenData, 16)[2:]) - //var checkSum = 'a' - //for i := 0; i < 5; i++ { - // checkSum++ - //} - //fmt.Println(checkSum) - //sv := 55 - //// 2 to 10 - //fmt.Println(fmt.Sprintf("%b", sv)) - //fmt.Println(fmt.Sprintf("%x", sv)) - // - //origin2 := fmt.Sprintf("%b", sv) - //flag := 16 - len(origin2) - //for i := 0; i < flag; i++ { - // origin2 = "0" + origin2 - // fmt.Println(origin2) - //} - //begin8 := origin2[:8] - //end8 := origin2[8:] - //r1, _ := strconv.ParseInt(begin8, 2, 32) - //r2, _ := strconv.ParseInt(end8, 2, 32) - //fmt.Println(fmt.Sprintf("%x", r1), fmt.Sprintf("%x", r2)) - //buf := make([]byte, 1024) - //var i uint8 = 0x2d - //buf = append(buf, i) - //fmt.Println(hex.EncodeToString([]byte{0x1E, 0x00})) + //data, _ := Utf8ToGbk([]byte("[v2]")) + //fmt.Println(int2h8l8(int64(len("fd003401005b76325dc8d5d5d5cfe3c2afc9fad7cfd1cca3acd2a3bfb4c6d9b2bcb9d2c7b0b4a8a3acb7c9c1f7d6b1cfc2c8fdc7a7b3dfa3acd2c9cac7d2f8bad3c2e4bec5ccec") / 2))) + //fmt.Println(hex.EncodeToString(data)) + //fmt.Println(fmt.Sprintf("%x", len("fd003401005b76325dc8d5d5d5cfe3c2afc9fad7cfd1cca3acd2a3bfb4c6d9b2bcb9d2c7b0b4a8a3acb7c9c1f7d6b1cfc2c8fdc7a7b3dfa3acd2c9cac7d2f8bad3c2e4bec5ccec")/2)) + str := "1e00180200015054353139444130303031375a31510001" + var sum int64 + for i := 0; i < len(str); i = i + 2 { + b := string(str[i]) + string(str[i+1]) + bt, _ := strconv.ParseInt(b, 16, 32) + sum += bt + } + fmt.Println(int2h8l8(sum)) +} + +func sss() (data2 []byte) { + dataLen := 34 + data2 = make([]byte, 2) + data2[0] = (uint8)((dataLen & 0xFF00) >> 8) + data2[1] = (uint8)(dataLen & 0xFF) + return data2 } func Utf8ToGbk(str []byte) (b []byte, err error) { diff --git a/platformapi/jxprintapi/jxprintapi.go b/platformapi/jxprintapi/jxprintapi.go new file mode 100644 index 00000000..86cb8411 --- /dev/null +++ b/platformapi/jxprintapi/jxprintapi.go @@ -0,0 +1,134 @@ +package jxprintapi + +import ( + "crypto/md5" + "fmt" + "git.rosy.net.cn/baseapi" + "git.rosy.net.cn/baseapi/platformapi" + "git.rosy.net.cn/baseapi/utils" + "net/http" + "strings" + "time" +) + +const ( + prodURL = "http://api.jxc4.com/openapi/CallOpenAPI" + signKey = "sign" +) +const ( + // ResponseCodeSuccess 操作成功 + ResponseCodeSuccess = 0 +) + +const ( + PrinterStatusStrOffline = "离线。" + PrinterStatusStrOnlineOK = "在线,工作状态正常。" + PrinterStatusStrOnlineAbnormal = "在线,工作状态不正常。" + + PrinterStatusUnknown = 0 + PrinterStatusOffline = -1 + PrinterStatusOnlineOK = 1 + PrinterStatusOnlineAbnormal = 2 +) + +var ( + printStatusMap = map[string]int{ + PrinterStatusStrOffline: PrinterStatusOffline, + PrinterStatusStrOnlineOK: PrinterStatusOnlineOK, + PrinterStatusStrOnlineAbnormal: PrinterStatusOnlineAbnormal, + } +) + +var ( + exceedLimitCodes = map[int]int{} + + canRetryCodes = map[int]int{} +) + +type API struct { + platformapi.APICookie + + appID string + appKey string + client *http.Client + config *platformapi.APIConfig +} + +type PrinterInfo struct { + SN string + Key string + Name string + PhoneNum string +} + +type PrinterResultInfo struct { + SN string + ErrMsg string +} + +func New(appID, appKey string, config ...*platformapi.APIConfig) *API { + curConfig := platformapi.DefAPIConfig + if len(config) > 0 { + curConfig = *config[0] + } + return &API{ + appID: appID, + appKey: appKey, + client: &http.Client{Timeout: curConfig.ClientTimeout}, + config: &curConfig, + } +} + +func (a *API) signParams(apiParams map[string]interface{}) string { + return fmt.Sprintf("%x", md5.Sum([]byte(a.appID+a.appKey+apiParams["timestamp"].(string)))) +} + +func (a *API) AccessAPI(apiName string, apiParams map[string]interface{}) (retVal interface{}, err error) { + params := utils.MergeMaps(map[string]interface{}{ + "app_id": a.appID, + "method": apiName, + }, apiParams) + + err = platformapi.AccessPlatformAPIWithRetry(a.client, + func() *http.Request { + params["timestamp"] = utils.Int64ToStr(time.Now().Unix()) + sign := a.signParams(params) + params[signKey] = sign + fullURL := prodURL + request, _ := http.NewRequest(http.MethodPost, fullURL, strings.NewReader(utils.Map2URLValues(params).Encode())) + request.Header.Set("Content-Type", "application/x-www-form-urlencoded") + return request + }, + a.config, + 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") + } + code := int(utils.Interface2Int64WithDefault(jsonResult1["ret"], ResponseCodeSuccess)) + if code == ResponseCodeSuccess { + retVal = jsonResult1["data"] + return platformapi.ErrLevelSuccess, nil + } + newErr := utils.NewErrorIntCode(jsonResult1["msg"].(string), code) + if _, ok := exceedLimitCodes[code]; ok { + return platformapi.ErrLevelExceedLimit, newErr + } else if _, ok := canRetryCodes[code]; ok { + return platformapi.ErrLevelRecoverableErr, newErr + } else { + baseapi.SugarLogger.Debugf("feie AccessAPI failed, jsonResult1:%s", utils.Format4Output(jsonResult1, true)) + return platformapi.ErrLevelCodeIsNotOK, newErr + } + }) + return retVal, err +} + +func (a *API) UpdatePrinter(print_no, name, sim, sound string, volume int) (err error) { + _, err = a.AccessAPI("UpdatePrinter", map[string]interface{}{ + "print_no": print_no, + "name": name, + "sim": sim, + "sound": sound, + "volume": volume, + }) + return err +} diff --git a/platformapi/jxprintapi/jxprintapi_test.go b/platformapi/jxprintapi/jxprintapi_test.go new file mode 100644 index 00000000..bf2c59c9 --- /dev/null +++ b/platformapi/jxprintapi/jxprintapi_test.go @@ -0,0 +1,28 @@ +package jxprintapi + +import ( + "git.rosy.net.cn/baseapi" + "go.uber.org/zap" + "testing" +) + +var ( + api *API + sugarLogger *zap.SugaredLogger +) + +func init() { + logger, _ := zap.NewDevelopment() + sugarLogger = logger.Sugar() + baseapi.Init(sugarLogger) + + api = New("1000", "rfBd56ti2SMtYvSg") +} + +func TestUpdatePrinter(t *testing.T) { + err := api.UpdatePrinter("20210615000011", "", "", "", 0) + if err != nil { + t.Fatalf("PrintMsg return error:%v", err) + } + //baseapi.SugarLogger.Debug(result) +}