You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.9KB

  1. package utils
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/tal-tech/go-zero/core/logx"
  6. "io/ioutil"
  7. "net/http"
  8. "net/url"
  9. "strings"
  10. )
  11. type Callback func(result []byte) interface{}
  12. func HttpDoCallBack(reqUrl, method string, params map[string]string, header map[string]string, callback Callback) (data interface{}, err error) {
  13. body, err := HttpDo(reqUrl, method, params, header)
  14. if err != nil {
  15. logx.Errorf("method %s, reqUrl %s error %s", method, reqUrl, err)
  16. return nil, err
  17. }
  18. if len(body) > 0 {
  19. data = callback(body)
  20. return data, err
  21. }
  22. return nil, err
  23. }
  24. func HttpDo(reqUrl, method string, params map[string]string, header map[string]string) (data []byte, err error) {
  25. var paramStr []byte
  26. paramStr, _ = json.Marshal(params)
  27. client := &http.Client{}
  28. req, err := http.NewRequest(strings.ToUpper(method), reqUrl, strings.NewReader(string(paramStr)))
  29. if err != nil {
  30. logx.Errorf("method %s, reqUrl %s error %s", method, reqUrl, err)
  31. return nil, err
  32. }
  33. for k, v := range header {
  34. req.Header.Set(k, v)
  35. }
  36. resp, err := client.Do(req)
  37. if err != nil {
  38. logx.Errorf("method %s, reqUrl %s error %s", method, reqUrl, err)
  39. }
  40. defer resp.Body.Close()
  41. body, err := ioutil.ReadAll(resp.Body)
  42. if err != nil {
  43. logx.Errorf("method %s, reqUrl %s error %s", method, reqUrl, err)
  44. return nil, err
  45. }
  46. return body, nil
  47. }
  48. func GetParameterString(params map[string][]string) string {
  49. var paramStr = ""
  50. for k, v := range params {
  51. s, _ := url.QueryUnescape(strings.Join(v, ","))
  52. if len(paramStr) == 0 {
  53. paramStr = fmt.Sprintf("%s=%s", k, s)
  54. } else {
  55. paramStr = fmt.Sprintf("%s&%s=%s", paramStr, k, s)
  56. }
  57. }
  58. return paramStr
  59. }
  60. func GetSign(data, url string) string {
  61. reqMap := make(map[string]string)
  62. reqMap["obj"] = data
  63. headerMap := make(map[string]string)
  64. headerMap["Content-Type"] = "application/json"
  65. b, err := HttpDo(url, "POST", reqMap, headerMap)
  66. if err != nil {
  67. logx.Error(err)
  68. }
  69. return string(b)
  70. }