param.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package util
  2. import (
  3. "bytes"
  4. "sort"
  5. "strconv"
  6. )
  7. // OrderParam order params
  8. func OrderParam(source interface{}, bizKey string) (returnStr string) {
  9. switch v := source.(type) {
  10. case map[string]string:
  11. keys := make([]string, 0, len(v))
  12. for k := range v {
  13. if k == "sign" {
  14. continue
  15. }
  16. keys = append(keys, k)
  17. }
  18. sort.Strings(keys)
  19. var buf bytes.Buffer
  20. for _, k := range keys {
  21. if v[k] == "" {
  22. continue
  23. }
  24. if buf.Len() > 0 {
  25. buf.WriteByte('&')
  26. }
  27. buf.WriteString(k)
  28. buf.WriteByte('=')
  29. buf.WriteString(v[k])
  30. }
  31. buf.WriteString(bizKey)
  32. returnStr = buf.String()
  33. case map[string]interface{}:
  34. keys := make([]string, 0, len(v))
  35. for k := range v {
  36. if k == "sign" {
  37. continue
  38. }
  39. keys = append(keys, k)
  40. }
  41. sort.Strings(keys)
  42. var buf bytes.Buffer
  43. for _, k := range keys {
  44. if v[k] == "" {
  45. continue
  46. }
  47. if buf.Len() > 0 {
  48. buf.WriteByte('&')
  49. }
  50. buf.WriteString(k)
  51. buf.WriteByte('=')
  52. switch vv := v[k].(type) {
  53. case string:
  54. buf.WriteString(vv)
  55. case int:
  56. buf.WriteString(strconv.FormatInt(int64(vv), 10))
  57. default:
  58. panic("params type not supported")
  59. }
  60. }
  61. buf.WriteString(bizKey)
  62. returnStr = buf.String()
  63. }
  64. return
  65. }