第三方api接口
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. package lianlian
  2. import (
  3. zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
  4. "crypto/aes"
  5. "crypto/cipher"
  6. "encoding/base64"
  7. "errors"
  8. "fmt"
  9. "github.com/syyongx/php2go"
  10. "github.com/tidwall/gjson"
  11. "time"
  12. )
  13. type AesEncrypter struct {
  14. key []byte
  15. iv []byte
  16. block cipher.Block
  17. }
  18. var AesEcpt AesEncrypter
  19. var channelId = "1870"
  20. var sysSecret = "WDgCblk9EOduT30aHVdeVg=="
  21. var Aeckey = "WDgCblk9EOduT30aHVdeVg=="
  22. var tbaseUrl = "https://uapid.lianlianlvyou.com/ll/api/"
  23. var channelIdProd = "3270"
  24. var sysSecretProd = "Qqwsr0tozSaZXh4eRBagcg=="
  25. var AeckeyProd = "Qqwsr0tozSaZXh4eRBagcg=="
  26. var tbaseUrlProd = "https://uapi.lianlianlvyou.com/ll/api/"
  27. //获取渠道账户信息
  28. func GetBalance(prod bool) string {
  29. args := map[string]interface{}{
  30. "flag": 1,
  31. }
  32. tmp := zhios_third_party_utils.SerializeStr(args)
  33. send, err := Send("channel/getChannelAccountInfo", tmp, prod)
  34. if err != nil || gjson.Get(send, "code").Int() != 200 {
  35. fmt.Println(send)
  36. return ""
  37. }
  38. encryptedData := CommEncryptedData(send, prod)
  39. return encryptedData
  40. }
  41. //查询站点列表
  42. func GetLocationList(params map[string]string, prod bool) string {
  43. args := map[string]interface{}{}
  44. for k, v := range params {
  45. if v != "" {
  46. args[k] = v
  47. }
  48. }
  49. tmp := zhios_third_party_utils.SerializeStr(args)
  50. send, err := Send("location/getLocationList", tmp, prod)
  51. if err != nil || gjson.Get(send, "code").Int() != 200 {
  52. fmt.Println(send)
  53. return ""
  54. }
  55. encryptedData := CommEncryptedData(send, prod)
  56. return encryptedData
  57. }
  58. //查询产品分类
  59. func ProductCate(params map[string]string, prod bool) string {
  60. args := map[string]interface{}{}
  61. for k, v := range params {
  62. if v != "" {
  63. args[k] = v
  64. }
  65. }
  66. tmp := zhios_third_party_utils.SerializeStr(args)
  67. send, err := Send("product/queryProductCategory", tmp, prod)
  68. if err != nil || gjson.Get(send, "code").Int() != 200 {
  69. fmt.Println(send)
  70. return ""
  71. }
  72. encryptedData := CommEncryptedData(send, prod)
  73. return encryptedData
  74. }
  75. //查询产品列表
  76. func ProductList(params map[string]string, prod bool) string {
  77. args := map[string]interface{}{}
  78. for k, v := range params {
  79. if v != "" {
  80. args[k] = v
  81. }
  82. }
  83. tmp := zhios_third_party_utils.SerializeStr(args)
  84. send, err := Send("product/queryProductList", tmp, prod)
  85. if err != nil || gjson.Get(send, "code").Int() != 200 {
  86. fmt.Println(send)
  87. return ""
  88. }
  89. encryptedData := CommEncryptedData(send, prod)
  90. return encryptedData
  91. }
  92. //查询产品信息
  93. func ProductDetail(params map[string]string, prod bool) string {
  94. args := map[string]interface{}{}
  95. for k, v := range params {
  96. if v != "" {
  97. args[k] = v
  98. }
  99. }
  100. tmp := zhios_third_party_utils.SerializeStr(args)
  101. send, err := Send("product/queryProductByCondition", tmp, prod)
  102. if err != nil || gjson.Get(send, "code").Int() != 200 {
  103. fmt.Println(send)
  104. return ""
  105. }
  106. encryptedData := CommEncryptedData(send, prod)
  107. return encryptedData
  108. }
  109. //查询产品图文详情
  110. func ProductDetailImg(params map[string]string, prod bool) string {
  111. args := map[string]interface{}{}
  112. for k, v := range params {
  113. if v != "" {
  114. args[k] = v
  115. }
  116. }
  117. tmp := zhios_third_party_utils.SerializeStr(args)
  118. send, err := Send("product/detail/v2/html", tmp, prod)
  119. if err != nil || gjson.Get(send, "code").Int() != 200 {
  120. fmt.Println(send)
  121. return ""
  122. }
  123. encryptedData := CommEncryptedData(send, prod)
  124. return encryptedData
  125. }
  126. //查询产品图文详情
  127. func ProductStatus(params map[string]string, prod bool) string {
  128. args := map[string]interface{}{}
  129. for k, v := range params {
  130. if v != "" {
  131. args[k] = v
  132. }
  133. }
  134. tmp := zhios_third_party_utils.SerializeStr(args)
  135. send, err := Send("product/queryProductStatus", tmp, prod)
  136. if err != nil || gjson.Get(send, "code").Int() != 200 {
  137. fmt.Println(send)
  138. return ""
  139. }
  140. encryptedData := CommEncryptedData(send, prod)
  141. return encryptedData
  142. }
  143. //创建渠道订单
  144. func CreateOrder(params map[string]string, prod bool) (string, error) {
  145. args := map[string]interface{}{}
  146. for k, v := range params {
  147. if v != "" {
  148. args[k] = v
  149. }
  150. }
  151. tmp := zhios_third_party_utils.SerializeStr(args)
  152. fmt.Println(tmp)
  153. send, err := Send("channelOrder/createOrder", tmp, prod)
  154. if err != nil || gjson.Get(send, "code").Int() != 200 {
  155. fmt.Println(send)
  156. if err == nil {
  157. err = errors.New(gjson.Get(send, "message").String())
  158. }
  159. return "", err
  160. }
  161. encryptedData := CommEncryptedData(send, prod)
  162. return encryptedData, nil
  163. }
  164. func CheckCreateOrder(params map[string]string, prod bool) (string, error) {
  165. args := map[string]interface{}{}
  166. for k, v := range params {
  167. if v != "" {
  168. args[k] = v
  169. }
  170. }
  171. tmp := zhios_third_party_utils.SerializeStr(args)
  172. fmt.Println(tmp)
  173. send, err := Send("channelOrder/checkCreateOrder", tmp, prod)
  174. if err != nil || gjson.Get(send, "code").Int() != 200 {
  175. fmt.Println(send)
  176. if err == nil {
  177. err = errors.New(gjson.Get(send, "message").String())
  178. }
  179. return "", err
  180. }
  181. //encryptedData := CommEncryptedData(send,prod)
  182. return send, nil
  183. }
  184. //订单详情
  185. func OrderDetail(params map[string]string, prod bool) string {
  186. args := map[string]interface{}{}
  187. for k, v := range params {
  188. if v != "" {
  189. args[k] = v
  190. }
  191. }
  192. tmp := zhios_third_party_utils.SerializeStr(args)
  193. fmt.Println(tmp)
  194. send, err := Send("orderDetail/queryOrderDetail", tmp, prod)
  195. if err != nil || gjson.Get(send, "code").Int() != 200 {
  196. fmt.Println(send)
  197. return ""
  198. }
  199. encryptedData := CommEncryptedData(send, prod)
  200. return encryptedData
  201. }
  202. //物流
  203. func OrderExpress(params map[string]string, prod bool) string {
  204. args := map[string]interface{}{}
  205. for k, v := range params {
  206. if v != "" {
  207. args[k] = v
  208. }
  209. }
  210. tmp := zhios_third_party_utils.SerializeStr(args)
  211. fmt.Println(tmp)
  212. send, err := Send("orderDetail/queryOrderExpress", tmp, prod)
  213. if err != nil || gjson.Get(send, "code").Int() != 200 {
  214. fmt.Println(send)
  215. return ""
  216. }
  217. encryptedData := CommEncryptedData(send, prod)
  218. return encryptedData
  219. }
  220. //订单退款
  221. func OrderApplyRefund(params map[string]interface{}, prod bool) (string, error) {
  222. args := map[string]interface{}{}
  223. for k, v := range params {
  224. if v != "" {
  225. args[k] = v
  226. }
  227. }
  228. tmp := zhios_third_party_utils.SerializeStr(args)
  229. fmt.Println(tmp)
  230. send, err := Send("order/applyRefund", tmp, prod)
  231. if err != nil || gjson.Get(send, "code").Int() != 200 {
  232. fmt.Println(send)
  233. if err == nil {
  234. err = errors.New(gjson.Get(send, "message").String())
  235. }
  236. return "", err
  237. }
  238. encryptedData := CommEncryptedData(send, prod)
  239. return encryptedData, nil
  240. }
  241. func CommEncryptedData(send string, prod bool) string {
  242. Aeckey1, _ := php2go.Base64Decode(Aeckey)
  243. if prod {
  244. Aeckey1, _ = php2go.Base64Decode(AeckeyProd)
  245. }
  246. encrptedStr := gjson.Get(send, "data.encryptedData").String()
  247. encrptedStr, _ = php2go.Base64Decode(encrptedStr)
  248. encryptedData := AesDecryptECB([]byte(encrptedStr), []byte(Aeckey1))
  249. fmt.Println(encryptedData)
  250. return encryptedData
  251. }
  252. func Send(method, params string, prod bool) (string, error) {
  253. reqUrl := tbaseUrl + method + "?"
  254. Aeckey1, _ := php2go.Base64Decode(Aeckey)
  255. if prod {
  256. reqUrl = tbaseUrlProd + method + "?"
  257. Aeckey1, _ = php2go.Base64Decode(AeckeyProd)
  258. }
  259. encryptedData := AesEncryptECB([]byte(params), []byte(Aeckey1))
  260. nowTime := time.Now().Unix() * 1000
  261. sysParams := map[string]interface{}{
  262. "encryptedData": string(encryptedData),
  263. "channelId": channelId,
  264. "timestamp": nowTime,
  265. }
  266. if prod {
  267. sysParams["channelId"] = channelIdProd
  268. }
  269. sysParams["sign"] = getSign(string(encryptedData), nowTime, prod)
  270. post, err := zhios_third_party_utils.CurlPost(reqUrl, zhios_third_party_utils.SerializeStr(sysParams), map[string]string{})
  271. if err != nil {
  272. return "", err
  273. }
  274. return string(post), nil
  275. }
  276. func getSign(encryptedData string, timestamp int64, prod bool) string {
  277. if prod {
  278. return php2go.Md5(encryptedData + channelIdProd + zhios_third_party_utils.Int64ToStr(timestamp))
  279. }
  280. return php2go.Md5(encryptedData + channelId + zhios_third_party_utils.Int64ToStr(timestamp))
  281. }
  282. func generateKey(key []byte) (genKey []byte) {
  283. genKey = make([]byte, 16)
  284. copy(genKey, key)
  285. for i := 16; i < len(key); {
  286. for j := 0; j < 16 && i < len(key); j, i = j+1, i+1 {
  287. genKey[j] ^= key[i]
  288. }
  289. }
  290. return genKey
  291. }
  292. //http://events.jianshu.io/p/2e0b3ffeaeff
  293. func AesEncryptECB(origData []byte, key []byte) string {
  294. var encrypted []byte
  295. cipher, _ := aes.NewCipher(generateKey(key))
  296. length := (len(origData) + aes.BlockSize) / aes.BlockSize
  297. plain := make([]byte, length*aes.BlockSize)
  298. copy(plain, origData)
  299. pad := byte(len(plain) - len(origData))
  300. for i := len(origData); i < len(plain); i++ {
  301. plain[i] = pad
  302. }
  303. encrypted = make([]byte, len(plain))
  304. // 分组分块加密
  305. for bs, be := 0, cipher.BlockSize(); bs <= len(origData); bs, be = bs+cipher.BlockSize(), be+cipher.BlockSize() {
  306. cipher.Encrypt(encrypted[bs:be], plain[bs:be])
  307. }
  308. return base64.StdEncoding.EncodeToString(encrypted)
  309. }
  310. func AesDecryptECB(encrypted []byte, key []byte) string {
  311. var decrypted []byte
  312. cipher, _ := aes.NewCipher(generateKey(key))
  313. decrypted = make([]byte, len(encrypted))
  314. //
  315. for bs, be := 0, cipher.BlockSize(); bs < len(encrypted); bs, be = bs+cipher.BlockSize(), be+cipher.BlockSize() {
  316. cipher.Decrypt(decrypted[bs:be], encrypted[bs:be])
  317. }
  318. trim := 0
  319. if len(decrypted) > 0 {
  320. trim = len(decrypted) - int(decrypted[len(decrypted)-1])
  321. }
  322. return string(decrypted[:trim])
  323. }