智盟项目
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

99 рядки
2.2 KiB

  1. package zhimeng
  2. import (
  3. "applet/app/utils/logx"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "github.com/tidwall/gjson"
  8. )
  9. // SDK is zm sdk
  10. type SDK struct {
  11. Action string
  12. operation string
  13. response []byte
  14. SmsKey string
  15. SmsSecret string
  16. data interface{}
  17. err error
  18. }
  19. // ToInterface is data to Interface
  20. func (sdk *SDK) ToInterface() interface{} {
  21. return sdk.data
  22. }
  23. // Init is init action
  24. // In some condition, such as send Sms, need pass sms key and secret after 'action'
  25. func (sdk *SDK) Init(action string, keys ...string) {
  26. sdk.Action = action
  27. //if keys[0] == "" || keys[1] == "" {
  28. // sdk.err = errors.New("智盟短信未配置")
  29. //}
  30. if len(keys) > 1 {
  31. sdk.SmsKey = keys[0]
  32. sdk.SmsSecret = keys[1]
  33. }
  34. }
  35. // SelectFunction is select api with operation
  36. func (sdk *SDK) SelectFunction(operation string) *SDK {
  37. sdk.operation = operation
  38. return sdk
  39. }
  40. // WithSMSArgs is SMS
  41. func (sdk *SDK) WithSMSArgs(args map[string]interface{}) *SDK {
  42. res, err := SMSend(sdk.Action, sdk.operation, sdk.SmsKey, sdk.SmsSecret, args)
  43. if err != nil {
  44. logx.Error(err)
  45. }
  46. sdk.response = res
  47. return sdk
  48. }
  49. // WithArgs is post data to api
  50. func (sdk *SDK) WithArgs(args map[string]interface{}) *SDK {
  51. // args["appkey"] = svc.SysCfgGet(c, md.KEY_CFG_ZM_AK)
  52. // args["secret_key"] = svc.SysCfgGet(c, md.KEY_CFG_ZM_SK)
  53. res, err := Send(sdk.Action, sdk.operation, args)
  54. if err != nil {
  55. logx.Error(err)
  56. }
  57. // for k, v := range args {
  58. // fmt.Printf("%s:%v \n", k, v)
  59. // }
  60. fmt.Println("唯品会请求", args, string(res))
  61. sdk.response = res
  62. return sdk
  63. }
  64. // Result is response data from api , return interface{}
  65. func (sdk *SDK) Result() (*SDK, error) {
  66. if sdk.err != nil {
  67. return nil, sdk.err
  68. }
  69. tmp := struct {
  70. Msg string `json:"msg"`
  71. Success int `json:"success"`
  72. Data interface{} `json:"data"`
  73. }{}
  74. if err := json.Unmarshal(sdk.response, &tmp); err != nil {
  75. return nil, logx.Error("【Resp】" + string(sdk.response) + ", 【Error】" + err.Error())
  76. }
  77. if tmp.Success != StatusSuc {
  78. return nil, logx.Error(string(sdk.response))
  79. }
  80. if gjson.GetBytes(sdk.response, "data").String() == "[]" {
  81. return nil, errors.New("no result")
  82. }
  83. sdk.data = tmp.Data
  84. return sdk, nil
  85. }