code: func orderParam(source interface{}, bizKey string) (returnStr string) {
  	switch v := source.(type) {
  	case map[string]string:
  		keys := make([]string, 0, len(v))
  		for k := range v {
  			if k == "sign" {
  				continue
  			}
  			keys = append(keys, k)
  		}
  		sort.Strings(keys)
  		var buf bytes.Buffer
  		for _, k := range keys {
  			if v[k] == "" {
  				continue
  			}
  			if buf.Len() > 0 {
  				buf.WriteByte('&')
  			}
  			buf.WriteString(k)
  			buf.WriteByte('=')
  			buf.WriteString(v[k])
  		}
  		buf.WriteString(bizKey)
  		returnStr = buf.String()
  	case map[string]interface{}:
  		keys := make([]string, 0, len(v))
  		for k := range v {
  			if k == "sign" {
  				continue
  			}
  			keys = append(keys, k)
  		}
  		sort.Strings(keys)
  		var buf bytes.Buffer
  		for _, k := range keys {
  			if v[k] == "" {
  				continue
  			}
  			if buf.Len() > 0 {
  				buf.WriteByte('&')
  			}
  			buf.WriteString(k)
  			buf.WriteByte('=')
  			switch vv := v[k].(type) {
  			case string:
  				buf.WriteString(vv)
  			case int:
  				buf.WriteString(strconv.FormatInt(int64(vv), 10))
  			default:
  				panic("params type not supported")
  			}
  		}
  		buf.WriteString(bizKey)
  		returnStr = buf.String()
  	}
  	return
  }
docs: // order params