jcq消息api修改
This commit is contained in:
@@ -50,7 +50,7 @@ func TestPrinterAddList(t *testing.T) {
|
|||||||
|
|
||||||
func TestPrinterDelList(t *testing.T) {
|
func TestPrinterDelList(t *testing.T) {
|
||||||
ok, no, err := api.PrinterDelList([]string{
|
ok, no, err := api.PrinterDelList([]string{
|
||||||
"218510310",
|
"550518714",
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("PrinterDelList return error:%v", err)
|
t.Fatalf("PrinterDelList return error:%v", err)
|
||||||
@@ -60,7 +60,7 @@ func TestPrinterDelList(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestQueryOrderInfoByDate(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 {
|
if err != nil {
|
||||||
t.Fatalf("QueryOrderInfoByDate return error:%v", err)
|
t.Fatalf("QueryOrderInfoByDate return error:%v", err)
|
||||||
}
|
}
|
||||||
@@ -75,7 +75,7 @@ func TestDelPrinterSqs(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestQueryPrinterStatus(t *testing.T) {
|
func TestQueryPrinterStatus(t *testing.T) {
|
||||||
status, err := api.QueryPrinterStatus("218510310")
|
status, err := api.QueryPrinterStatus("550518714")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("QueryPrinterStatus return error:%v", err)
|
t.Fatalf("QueryPrinterStatus return error:%v", err)
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ func TestQueryPrinterStatus(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestQueryOrderState(t *testing.T) {
|
func TestQueryOrderState(t *testing.T) {
|
||||||
status, err := api.QueryOrderState("218510310")
|
status, err := api.QueryOrderState("550518714")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("QueryOrderState return error:%v", err)
|
t.Fatalf("QueryOrderState return error:%v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
func (a *API) AccessAPI(action string, url string, bizParams map[string]interface{}) (retVal map[string]interface{}, err error) {
|
||||||
params := make(map[string]interface{})
|
params := make(map[string]interface{})
|
||||||
params["accessKey"] = a.accessKey
|
params["accessKey"] = a.accessKey
|
||||||
params["dateTime"] = time.Now()
|
params["dateTime"] = time.Now().UTC()
|
||||||
params = utils.MergeMaps(params, bizParams)
|
params = utils.MergeMaps(params, bizParams)
|
||||||
signStr := a.signParam(params)
|
signStr := a.signParam(params)
|
||||||
params["signature"] = signStr
|
params["signature"] = signStr
|
||||||
|
|||||||
@@ -44,6 +44,61 @@ func (a *API) GetDeliveryCompany() (result interface{}, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type GetOrderResult struct {
|
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"`
|
||||||
}
|
}
|
||||||
|
|
||||||
//查询单个订单
|
//查询单个订单
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -105,117 +104,74 @@ func TestTryGetCookie(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestAAADS(t *testing.T) {
|
func TestAAADS(t *testing.T) {
|
||||||
str := "AAS2QGu5EUYo35u+GIPUbcPQrI8MbLvXIHaYS47i8I6De0Fzgdpyw7TT9Iti3RiIY30="
|
str := "AASWvkdk5a60bjm3lFqaoCyzU8toVp+3kKjheuOwxzWZH+adxCfv+Bv9BD0DP/WDy6Y="
|
||||||
data, _ := base64.StdEncoding.DecodeString(str)
|
data, _ := base64.StdEncoding.DecodeString(str)
|
||||||
dataStr := hex.EncodeToString(data)
|
dataStr := hex.EncodeToString(data)
|
||||||
fmt.Println("all:", dataStr)
|
fmt.Println("all:", dataStr) //96be4764e5aeb46e39b7945a9aa02cb3
|
||||||
fmt.Println("key ID:", dataStr[4:36])
|
fmt.Println("key ID:", dataStr[4:36])
|
||||||
fmt.Println("IV:", dataStr[36:68])
|
fmt.Println("IV:", dataStr[36:68])
|
||||||
fmt.Println("key main:", dataStr[68:len(dataStr)])
|
data2, _ := base64.StdEncoding.DecodeString("XsGNdyDyDHnR79iKU6d5LTSJYaQyWAEssDoD7VM5Kks=")
|
||||||
data2, _ := base64.StdEncoding.DecodeString("/xdYPxcavDO9IpsJP1uFfbbuv7WdIyckhJ9RBe3h9r8=")
|
|
||||||
dataStr2 := hex.EncodeToString(data2)
|
dataStr2 := hex.EncodeToString(data2)
|
||||||
// key := base64.StdEncoding.EncodeToString([]byte(dataStr[36:68]))
|
fmt.Println(dataStr2)
|
||||||
fmt.Println(SubstrByByte(dataStr[36:len(dataStr)], 16))
|
fmt.Println(len(data2))
|
||||||
result, _ := AESBase64Decrypt("417381da72c3b4d3f48b62dd1888637d", dataStr2[:32], "ac8f0c6cbbd72076984b8ee2f08e837b")
|
fmt.Println(len([]byte(string(data2))))
|
||||||
fmt.Println(string(result))
|
fmt.Println(len([]byte(dataStr[36:68])))
|
||||||
}
|
iv := base64.StdEncoding.EncodeToString([]byte(dataStr[36:68]))
|
||||||
|
fmt.Println(len([]byte(iv)))
|
||||||
func SubstrByByte(str string, length int) string {
|
fmt.Println(iv)
|
||||||
bs := []byte(str)[:length]
|
src := base64.StdEncoding.EncodeToString([]byte(dataStr[68:]))
|
||||||
bl := 0
|
fmt.Println(len([]byte(src)))
|
||||||
for i := len(bs) - 1; i >= 0; i-- {
|
fmt.Println(string(data[18:34]))
|
||||||
switch {
|
// str2 := []byte(dataStr[68:])
|
||||||
case bs[i] >= 0 && bs[i] <= 127:
|
// key := []byte(dataStr2)
|
||||||
return string(bs[:i+1])
|
decryptedData, err := Decrypt(data[34:50], data2, data[18:34])
|
||||||
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))
|
|
||||||
if err != nil {
|
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)
|
block, err := aes.NewCipher(key)
|
||||||
if err != nil {
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
fmt.Println(aesBlockDecrypter.BlockSize())
|
fmt.Println(block.BlockSize())
|
||||||
aesDecrypter := cipher.NewCBCDecrypter(aesBlockDecrypter, []byte(iv))
|
blockMode := cipher.NewCBCDecrypter(block, iv)
|
||||||
aesDecrypter.CryptBlocks(decrypted, []byte(src))
|
decrypted := make([]byte, len(decryptBytes))
|
||||||
return PKCS5Trimming(decrypted), nil
|
blockMode.CryptBlocks(decrypted, decryptBytes)
|
||||||
|
fmt.Println(decrypted)
|
||||||
|
decrypted = PKCS5UnPadding(decrypted)
|
||||||
|
return decrypted, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func PKCS5Trimming(encrypt []byte) []byte {
|
func PKCS5UnPadding(decrypted []byte) []byte {
|
||||||
padding := encrypt[len(encrypt)-1]
|
length := len(decrypted)
|
||||||
return encrypt[:len(encrypt)-int(padding)]
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ func TestCBUpdateRemark(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestCBGetUserInfo(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 {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ func init() {
|
|||||||
baseapi.Init(sugarLogger)
|
baseapi.Init(sugarLogger)
|
||||||
|
|
||||||
// sandbox
|
// sandbox
|
||||||
api = New("wxbf235770edaabc5c", "ba32b269a068a5b72486a0beafd171e8")
|
// api = New("wxbf235770edaabc5c", "ba32b269a068a5b72486a0beafd171e8")
|
||||||
|
|
||||||
// prod
|
// prod
|
||||||
// api = New("wx2bb99eb5d2c9b82c", "6bbbed1443cc062c20a015a64c07a531")
|
api = New("wx2bb99eb5d2c9b82c", "6bbbed1443cc062c20a015a64c07a531")
|
||||||
api.CBSetToken("20_HnsqOrwPdIORHmucRknhiM8gWpIQ0asYPLT7VIy37YPI47pURUNY7gQrNajulLtdPBr_9B4dj7WIuHsrOP5L8m9zQDJ7HIDNeSyC_Zekg4MvH0yOzpJAVQb4scb1qND84IcX2WaUJbc6gcKJDSAbAIAKZH")
|
api.CBSetToken("35_1ilNtBtqXwojmsYWgzpjn8Nn-1DuOfy0rTcsIuRz5RqXAcJRYCmcFP0oBQR6N6dBm6lOvg7j7O-YMKh_--zfbJ_4hBCfBbvI7svoeIc3l4W_UHA41LyT_asp731YpNKA9oRWkg0ftTJj0rHwLEDhAHAUNM")
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleError(t *testing.T, err error) {
|
func handleError(t *testing.T, err error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user