浏览代码

build many wx pay function

abiao 5 年之前
父节点
当前提交
485becf452
共有 1 个文件被更改,包括 27 次插入16 次删除
  1. 27 16
      go/gopath/src/fohow.com/libs/wx_mp/pay.go

+ 27 - 16
go/gopath/src/fohow.com/libs/wx_mp/pay.go

@@ -47,19 +47,20 @@ const (
 )
 
 //小程序端微信支付client
-func getMchProxyInitClient() *mch.Proxy {
-
+func getMchProxyInitClient(payCode string) *mch.Proxy {
+	mechant := GetMechantInfo(payCode)
 	appId := beego.AppConfig.String("WxFohowXcxAppId") //获取小程序渠道appId
-
-	mchProxy := mch.NewProxy(appId, mchId, apiKey, nil)
+	mchProxy := mch.NewProxy(appId, mechant.MchId, mechant.ApiKey, nil)
 	return mchProxy
 }
-func getMchTLSProxyInitClient() *mch.Proxy {
+func getMchTLSProxyInitClient(payCode string) *mch.Proxy {
 	appId := beego.AppConfig.String("WxFohowXcxAppId") //获取小程序渠道appId
+	mechant := GetMechantInfo(payCode)
+
 	var tlsHttpCilent, _ = mch.NewTLSHttpClient(
-		beego.AppConfig.String("MchCertFile"),
-		beego.AppConfig.String("MchKeyFile"))
-	mchTLSProxy := mch.NewProxy(appId, mchId, apiKey, tlsHttpCilent)
+		mechant.MchCertFile,
+		mechant.MchKeyFile)
+	mchTLSProxy := mch.NewProxy(appId, mechant.MchId, mechant.ApiKey, tlsHttpCilent)
 	return mchTLSProxy
 }
 
@@ -155,6 +156,7 @@ func GetPayData(openid, outTradeNo string, totalPrice int64, body, notifyUrl, re
 func getPayPrepayId(openid, outTradeNo string, totalPrice int64, body, notifyUrl, remoteIp, payCode string, limit bool) (prepayId string) {
 	appId := beego.AppConfig.String("WxFohowXcxAppId") //获取小程序渠道appId
 	mechantInfo := GetMechantInfo(payCode)             //商户号配置信息
+	mchProxy := getMchProxyInitClient(payCode)
 
 	outTradeNo = fmt.Sprintf("%s_%d", outTradeNo, time.Now().Unix())
 	u := uuid.NewV4().String()
@@ -191,13 +193,17 @@ func getPayPrepayId(openid, outTradeNo string, totalPrice int64, body, notifyUrl
 }
 
 //订单退款接口
-func GetRefundDataPay(outTradeNo, outRefundNo string, totalPrice int64, transactionId, remark string) (ret map[string]string) {
+func GetRefundDataPay(outTradeNo, outRefundNo string, totalPrice int64, transactionId, remark, payCode string) (ret map[string]string) {
 	outTradeNo = fmt.Sprintf("%s_%d", outTradeNo, time.Now().Unix())
+	appId := beego.AppConfig.String("WxFohowXcxAppId") //获取小程序渠道appId
+	mechantInfo := GetMechantInfo(payCode)             //商户号配置信息
+	mchTLSProxy := getMchTLSProxyInitClient(payCode)
+
 	u := uuid.NewV4().String()
 	us := strings.Split(u, "-")
 	nonce_str := strings.Join(us, "")
 	req := map[string]string{
-		"mch_id":         mchId,
+		"mch_id":         mechantInfo.MchId,
 		"appid":          appId,
 		"nonce_str":      nonce_str, //fmt.Sprintf("%d", time.Now().Unix()),
 		"transaction_id": transactionId,
@@ -208,7 +214,7 @@ func GetRefundDataPay(outTradeNo, outRefundNo string, totalPrice int64, transact
 		//"notify_url":       notifyUrl,
 		"refund_desc": remark,
 	}
-	sign := mch.Sign(req, apiKey, nil)
+	sign := mch.Sign(req, mechantInfo.ApiKey, nil)
 	req["sign"] = sign
 	beego.BeeLogger.Warn("%v", req)
 	ret, err := pay.Refund(mchTLSProxy, req)
@@ -233,11 +239,14 @@ func getTradeNo(prefix string) string {
 //  FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)
 //  OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
 //  如果check_name设置为FORCE_CHECK或OPTION_CHECK,则必填用户真实姓名
-func Transfers(openid string, rmb int64, tradeNo, check, realName, desc string) map[string]string {
+func Transfers(openid string, rmb int64, tradeNo, check, realName, payCode, desc string) map[string]string {
 	// tradNo := getTradeNo("EP")
+	appId := beego.AppConfig.String("WxFohowXcxAppId") //获取小程序渠道appId
+	mechantInfo := GetMechantInfo(payCode)             //商户号配置信息
+	mchTLSProxy := getMchTLSProxyInitClient(payCode)
 	req := map[string]string{
 		"mch_appid":        appId,
-		"mchid":            mchId,
+		"mchid":            mechantInfo.MchId,
 		"nonce_str":        fmt.Sprintf("%d", time.Now().Unix()),
 		"partner_trade_no": tradeNo,
 		"openid":           openid,
@@ -246,7 +255,7 @@ func Transfers(openid string, rmb int64, tradeNo, check, realName, desc string)
 		"amount":           fmt.Sprintf("%d", rmb),
 		"desc":             desc,
 		"spbill_create_ip": "8.129.187.89"}
-	sign := mch.Sign(req, apiKey, nil)
+	sign := mch.Sign(req, mechantInfo.ApiKey, nil)
 	req["sign"] = sign
 
 	ret, _ := promotion.Transfers(mchTLSProxy, req)
@@ -270,7 +279,9 @@ func Transfers(openid string, rmb int64, tradeNo, check, realName, desc string)
 }
 
 // 校验支付结果回调参数
-func VerifyWxPayResult(payResult *PayResult) bool {
+func VerifyWxPayResult(payResult *PayResult, payCode string) bool {
+	mechantInfo := GetMechantInfo(payCode) //商户号配置信息
+
 	sign := payResult.Sign
 	params, err := XmlStructToMap(payResult)
 	if err != nil {
@@ -279,7 +290,7 @@ func VerifyWxPayResult(payResult *PayResult) bool {
 	}
 	// beego.BeeLogger.Warn("*****params: %v", params)
 	// beego.BeeLogger.Warn("*****sign: %s", sign)
-	mchSign := mch.Sign(params, wxApiKey, nil)
+	mchSign := mch.Sign(params, mechantInfo.ApiKey, nil)
 	// beego.BeeLogger.Warn("*****mch sign: %s", mchSign)
 	return sign == mchSign
 }