Sfoglia il codice sorgente

add GetAppPaySign function

Jerry 6 anni fa
parent
commit
a84668d2e2
1 ha cambiato i file con 42 aggiunte e 2 eliminazioni
  1. 42 2
      wechat_servier_api.go

+ 42 - 2
wechat_servier_api.go

@@ -122,7 +122,7 @@ func VerifyPayResultSign(apiKey string, signType string, notifyRsp *WeChatNotify
 	return
 }
 
-//JSAPI支付,支付参数后,再次计算出小程序用的paySign
+//JSAPI支付,统一下单获取支付参数后,再次计算出小程序用的paySign
 func GetMiniPaySign(appId, nonceStr, prepayId, signType, timeStamp, apiKey string) (paySign string) {
 	buffer := new(bytes.Buffer)
 	buffer.WriteString("appId=")
@@ -159,7 +159,7 @@ func GetMiniPaySign(appId, nonceStr, prepayId, signType, timeStamp, apiKey strin
 	return
 }
 
-//JSAPI支付,支付参数后,再次计算出微信内H5支付需要用的paySign
+//JSAPI支付,统一下单获取支付参数后,再次计算出微信内H5支付需要用的paySign
 func GetH5PaySign(appId, nonceStr, prepayId, signType, timeStamp, apiKey string) (paySign string) {
 	buffer := new(bytes.Buffer)
 	buffer.WriteString("appId=")
@@ -196,6 +196,46 @@ func GetH5PaySign(appId, nonceStr, prepayId, signType, timeStamp, apiKey string)
 	return
 }
 
+//APP支付,统一下单获取支付参数后,再次计算APP支付所需要的的sign
+//    signType:此处签名方式,务必与统一下单时用的签名方式一致
+func GetAppPaySign(appid, partnerid, noncestr, prepayid, signType, timestamp, apiKey string) (paySign string) {
+	buffer := new(bytes.Buffer)
+	buffer.WriteString("appid=")
+	buffer.WriteString(appid)
+
+	buffer.WriteString("&nonceStr=")
+	buffer.WriteString(noncestr)
+
+	buffer.WriteString("&package=Sign=WXPay")
+
+	buffer.WriteString("&partnerid=")
+	buffer.WriteString(partnerid)
+
+	buffer.WriteString("&prepayid=")
+	buffer.WriteString(prepayid)
+
+	buffer.WriteString("&timeStamp=")
+	buffer.WriteString(timestamp)
+
+	buffer.WriteString("&key=")
+	buffer.WriteString(apiKey)
+
+	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(apiKey))
+		hash.Write([]byte(signStr))
+		hashSign = hash.Sum(nil)
+	}
+	paySign = strings.ToUpper(hex.EncodeToString(hashSign))
+	return
+}
+
 //解密开放数据
 //    encryptedData:包括敏感数据在内的完整用户信息的加密数据
 //    iv:加密算法的初始向量