From 58c6522d134e49d6057f5f30d28be78a7478a06d Mon Sep 17 00:00:00 2001 From: huangjiajun <582604932@qq.com> Date: Wed, 8 Feb 2023 18:14:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lianlian/api.go | 298 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 lianlian/api.go diff --git a/lianlian/api.go b/lianlian/api.go new file mode 100644 index 0000000..3c67fbc --- /dev/null +++ b/lianlian/api.go @@ -0,0 +1,298 @@ +package lianlian + +import ( + zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils" + "crypto/aes" + "crypto/cipher" + "encoding/base64" + "fmt" + "github.com/syyongx/php2go" + "github.com/tidwall/gjson" + "time" +) + +type AesEncrypter struct { + key []byte + iv []byte + block cipher.Block +} + +var AesEcpt AesEncrypter +var channelId = "1870" +var sysSecret = "WDgCblk9EOduT30aHVdeVg==" +var Aeckey = "WDgCblk9EOduT30aHVdeVg==" +var tbaseUrl = "https://uapid.lianlianlvyou.com/ll/api/" + +//获取渠道账户信息 +func GetBalance() string { + args := map[string]interface{}{ + "flag": 1, + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("channel/getChannelAccountInfo", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//查询站点列表 +func GetLocationList(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("location/getLocationList", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//查询产品分类 +func ProductCate(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("product/queryProductCategory", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//查询产品列表 +func ProductList(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("product/queryProductList", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//查询产品信息 +func ProductDetail(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("product/queryProductByCondition", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//查询产品图文详情 +func ProductDetailImg(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("product/detail/v2/html", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//查询产品图文详情 +func ProductStatus(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + send, err := Send("product/queryProductStatus", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//创建渠道订单 +func CreateOrder(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + fmt.Println(tmp) + send, err := Send("channelOrder/createOrder", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//订单详情 +func OrderDetail(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + fmt.Println(tmp) + send, err := Send("orderDetail/queryOrderDetail", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//物流 +func OrderExpress(params map[string]string) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + fmt.Println(tmp) + send, err := Send("orderDetail/queryOrderExpress", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} + +//订单退款 +func OrderApplyRefund(params map[string]interface{}) string { + args := map[string]interface{}{} + for k, v := range params { + if v != "" { + args[k] = v + } + } + tmp := zhios_third_party_utils.SerializeStr(args) + fmt.Println(tmp) + send, err := Send("order/applyRefund", tmp) + if err != nil || gjson.Get(send, "code").Int() != 200 { + fmt.Println(send) + return "" + } + encryptedData := CommEncryptedData(send) + return encryptedData +} +func CommEncryptedData(send string) string { + encrptedStr := gjson.Get(send, "data.encryptedData").String() + encrptedStr, _ = php2go.Base64Decode(encrptedStr) + encryptedData := AesDecryptECB([]byte(encrptedStr), []byte(Aeckey)) + fmt.Println(encryptedData) + return encryptedData +} +func Send(method, params string) (string, error) { + reqUrl := tbaseUrl + method + "?" + Aeckey, _ = php2go.Base64Decode(Aeckey) + encryptedData := AesEncryptECB([]byte(params), []byte(Aeckey)) + nowTime := time.Now().Unix() * 1000 + sysParams := map[string]interface{}{ + "encryptedData": string(encryptedData), + "channelId": channelId, + "timestamp": nowTime, + } + sysParams["sign"] = getSign(string(encryptedData), nowTime) + post, err := zhios_third_party_utils.CurlPost(reqUrl, zhios_third_party_utils.SerializeStr(sysParams), map[string]string{}) + if err != nil { + return "", err + } + + return string(post), nil +} +func getSign(encryptedData string, timestamp int64) string { + return php2go.Md5(encryptedData + channelId + zhios_third_party_utils.Int64ToStr(timestamp)) +} + +func generateKey(key []byte) (genKey []byte) { + genKey = make([]byte, 16) + copy(genKey, key) + for i := 16; i < len(key); { + for j := 0; j < 16 && i < len(key); j, i = j+1, i+1 { + genKey[j] ^= key[i] + } + } + return genKey +} + +//http://events.jianshu.io/p/2e0b3ffeaeff +func AesEncryptECB(origData []byte, key []byte) string { + var encrypted []byte + cipher, _ := aes.NewCipher(generateKey(key)) + length := (len(origData) + aes.BlockSize) / aes.BlockSize + plain := make([]byte, length*aes.BlockSize) + copy(plain, origData) + pad := byte(len(plain) - len(origData)) + for i := len(origData); i < len(plain); i++ { + plain[i] = pad + } + encrypted = make([]byte, len(plain)) + // 分组分块加密 + for bs, be := 0, cipher.BlockSize(); bs <= len(origData); bs, be = bs+cipher.BlockSize(), be+cipher.BlockSize() { + cipher.Encrypt(encrypted[bs:be], plain[bs:be]) + } + + return base64.StdEncoding.EncodeToString(encrypted) +} + +func AesDecryptECB(encrypted []byte, key []byte) string { + var decrypted []byte + cipher, _ := aes.NewCipher(generateKey(key)) + decrypted = make([]byte, len(encrypted)) + // + for bs, be := 0, cipher.BlockSize(); bs < len(encrypted); bs, be = bs+cipher.BlockSize(), be+cipher.BlockSize() { + cipher.Decrypt(decrypted[bs:be], encrypted[bs:be]) + } + trim := 0 + if len(decrypted) > 0 { + trim = len(decrypted) - int(decrypted[len(decrypted)-1]) + } + + return string(decrypted[:trim]) +}