wcj 6 년 전
부모
커밋
0b7a40bb92
2개의 변경된 파일82개의 추가작업 그리고 1개의 파일을 삭제
  1. 81 0
      common/src/qfw/util/common.go
  2. 1 1
      common/src/qfw/util/mysql/mysql.go

+ 81 - 0
common/src/qfw/util/common.go

@@ -5,6 +5,7 @@ import (
 	cryptoRand "crypto/rand"
 	"encoding/hex"
 	"encoding/json"
+	"encoding/xml"
 	"fmt"
 	"io"
 	"log"
@@ -12,8 +13,10 @@ import (
 	"math/big"
 	mathRand "math/rand"
 	"net/url"
+	"reflect"
 	"regexp"
 	"runtime"
+	"sort"
 	"strconv"
 	"strings"
 	"time"
@@ -608,3 +611,81 @@ func FloatFormat(tmp float64, n int) float64 {
 	f, _ := strconv.ParseFloat(fs, 64)
 	return f
 }
+
+//生成微信支付的签名
+func CreateWxSign(afterStr string, obj interface{}, filter ...string) string {
+	filter = append(filter, "sign", "xml")
+	keys := []string{}
+	m := make(map[string]string)
+	t := reflect.TypeOf(obj)
+	v := reflect.ValueOf(obj)
+	k := t.Kind()
+	if t.Kind() == reflect.Ptr {
+		t = t.Elem()
+		k = t.Kind()
+		v = v.Elem()
+	}
+	if k == reflect.Map {
+		for _, key := range v.MapKeys() {
+			keys = append(keys, key.String())
+			m[key.String()] = fmt.Sprint(v.MapIndex(key).Interface())
+		}
+	} else if k == reflect.Struct {
+		for n := 0; n < t.NumField(); n++ {
+			tagName := t.Field(n).Tag.Get("xml")
+			if tagName == "" {
+				tagName = t.Field(n).Tag.Get("json")
+			}
+			if tagName == "" {
+				tagName = t.Field(n).Name
+			}
+			keys = append(keys, tagName)
+			m[tagName] = fmt.Sprint(v.Field(n))
+		}
+	}
+	sort.Strings(keys)
+	vs := []string{}
+L:
+	for _, v := range keys {
+		for _, f := range filter {
+			if f == v {
+				continue L
+			}
+		}
+		if strings.TrimSpace(m[v]) == "" {
+			continue
+		}
+		vs = append(vs, fmt.Sprintf("%s=%s", v, m[v]))
+	}
+	return WxSign(strings.Join(vs, "&") + afterStr)
+}
+
+//简单的xml转map,只有一个层级,没有多层嵌套
+func XmlToMap(input string) map[string]string {
+	var t xml.Token
+	var err error
+	inputReader := strings.NewReader(input)
+	decoder := xml.NewDecoder(inputReader)
+	isStart := false
+	nodeName := ""
+	m := make(map[string]string)
+	for t, err = decoder.Token(); err == nil; t, err = decoder.Token() {
+		switch token := t.(type) {
+		// 处理元素开始(标签)
+		case xml.StartElement:
+			isStart = true
+			nodeName = token.Name.Local
+		// 处理元素结束(标签)
+		case xml.EndElement:
+			isStart = false
+		// 处理字符数据(这里就是元素的文本)
+		case xml.CharData:
+			if isStart {
+				m[nodeName] = string([]byte(token))
+			}
+		default:
+			// ...
+		}
+	}
+	return m
+}

+ 1 - 1
common/src/qfw/util/mysql/mysql.go

@@ -84,7 +84,7 @@ func (m *Mysql) Find(tableName string, query map[string]interface{}, fields, ord
 			for _, rv_k := range rv.MapKeys() {
 				if rv_k.String() == "ne" {
 					fs = append(fs, fmt.Sprintf("%s!=?", k))
-					vs = append(vs, fmt.Sprint(rv.MapIndex(rv_k).Interface()))
+					vs = append(vs, rv.MapIndex(rv_k).Interface())
 				}
 			}
 		} else {