yaotian il y a 8 ans
Parent
commit
17292160aa
1 fichiers modifiés avec 56 ajouts et 8 suppressions
  1. 56 8
      mch/pay/simple.go

+ 56 - 8
mch/pay/simple.go

@@ -1,6 +1,7 @@
 package pay
 
 import (
+	"encoding/json"
 	"fmt"
 	"time"
 	"unicode/utf8"
@@ -9,9 +10,9 @@ import (
 	"github.com/yaotian/gowechat/util"
 )
 
-//Order 下单
+//OrderInput 下单
 //官网文档 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
-type Order struct {
+type OrderInput struct {
 	OpenID      string //trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识
 	Body        string //String(128)
 	OutTradeNum string //String(32) 20150806125346 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。
@@ -22,9 +23,45 @@ type Order struct {
 	ProductID   string //trade_type=NATIVE时(即扫码支付),此参数必传
 }
 
-/*GetJsAPIRequestDataMap 前端JsAPI支付时,需要提交的信息
+//Config jssdk支付时需要的配置
+type WxPayConfig struct {
+	AppID     string `json:"appId"`
+	TimeStamp string `json:"timeStamp"`
+	NonceStr  string `json:"nonceStr"`
+	Package   string `json:"package"`
+	SignType  string `json:"signType"`
+	PaySign   string `json:"paySign"`
+	resultMap map[string]string
+}
+
+//ToString wx.chooseWXPay content
+func (c *WxPayConfig) ToString() (str string) {
+	return fmt.Sprintf(`
+		timestamp: %s,
+    nonceStr: '%s',
+    package: '%s',
+    signType: '%s',
+    paySign: '%s', 
+		`, c.TimeStamp, c.NonceStr, c.Package, c.SignType, c.PaySign)
+}
+
+//ToJSON WeixinJSBridge  json content
+func (c *WxPayConfig) ToJSON() (str string) {
+	js, err := json.Marshal(c)
+	if err == nil {
+		return string(js)
+	}
+	return
+}
+
+//ToMap result map[string]string
+func (c *WxPayConfig) ToMap() (m map[string]string) {
+	return c.resultMap
+}
+
+/*GetJsAPIConfig 前端JsAPI支付时,需要提交的信息
  */
-func (c *Pay) GetJsAPIRequestDataMap(order Order) (result map[string]string, err error) {
+func (c *Pay) GetJsAPIConfig(order OrderInput) (config *WxPayConfig, err error) {
 	err = c.checkOrder(order)
 	if err != nil {
 		return
@@ -38,7 +75,7 @@ func (c *Pay) GetJsAPIRequestDataMap(order Order) (result map[string]string, err
 	nocestr := util.RandomStr(8)
 	timestamp := fmt.Sprint(time.Now().Unix())
 
-	result = make(map[string]string)
+	result := make(map[string]string)
 	result["appId"] = c.AppID
 	result["timeStamp"] = timestamp
 	result["nonceStr"] = nocestr
@@ -47,11 +84,22 @@ func (c *Pay) GetJsAPIRequestDataMap(order Order) (result map[string]string, err
 
 	sign := base.Sign(result, c.MchAPIKey, nil)
 	result["paySign"] = sign
+
+	config = new(WxPayConfig)
+	config.NonceStr = util.RandomStr(8)
+	config.TimeStamp = fmt.Sprint(time.Now().Unix())
+	config.AppID = c.AppID
+	config.Package = "prepay_id=" + prepayID
+	config.SignType = "MD5"
+	config.PaySign = sign
+
+	config.resultMap = result
+
 	return
 }
 
 // 调用 UnifiedOrder 获得 prepayID
-func (c *Pay) getPrepayID(order Order) (prepayID string, err error) {
+func (c *Pay) getPrepayID(order OrderInput) (prepayID string, err error) {
 	input := c.createUnifiedOrderMap(order)
 	var result map[string]string
 	if result, err = c.UnifiedOrder(input); err == nil { //有prepay_id
@@ -64,7 +112,7 @@ func (c *Pay) getPrepayID(order Order) (prepayID string, err error) {
 	return
 }
 
-func (c *Pay) createUnifiedOrderMap(order Order) (input map[string]string) {
+func (c *Pay) createUnifiedOrderMap(order OrderInput) (input map[string]string) {
 	input = make(map[string]string)
 	input["appid"] = c.AppID               //设置微信分配的公众账号ID
 	input["mch_id"] = c.MchID              //设置微信支付分配的商户号
@@ -91,7 +139,7 @@ func (c *Pay) createUnifiedOrderMap(order Order) (input map[string]string) {
 	return
 }
 
-func (c *Pay) checkOrder(order Order) (err error) {
+func (c *Pay) checkOrder(order OrderInput) (err error) {
 	tradeType := order.TradeType
 	if tradeType != "JSAPI" && tradeType != "APP" && tradeType != "NATIVE" {
 		return fmt.Errorf("tradeType is invalid")