From 2ecb127e849b26a36e77c4b3fe97d05c49781956 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E5=AD=90=E9=93=AD?= <zi__mm@163.com>
Date: Wed, 23 Oct 2024 15:03:45 +0800
Subject: [PATCH] =?UTF-8?q?=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA=E8=B0=83?=
 =?UTF-8?q?=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cmd/main.go                                   |  4 +--
 cmd/wechat_redpack.go                         |  6 ++---
 plugins/wechat_cpn/internal/wechat_cpn.go     | 23 +++++++++++++---
 .../wechat_redpack/internal/wechat_redpack.go | 26 ++++++++++++++-----
 4 files changed, 43 insertions(+), 16 deletions(-)

diff --git a/cmd/main.go b/cmd/main.go
index e6157fc..dbb2689 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -3,7 +3,7 @@ package main
 // main 这只是一个演示
 func main() {
 	//alipayOrderRedPack()
-	//wechatRedPackOrder()
-	wechatRedPackQuery()
+	wechatRedPackOrder()
+	//wechatRedPackQuery()
 	//alipayNotifyRedPack()
 }
diff --git a/cmd/wechat_redpack.go b/cmd/wechat_redpack.go
index 975add0..1509ff9 100644
--- a/cmd/wechat_redpack.go
+++ b/cmd/wechat_redpack.go
@@ -42,7 +42,7 @@ func wechatRedPackOrder() {
 			Account:  "oZ5ge5Vb2UvbEcIc8ZTt_yF7fNx8",
 			Amount:   0.01,
 			Quantity: 1,
-			Extra:    []byte(`{"app_id":"wxbfcf9fd93f390c3a", "out_detail_no":"12345678917"}`),
+			Extra:    []byte(`{"app_id":"123456", "out_detail_no":"12345678917"}`),
 		},
 		Product: &proto.OrderRequest_Product{
 			ProductNo: "",
@@ -68,10 +68,10 @@ func wechatRedPackQuery() {
 	queryRequest := &proto.QueryRequest{
 		Config: getWechatRedPackConf(),
 		Order: &proto.QueryRequest_Order{
-			OrderNo: "202410181543202661520132",
+			OrderNo: "202410231046525199060462",
 			TradeNo: "",
 			Account: "",
-			Extra:   []byte(`{"out_detail_no":"20241018154320266152013216702243"}`),
+			Extra:   []byte(`{"out_detail_no":"20241023104652519906046250731390"}`),
 		},
 	}
 	resQuery, err := instance.Query(context.Background(), wechatRedPackConf.Tag, queryRequest)
diff --git a/plugins/wechat_cpn/internal/wechat_cpn.go b/plugins/wechat_cpn/internal/wechat_cpn.go
index 7d5e166..309aeed 100644
--- a/plugins/wechat_cpn/internal/wechat_cpn.go
+++ b/plugins/wechat_cpn/internal/wechat_cpn.go
@@ -2,8 +2,10 @@ package internal
 
 import (
 	"context"
+	"fmt"
 	"gitea.cdlsxd.cn/sdk/plugin/proto"
 	"plugins/wechat_cpn/internal/vo"
+	"strings"
 )
 
 // 插件通信信息,若不对应则会报错panic
@@ -31,10 +33,10 @@ func (p *WeChatCpnService) Order(ctx context.Context, request *proto.OrderReques
 	}
 	resp, result, err := svc.SendCoupon(ctx, req)
 	if err != nil {
-		return nil, err
+		return nil, p.err(ctx, err)
 	}
 	if result.Response.StatusCode != vo.CodeSuccess.Value() {
-		return nil, err
+		return nil, fmt.Errorf("微信返回错误 Response StatusCode[%d]Status[%s]", result.Response.StatusCode, result.Response.Status)
 	}
 	return orderResp(request.GetOrder(), *resp.CouponId), nil
 }
@@ -51,10 +53,10 @@ func (p *WeChatCpnService) Query(ctx context.Context, request *proto.QueryReques
 	}
 	resp, result, err := svc.QueryCoupon(ctx, *req)
 	if err != nil {
-		return nil, err
+		return nil, p.err(ctx, err)
 	}
 	if result.Response.StatusCode != vo.CodeSuccess.Value() {
-		return nil, err
+		return nil, fmt.Errorf("微信返回错误 Response StatusCode[%d]Status[%s]", result.Response.StatusCode, result.Response.Status)
 	}
 	return queryResp(request, resp), nil
 }
