Просмотр исходного кода

Merge pull request #16 from iGoogle-ink/gopay/change-generateXml

change generateXml
Jerry 6 лет назад
Родитель
Сommit
4103060441
2 измененных файлов с 10 добавлено и 35 удалено
  1. 5 22
      body_map.go
  2. 5 13
      wechat_params.go

+ 5 - 22
body_map.go

@@ -4,7 +4,6 @@ import (
 	"encoding/json"
 	"encoding/xml"
 	"io"
-	"reflect"
 	"sort"
 	"strings"
 )
@@ -57,37 +56,21 @@ func (bm BodyMap) Remove(key string) {
 
 type xmlMapEntry struct {
 	XMLName xml.Name
-	Value   string `xml:",chardata"`
+	Value   interface{} `xml:",cdata"`
 }
 
 func (bm BodyMap) MarshalXML(e *xml.Encoder, start xml.StartElement) (err error) {
 	if len(bm) == 0 {
 		return nil
 	}
-	var (
-		value string
-		vKind reflect.Kind
-	)
+	start.Name = xml.Name{null, "xml"}
 	if err = e.EncodeToken(start); err != nil {
 		return
 	}
-	for k, v := range bm {
-		vKind = reflect.ValueOf(v).Kind()
-		switch vKind {
-		case reflect.String:
-			value = v.(string)
-		case reflect.Int:
-			value = Int2String(v.(int))
-		case reflect.Int64:
-			value = Int642String(v.(int64))
-		case reflect.Float32:
-			value = Float32ToString(v.(float32))
-		case reflect.Float64:
-			value = Float64ToString(v.(float64))
-		default:
-			value = ""
+	for k := range bm {
+		if v := bm.Get(k); v != null {
+			e.Encode(xmlMapEntry{XMLName: xml.Name{Local: k}, Value: v})
 		}
-		e.Encode(xmlMapEntry{XMLName: xml.Name{Local: k}, Value: value})
 	}
 	return e.EncodeToken(start.End())
 }

+ 5 - 13
wechat_params.go

@@ -7,6 +7,7 @@ import (
 	"crypto/tls"
 	"crypto/x509"
 	"encoding/hex"
+	"encoding/xml"
 	"errors"
 	"fmt"
 	"hash"
@@ -175,18 +176,9 @@ func getSanBoxSignKey(mchId, nonceStr, sign string) (key string, err error) {
 
 // 生成请求XML的Body体
 func generateXml(bm BodyMap) (reqXml string) {
-	var buffer strings.Builder
-	buffer.WriteString("<xml>")
-	for key := range bm {
-		buffer.WriteByte('<')
-		buffer.WriteString(key)
-		buffer.WriteString("><![CDATA[")
-		buffer.WriteString(bm.Get(key))
-		buffer.WriteString("]]></")
-		buffer.WriteString(key)
-		buffer.WriteByte('>')
+	bs, err := xml.Marshal(bm)
+	if err != nil {
+		return null
 	}
-	buffer.WriteString("</xml>")
-	reqXml = buffer.String()
-	return
+	return string(bs)
 }