From d8e23685bf669b7bb170c0791d164042c922da94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8B=8F=E5=B0=B9=E5=B2=9A?= <770236076@qq.com> Date: Fri, 17 Jul 2020 15:45:43 +0800 Subject: [PATCH] =?UTF-8?q?jcq=E6=B6=88=E6=81=AFapi=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformapi/feieapi/feieapi_test.go | 8 +- platformapi/jcqapi/jcqapi.go | 2 +- platformapi/jdshopapi/order.go | 55 ++++++++ platformapi/jdshopapi/store_page_test.go | 158 ++++++++--------------- platformapi/weixinapi/cgibin_test.go | 2 +- platformapi/weixinapi/weixinapi_test.go | 6 +- 6 files changed, 121 insertions(+), 110 deletions(-) diff --git a/platformapi/feieapi/feieapi_test.go b/platformapi/feieapi/feieapi_test.go index d79a7201..552496d3 100644 --- a/platformapi/feieapi/feieapi_test.go +++ b/platformapi/feieapi/feieapi_test.go @@ -50,7 +50,7 @@ func TestPrinterAddList(t *testing.T) { func TestPrinterDelList(t *testing.T) { ok, no, err := api.PrinterDelList([]string{ - "218510310", + "550518714", }) if err != nil { t.Fatalf("PrinterDelList return error:%v", err) @@ -60,7 +60,7 @@ func TestPrinterDelList(t *testing.T) { } func TestQueryOrderInfoByDate(t *testing.T) { - printed, waiting, err := api.QueryOrderInfoByDate("218510310", time.Now()) + printed, waiting, err := api.QueryOrderInfoByDate("550518714", time.Now()) if err != nil { t.Fatalf("QueryOrderInfoByDate return error:%v", err) } @@ -75,7 +75,7 @@ func TestDelPrinterSqs(t *testing.T) { } func TestQueryPrinterStatus(t *testing.T) { - status, err := api.QueryPrinterStatus("218510310") + status, err := api.QueryPrinterStatus("550518714") if err != nil { t.Fatalf("QueryPrinterStatus return error:%v", err) } @@ -83,7 +83,7 @@ func TestQueryPrinterStatus(t *testing.T) { } func TestQueryOrderState(t *testing.T) { - status, err := api.QueryOrderState("218510310") + status, err := api.QueryOrderState("550518714") if err != nil { t.Fatalf("QueryOrderState return error:%v", err) } diff --git a/platformapi/jcqapi/jcqapi.go b/platformapi/jcqapi/jcqapi.go index 05b078db..7db454cd 100644 --- a/platformapi/jcqapi/jcqapi.go +++ b/platformapi/jcqapi/jcqapi.go @@ -67,7 +67,7 @@ func (a *API) signParam(params map[string]interface{}) (sig string) { func (a *API) AccessAPI(action string, url string, bizParams map[string]interface{}) (retVal map[string]interface{}, err error) { params := make(map[string]interface{}) params["accessKey"] = a.accessKey - params["dateTime"] = time.Now() + params["dateTime"] = time.Now().UTC() params = utils.MergeMaps(params, bizParams) signStr := a.signParam(params) params["signature"] = signStr diff --git a/platformapi/jdshopapi/order.go b/platformapi/jdshopapi/order.go index a4cdce6d..aace085e 100644 --- a/platformapi/jdshopapi/order.go +++ b/platformapi/jdshopapi/order.go @@ -44,6 +44,61 @@ func (a *API) GetDeliveryCompany() (result interface{}, err error) { } type GetOrderResult struct { + JingdongPopOrderGetResponce struct { + Code string `json:"code"` + OrderDetailInfo struct { + OrderInfo struct { + OrderStateRemark string `json:"orderStateRemark"` + OrderRemark string `json:"orderRemark"` + OrderSellerPrice string `json:"orderSellerPrice"` + OrderState string `json:"orderState"` + OrderType string `json:"orderType"` + ConsigneeInfo struct { + ProvinceID string `json:"provinceId"` + FullAddress string `json:"fullAddress"` + CityID string `json:"cityId"` + TownID string `json:"townId"` + City string `json:"city"` + County string `json:"county"` + Province string `json:"province"` + Town string `json:"town"` + Telephone string `json:"telephone"` + Fullname string `json:"fullname"` + CountyID string `json:"countyId"` + Mobile string `json:"mobile"` + } `json:"consigneeInfo"` + OrderPayment string `json:"orderPayment"` + PayType string `json:"payType"` + ItemInfoList []struct { + ProductNo string `json:"productNo"` + ItemTotal string `json:"itemTotal"` + JdPrice string `json:"jdPrice"` + SkuName string `json:"skuName"` + InvoiceContentID string `json:"invoiceContentId"` + ItemExt string `json:"itemExt"` + NewStoreID string `json:"newStoreId"` + OuterSkuID string `json:"outerSkuId"` + SkuID string `json:"skuId"` + WareID string `json:"wareId"` + GiftPoint string `json:"giftPoint"` + } `json:"itemInfoList"` + StoreID string `json:"storeId"` + OrderTotalPrice string `json:"orderTotalPrice"` + OrderExt string `json:"orderExt"` + StoreOrder string `json:"storeOrder"` + OrderStartTime string `json:"orderStartTime"` + OrderID string `json:"orderId"` + OrderSource string `json:"orderSource"` + FreightPrice string `json:"freightPrice"` + } `json:"orderInfo"` + APIResult struct { + EnglishErrCode string `json:"englishErrCode"` + Success bool `json:"success"` + ChineseErrCode string `json:"chineseErrCode"` + NumberCode int `json:"numberCode"` + } `json:"apiResult"` + } `json:"orderDetailInfo"` + } `json:"jingdong_pop_order_get_responce"` } //查询单个订单 diff --git a/platformapi/jdshopapi/store_page_test.go b/platformapi/jdshopapi/store_page_test.go index 4bf3b446..fa310e04 100644 --- a/platformapi/jdshopapi/store_page_test.go +++ b/platformapi/jdshopapi/store_page_test.go @@ -7,7 +7,6 @@ import ( "encoding/hex" "fmt" "io/ioutil" - "log" "net/http" "testing" @@ -105,117 +104,74 @@ func TestTryGetCookie(t *testing.T) { } func TestAAADS(t *testing.T) { - str := "AAS2QGu5EUYo35u+GIPUbcPQrI8MbLvXIHaYS47i8I6De0Fzgdpyw7TT9Iti3RiIY30=" + str := "AASWvkdk5a60bjm3lFqaoCyzU8toVp+3kKjheuOwxzWZH+adxCfv+Bv9BD0DP/WDy6Y=" data, _ := base64.StdEncoding.DecodeString(str) dataStr := hex.EncodeToString(data) - fmt.Println("all:", dataStr) + fmt.Println("all:", dataStr) //96be4764e5aeb46e39b7945a9aa02cb3 fmt.Println("key ID:", dataStr[4:36]) fmt.Println("IV:", dataStr[36:68]) - fmt.Println("key main:", dataStr[68:len(dataStr)]) - data2, _ := base64.StdEncoding.DecodeString("/xdYPxcavDO9IpsJP1uFfbbuv7WdIyckhJ9RBe3h9r8=") + data2, _ := base64.StdEncoding.DecodeString("XsGNdyDyDHnR79iKU6d5LTSJYaQyWAEssDoD7VM5Kks=") dataStr2 := hex.EncodeToString(data2) - // key := base64.StdEncoding.EncodeToString([]byte(dataStr[36:68])) - fmt.Println(SubstrByByte(dataStr[36:len(dataStr)], 16)) - result, _ := AESBase64Decrypt("417381da72c3b4d3f48b62dd1888637d", dataStr2[:32], "ac8f0c6cbbd72076984b8ee2f08e837b") - fmt.Println(string(result)) -} - -func SubstrByByte(str string, length int) string { - bs := []byte(str)[:length] - bl := 0 - for i := len(bs) - 1; i >= 0; i-- { - switch { - case bs[i] >= 0 && bs[i] <= 127: - return string(bs[:i+1]) - case bs[i] >= 128 && bs[i] <= 191: - bl++ - case bs[i] >= 192 && bs[i] <= 253: - cl := 0 - switch { - case bs[i]&252 == 252: - cl = 6 - case bs[i]&248 == 248: - cl = 5 - case bs[i]&240 == 240: - cl = 4 - case bs[i]&224 == 224: - cl = 3 - default: - cl = 2 - } - if bl+1 == cl { - return string(bs[:i+cl]) - } - return string(bs[:i]) - } - } - return "" -} - -func DecryptDESECB(d, key []byte) string { - data, err := base64.StdEncoding.DecodeString(string(d)) + fmt.Println(dataStr2) + fmt.Println(len(data2)) + fmt.Println(len([]byte(string(data2)))) + fmt.Println(len([]byte(dataStr[36:68]))) + iv := base64.StdEncoding.EncodeToString([]byte(dataStr[36:68])) + fmt.Println(len([]byte(iv))) + fmt.Println(iv) + src := base64.StdEncoding.EncodeToString([]byte(dataStr[68:])) + fmt.Println(len([]byte(src))) + fmt.Println(string(data[18:34])) + // str2 := []byte(dataStr[68:]) + // key := []byte(dataStr2) + decryptedData, err := Decrypt(data[34:50], data2, data[18:34]) if err != nil { - return "" + t.Fatal(err) } + // data3, _ := simplifiedchinese.GBK.NewDecoder().Bytes(decryptedData) //gbk 转 utf-8 + fmt.Println("data", string(decryptedData)) +} + +func Decrypt(decryptBytes, key, iv []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { - return "" - } - bs := block.BlockSize() - if len(data)%bs != 0 { - return "" - } - out := make([]byte, len(data)) - dst := out - for len(data) > 0 { - block.Decrypt(dst, data[:bs]) - data = data[bs:] - dst = dst[bs:] - } - out = PKCS5UnPadding(out) - return string(out) -} - -func PKCS5UnPadding(origData []byte) []byte { - length := len(origData) - unpadding := int(origData[length-1]) - return origData[:(length - unpadding)] -} - -func AESBase64Decrypt(encrypt_data string, key, iv string) (origin_data string, err error) { - var block cipher.Block - if block, err = aes.NewCipher([]byte(key)); err != nil { - log.Println(err) - return - } - encrypt := cipher.NewCBCDecrypter(block, []byte(iv)) - - var source []byte - if source, err = base64.RawStdEncoding.DecodeString(encrypt_data); err != nil { - log.Println(err) - return - } - var dst []byte = make([]byte, len(source)) - encrypt.CryptBlocks(dst, source) - origin_data = string(PKCS5Trimming(dst)) - return -} - -func Decrypt(src, key, iv string) (data []byte, err error) { - decrypted := make([]byte, len(src)) - var aesBlockDecrypter cipher.Block - aesBlockDecrypter, err = aes.NewCipher([]byte(key)) - if err != nil { - println(err.Error()) return nil, err } - fmt.Println(aesBlockDecrypter.BlockSize()) - aesDecrypter := cipher.NewCBCDecrypter(aesBlockDecrypter, []byte(iv)) - aesDecrypter.CryptBlocks(decrypted, []byte(src)) - return PKCS5Trimming(decrypted), nil + fmt.Println(block.BlockSize()) + blockMode := cipher.NewCBCDecrypter(block, iv) + decrypted := make([]byte, len(decryptBytes)) + blockMode.CryptBlocks(decrypted, decryptBytes) + fmt.Println(decrypted) + decrypted = PKCS5UnPadding(decrypted) + return decrypted, nil } -func PKCS5Trimming(encrypt []byte) []byte { - padding := encrypt[len(encrypt)-1] - return encrypt[:len(encrypt)-int(padding)] +func PKCS5UnPadding(decrypted []byte) []byte { + length := len(decrypted) + unPadding := int(decrypted[length-1]) + return decrypted[:(length - unPadding)] +} + +func CBCDecript(key, iv, src []byte) (dst []byte, err error) { + var ( + block cipher.Block + blockMode cipher.BlockMode + ) + + if len(iv) != aes.BlockSize { + return nil, fmt.Errorf("iv") + } + if len(key) != 32 { + return nil, fmt.Errorf("key") + } + + if block, err = aes.NewCipher(key); err != nil { + return nil, err + } + + blockMode = cipher.NewCBCDecrypter(block, iv) + dst = make([]byte, len(src)) + blockMode.CryptBlocks(dst, src) + dst = PKCS5UnPadding(dst) + return } diff --git a/platformapi/weixinapi/cgibin_test.go b/platformapi/weixinapi/cgibin_test.go index d13a8956..60d1179e 100644 --- a/platformapi/weixinapi/cgibin_test.go +++ b/platformapi/weixinapi/cgibin_test.go @@ -44,7 +44,7 @@ func TestCBUpdateRemark(t *testing.T) { } func TestCBGetUserInfo(t *testing.T) { - userInfo, err := api.CBGetUserInfo("oYN_ust9hXKEvEv0X6Mq6nlAWs_E") + userInfo, err := api.CBGetUserInfo("oYN_usnZ_ohyeJPKuBTEkIyZ7_uE") if err != nil { t.Fatal(err) } diff --git a/platformapi/weixinapi/weixinapi_test.go b/platformapi/weixinapi/weixinapi_test.go index 948c156d..faf5be25 100644 --- a/platformapi/weixinapi/weixinapi_test.go +++ b/platformapi/weixinapi/weixinapi_test.go @@ -20,11 +20,11 @@ func init() { baseapi.Init(sugarLogger) // sandbox - api = New("wxbf235770edaabc5c", "ba32b269a068a5b72486a0beafd171e8") + // api = New("wxbf235770edaabc5c", "ba32b269a068a5b72486a0beafd171e8") // prod - // api = New("wx2bb99eb5d2c9b82c", "6bbbed1443cc062c20a015a64c07a531") - api.CBSetToken("20_HnsqOrwPdIORHmucRknhiM8gWpIQ0asYPLT7VIy37YPI47pURUNY7gQrNajulLtdPBr_9B4dj7WIuHsrOP5L8m9zQDJ7HIDNeSyC_Zekg4MvH0yOzpJAVQb4scb1qND84IcX2WaUJbc6gcKJDSAbAIAKZH") + api = New("wx2bb99eb5d2c9b82c", "6bbbed1443cc062c20a015a64c07a531") + api.CBSetToken("35_1ilNtBtqXwojmsYWgzpjn8Nn-1DuOfy0rTcsIuRz5RqXAcJRYCmcFP0oBQR6N6dBm6lOvg7j7O-YMKh_--zfbJ_4hBCfBbvI7svoeIc3l4W_UHA41LyT_asp731YpNKA9oRWkg0ftTJj0rHwLEDhAHAUNM") } func handleError(t *testing.T, err error) {