@@ -69,3 +71,16 @@ func (p *WeChatCpnService) Notify(ctx context.Context, request *proto.NotifyRequ
 	}
 	return notifyResp(), nil
 }
+
+func (p *WeChatCpnService) err(_ context.Context, err error) error {
+	errStr := err.Error()
+	startIndex := strings.Index(errStr, "Message: ")
+	if startIndex == -1 {
+		return err
+	}
+	endIndex := strings.Index(errStr[startIndex:], "\n")
+	if endIndex == -1 {
+		return err
+	}
+	return fmt.Errorf(errStr[startIndex+len("Message: ") : startIndex+endIndex])
+}
diff --git a/plugins/wechat_redpack/internal/wechat_redpack.go b/plugins/wechat_redpack/internal/wechat_redpack.go
index 387cd20..8ad6047 100644
--- a/plugins/wechat_redpack/internal/wechat_redpack.go
+++ b/plugins/wechat_redpack/internal/wechat_redpack.go
@@ -2,9 +2,10 @@ package internal
 
 import (
 	"context"
+	"fmt"
 	"gitea.cdlsxd.cn/sdk/plugin/proto"
 	"plugins/wechat_redpack/internal/vo"
-	"time"
+	"strings"
 )
 
 // 插件通信信息,若不对应则会报错panic
@@ -19,7 +20,6 @@ const (
 type WeChatRedPackService struct{}
 
 func (p *WeChatRedPackService) Order(ctx context.Context, request *proto.OrderRequest) (*proto.OrderResponse, error) {
-	ctx, _ = context.WithTimeout(ctx, 30*time.Second)
 	config, err := transConfig(request.Config)
 	if err != nil {
 		return nil, err
@@ -34,16 +34,15 @@ func (p *WeChatRedPackService) Order(ctx context.Context, request *proto.OrderRe
 	}
 	resp, result, err := svc.InitiateBatchTransfer(ctx, req)
 	if err != nil {
-		return nil, err
+		return nil, p.err(ctx, err)
 	}
 	if result.Response.StatusCode != vo.CodeSuccess.Value() {
-		return nil, err
+		return nil, fmt.Errorf("微信返回错误 Response StatusCode[%d]Status[%s]", result.Response.StatusCode, result.Response.Status)
 	}
 	return orderResp(request.GetOrder(), *resp.BatchId), nil
 }
 
 func (p *WeChatRedPackService) Query(ctx context.Context, request *proto.QueryRequest) (*proto.QueryResponse, error) {
-	ctx, _ = context.WithTimeout(ctx, 30*time.Second)
 	req, err := queryReq(request.GetOrder())
 	if err != nil {
 		return nil, err
@@ -58,10 +57,10 @@ func (p *WeChatRedPackService) Query(ctx context.Context, request *proto.QueryRe
 	}
 	resp, result, err := svc.GetTransferDetailByOutNo(ctx, *req)
 	if err != nil {
-		return nil, err
+		return nil, p.err(ctx, err)
 	}
 	if result.Response.StatusCode != vo.CodeSuccess.Value() {
-		return nil, err
+		return nil, fmt.Errorf("微信返回错误 Response StatusCode[%d]Status[%s]", result.Response.StatusCode, result.Response.Status)
 	}
 	return queryResp(request, resp), nil
 }
@@ -69,3 +68,16 @@ func (p *WeChatRedPackService) Query(ctx context.Context, request *proto.QueryRe
 func (p *WeChatRedPackService) Notify(_ context.Context, _ *proto.NotifyRequest) (*proto.NotifyResponse, error) {
 	return notifyResp(), nil
 }
+
+func (p *WeChatRedPackService) err(_ context.Context, err error) error {
+	errStr := err.Error()
+	startIndex := strings.Index(errStr, "Message: ")
+	if startIndex == -1 {
+		return err
+	}
+	endIndex := strings.Index(errStr[startIndex:], "\n")
+	if endIndex == -1 {
+		return err
+	}
+	return fmt.Errorf(errStr[startIndex+len("Message: ") : startIndex+endIndex])
+}