yaotian 8 лет назад
Родитель
Сommit
d5ea30cec0
1 измененных файлов с 7 добавлено и 53 удалено
  1. 7 53
      mch/pay/simple.go

+ 7 - 53
mch/pay/simple.go

@@ -1,20 +1,16 @@
 package pay
 
 import (
-	"bytes"
-	"crypto/md5"
-	"encoding/hex"
 	"fmt"
-	"hash"
-	"sort"
 	"time"
 	"unicode/utf8"
 
+	"github.com/yaotian/gowechat/mch/base"
 	"github.com/yaotian/gowechat/util"
 )
 
 //Order 下单
-//https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
+//官网文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
 type Order struct {
 	OpenID      string //trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识
 	Body        string //String(128)
@@ -26,8 +22,9 @@ type Order struct {
 	ProductID   string //trade_type=NATIVE时(即扫码支付),此参数必传
 }
 
-//GetPrepayMap 支付页面需要的信息,map格式
-func (c *Pay) GetPrepayMap(order Order) (result map[string]string, err error) {
+/*GetJsAPIRequestDataMap 前端JsAPI支付时,需要提交的信息
+ */
+func (c *Pay) GetJsAPIRequestDataMap(order Order) (result map[string]string, err error) {
 	err = c.checkOrder(order)
 	if err != nil {
 		return
@@ -48,7 +45,7 @@ func (c *Pay) GetPrepayMap(order Order) (result map[string]string, err error) {
 	result["package"] = "prepay_id=" + prepayID
 	result["signType"] = "MD5"
 
-	sign := sign(result, c.MchAPIKey, nil)
+	sign := base.Sign(result, c.MchAPIKey, nil)
 	result["paySign"] = sign
 	return
 }
@@ -89,54 +86,11 @@ func (c *Pay) createUnifiedOrderMap(order Order) (input map[string]string) {
 	input["openid"] = order.OpenID //设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid
 
 	//sign
-	sign := sign(input, c.MchAPIKey, nil)
+	sign := base.Sign(input, c.MchAPIKey, nil)
 	input["sign"] = sign
 	return
 }
 
-// 微信支付签名.
-//  parameters: 待签名的参数集合
-//  apiKey:     API密钥
-//  fn:         func() hash.Hash, 如果 fn == nil 则默认用 md5.New
-func sign(parameters map[string]string, apiKey string, fn func() hash.Hash) string {
-	ks := make([]string, 0, len(parameters))
-	for k := range parameters {
-		if k == "sign" {
-			continue
-		}
-		ks = append(ks, k)
-	}
-	sort.Strings(ks)
-
-	if fn == nil {
-		fn = md5.New
-	}
-	h := fn()
-
-	buf := make([]byte, 256)
-	for _, k := range ks {
-		v := parameters[k]
-		if v == "" {
-			continue
-		}
-
-		buf = buf[:0]
-		buf = append(buf, k...)
-		buf = append(buf, '=')
-		buf = append(buf, v...)
-		buf = append(buf, '&')
-		h.Write(buf)
-	}
-	buf = buf[:0]
-	buf = append(buf, "key="...)
-	buf = append(buf, apiKey...)
-	h.Write(buf)
-
-	signature := make([]byte, h.Size()*2)
-	hex.Encode(signature, h.Sum(nil))
-	return string(bytes.ToUpper(signature))
-}
-
 func (c *Pay) checkOrder(order Order) (err error) {
 	tradeType := order.TradeType
 	if tradeType != "JSAPI" && tradeType != "APP" && tradeType != "NATIVE" {