Kaynağa Gözat

add GetMiniPaySign method

Jerry 7 yıl önce
ebeveyn
işleme
933057ad71
2 değiştirilmiş dosya ile 31 ekleme ve 3 silme
  1. 0 3
      wechat_client.go
  2. 31 0
      wechat_params.go

+ 0 - 3
wechat_client.go

@@ -3,7 +3,6 @@ package gopay
 import (
 	"encoding/xml"
 	"github.com/parnurzeal/gorequest"
-	"log"
 )
 
 type weChatClient struct {
@@ -229,9 +228,7 @@ func (this *weChatClient) doWeChat(body BodyMap, url string) (bytes []byte, err
 		sign = getLocalSign(this.secretKey, body.Get("sign_type"), body)
 	}
 	body.Set("sign", sign)
-	log.Println("reqBody:::", body)
 	reqXML := generateXml(body)
-	log.Println("reqXML:::", reqXML)
 	//===============发起请求===================
 	agent := gorequest.New()
 	if this.isProd {

+ 31 - 0
wechat_params.go

@@ -9,6 +9,37 @@ import (
 	"strings"
 )
 
+//JSAPI支付,支付参数后,再次计算出小程序用的paySign
+func GetMiniPaySign(appId, timeStamp, nonceStr, packages, signType, secretKey string) (paySign string) {
+	buffer := new(bytes.Buffer)
+	buffer.WriteString("appId=")
+	buffer.WriteString(appId)
+	buffer.WriteString("&nonceStr=")
+	buffer.WriteString(nonceStr)
+	buffer.WriteString("&package=")
+	buffer.WriteString("prepay_id=" + packages)
+	buffer.WriteString("&signType=")
+	buffer.WriteString(signType)
+	buffer.WriteString("&timeStamp=")
+	buffer.WriteString(timeStamp)
+	buffer.WriteString("&key=")
+	buffer.WriteString(secretKey)
+	signStr := buffer.String()
+
+	var hashSign []byte
+	if signType == SignType_MD5 {
+		hash := md5.New()
+		hash.Write([]byte(signStr))
+		hashSign = hash.Sum(nil)
+	} else {
+		hash := hmac.New(sha256.New, []byte(secretKey))
+		hash.Write([]byte(signStr))
+		hashSign = hash.Sum(nil)
+	}
+	paySign = strings.ToUpper(hex.EncodeToString(hashSign))
+	return
+}
+
 //本地通过支付参数计算Sign值
 func getLocalSign(secretKey string, signType string, body BodyMap) (sign string) {
 	signStr := sortSignParams(secretKey, body)