Browse Source

Merge branch 'cygx/mfyx_2.0' of http://8.136.199.33:3000/hongze/hz_crm_api into debug

xingzai 10 months ago
parent
commit
51d4567016
1 changed files with 57 additions and 25 deletions
  1. 57 25
      services/cygx/wx_pay.go

+ 57 - 25
services/cygx/wx_pay.go

@@ -10,44 +10,79 @@ import (
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
-	"log"
+	"os"
 )
 
 const (
 	//MchPKFileName              = "./utils/cert/apiclient_key.pem"
-	//MchPKFileName = "../cert/cygx/apiclient_key.pem"
-	MchPKFileName              = "../hongze_mfyx/utils/cert/apiclient_key.pem"
+	//MchPKFileName              = "../hongze_mfyx/utils/cert/apiclient_key.pem"
+	MchPKFileName              = "/home/code/wechat_cert/cygx/apiclient_key.pem"
 	Mchid                      = "1624495680"
 	MchCertificateSerialNumber = "5ED2719CFAE5205763034AD80BF4B8A33533C418"
 	MchAPIv3Key                = "W1tbnzQrzQ7yRRNuQCIHjis8dgdasKVX"
 )
 
 // 微信商户建立连接
-func getWechatClient() (context.Context, *core.Client, error) {
-	var err error
-	defer func() {
+//func getWechatClient() (context.Context, *core.Client, error) {
+//	var err error
+//	defer func() {
+//		if err != nil {
+//			fmt.Println(err)
+//			go alarm_msg.SendAlarmMsg(fmt.Sprint("微信商户建立连接失败 getWechatClient, err:", err.Error()), 2)
+//		}
+//	}()
+//	// 使用 utils 提供的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
+//	mchPrivateKey, err := payUtils.LoadPrivateKeyWithPath(MchPKFileName)
+//	if err != nil {
+//		log.Print("load merchant private key error")
+//		return nil, nil, err
+//	}
+//	ctx := context.Background()
+//	// 使用商户私钥等初始化 client,并使它具有自动定时获取微信支付平台证书的能力
+//	opts := []core.ClientOption{
+//		option.WithWechatPayAutoAuthCipher(Mchid, MchCertificateSerialNumber, mchPrivateKey, MchAPIv3Key),
+//	}
+//	client, err := core.NewClient(ctx, opts...)
+//	if err != nil {
+//		log.Printf("new wechat pay client err:%s", err)
+//		return nil, nil, err
+//	}
+//	return ctx, client, nil
+//}
+
+var WechatCertClient *core.Client
+
+// 微信商户建立连接(全局)
+func init() {
+	if utils.RunMode != "release" {
+		_, err := os.Stat(MchPKFileName) // 判断证书路径是否存在,非生产环境不做判断。
 		if err != nil {
-			fmt.Println(err)
-			go alarm_msg.SendAlarmMsg(fmt.Sprint("微信商户建立连接失败 getWechatClient, err:", err.Error()), 2)
+			go alarm_msg.SendAlarmMsg("微信商户链接失败证书路径不存在 os.Stat"+err.Error(), 2)
+			utils.FileLogCygx.Info("WechatCertClient err:" + err.Error())
+			err = nil
+			return
 		}
-	}()
+	}
+
 	// 使用 utils 提供的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
 	mchPrivateKey, err := payUtils.LoadPrivateKeyWithPath(MchPKFileName)
 	if err != nil {
-		log.Print("load merchant private key error")
-		return nil, nil, err
+		fmt.Println(err)
+		go alarm_msg.SendAlarmMsg("微信商户链接失败 LoadPrivateKeyWithPath"+err.Error(), 2)
 	}
 	ctx := context.Background()
 	// 使用商户私钥等初始化 client,并使它具有自动定时获取微信支付平台证书的能力
 	opts := []core.ClientOption{
 		option.WithWechatPayAutoAuthCipher(Mchid, MchCertificateSerialNumber, mchPrivateKey, MchAPIv3Key),
 	}
+
 	client, err := core.NewClient(ctx, opts...)
 	if err != nil {
-		log.Printf("new wechat pay client err:%s", err)
-		return nil, nil, err
+		fmt.Println(err)
+		go alarm_msg.SendAlarmMsg("微信商户链接失败 NewClient"+err.Error(), 2)
 	}
-	return ctx, client, nil
+	WechatCertClient = client
+	return
 }
 
 // 微信商户退款
@@ -58,13 +93,13 @@ func RefundsApiService(orderDetail *cygx.CygxOrderResp) (statusCode int, err err
 			go alarm_msg.SendAlarmMsg(fmt.Sprint("微信商户退款失败 RefundsApiService, err:", err.Error()), 2)
 		}
 	}()
-	ctx, client, err := getWechatClient()
-	if err != nil {
-		//log.Printf("getWechatClientt err:%s", err)
-		return
-	}
-
-	svc := refunddomestic.RefundsApiService{Client: client}
+	//ctx, client, err := getWechatClient()
+	//if err != nil {
+	//	//log.Printf("getWechatClientt err:%s", err)
+	//	return
+	//}
+	ctx := context.Background()
+	svc := refunddomestic.RefundsApiService{Client: WechatCertClient}
 	resp, result, err := svc.Create(ctx,
 		refunddomestic.CreateRequest{
 			//SubMchid:      core.String(Mchid),
@@ -86,12 +121,9 @@ func RefundsApiService(orderDetail *cygx.CygxOrderResp) (statusCode int, err err
 		},
 	)
 	if err != nil {
-		// 处理错误
-		//log.Printf("call Create err:%s", err)
 		return
 	} else {
-		// 处理返回结果
-		log.Printf("status=%d resp=%s", result.Response.StatusCode, resp)
+		utils.FileLogCygx.Info("status=%d resp=%s", result.Response.StatusCode, resp)
 	}
 	statusCode = result.Response.StatusCode