From 1c0a06f612ea7e6302437e21de69c406de8c71b5 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: Fri, 23 Aug 2024 16:42:48 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E8=BD=AC=E8=B4=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../alipay_redpack/internal/alipay_redpack.go |  2 +-
 .../internal/alipay_redpack_test.go           | 18 ++++++++---
 plugins/alipay_redpack/internal/po/order.go   |  1 +
 plugins/alipay_redpack/internal/transform.go  | 31 ++++++++++++++-----
 4 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/plugins/alipay_redpack/internal/alipay_redpack.go b/plugins/alipay_redpack/internal/alipay_redpack.go
index 971a107..3f41a7a 100644
--- a/plugins/alipay_redpack/internal/alipay_redpack.go
+++ b/plugins/alipay_redpack/internal/alipay_redpack.go
@@ -44,7 +44,7 @@ func (s *AlipayRedPackService) Order(ctx context.Context, request *proto.OrderRe
 		return nil, err
 	}
 	var response po.OrderResp
-	err = requests.URL(c.BaseUri).BodyForm(uv).ToJSON(&response).Fetch(ctx)
+	err = requests.URL(c.BaseUri).Post().BodyForm(uv).ToJSON(&response).Fetch(ctx)
 	if err != nil {
 		return nil, fmt.Errorf("请求异常,msg:" + err.Error())
 	}
diff --git a/plugins/alipay_redpack/internal/alipay_redpack_test.go b/plugins/alipay_redpack/internal/alipay_redpack_test.go
index aae873f..2c4933f 100644
--- a/plugins/alipay_redpack/internal/alipay_redpack_test.go
+++ b/plugins/alipay_redpack/internal/alipay_redpack_test.go
@@ -23,13 +23,23 @@ func config() []byte {
 	return marshal
 }
 
+func TestConfig(t *testing.T) {
+	t.Run("TestConfig", func(t *testing.T) {
+		c := config()
+		fmt.Printf("%+s\n", string(c))
+		assert.NotEmpty(t, c)
+	})
+}
+
 func TestOrder(t *testing.T) {
 	request := &proto.OrderRequest{
 		Config: config(),
 		Order: &proto.OrderRequest_Order{
-			OrderNo: "240403164049635931",
-			Account: "18666173766",
-			Extra:   []byte(``),
+			OrderNo:  "lsxd202306071545141533",
+			Account:  "18666173766",
+			Quantity: 1,
+			Amount:   0.01,
+			Extra:    []byte(`{"name":"李子铭"}`),
 		},
 		Product: &proto.OrderRequest_Product{
 			ProductNo: "",
@@ -43,7 +53,7 @@ func TestOrder(t *testing.T) {
 			t.Errorf("Order() error = %v", err)
 			return
 		}
-		fmt.Printf("%+v", got)
+		fmt.Printf("%s", got.String())
 		assert.Equal(t, int(proto.Status_ING), int(got.Result.Status))
 	})
 }
diff --git a/plugins/alipay_redpack/internal/po/order.go b/plugins/alipay_redpack/internal/po/order.go
index fb34075..65dfc2a 100644
--- a/plugins/alipay_redpack/internal/po/order.go
+++ b/plugins/alipay_redpack/internal/po/order.go
@@ -10,6 +10,7 @@ import (
 type PayeeInfo struct {
 	Identity     string `validate:"required" json:"identity"`
 	IdentityType string `validate:"required" json:"identity_type"`
+	Name         string `json:"name"`
 }
 
 type BusinessParams struct {
diff --git a/plugins/alipay_redpack/internal/transform.go b/plugins/alipay_redpack/internal/transform.go
index 0779b12..f7d835f 100644
--- a/plugins/alipay_redpack/internal/transform.go
+++ b/plugins/alipay_redpack/internal/transform.go
@@ -57,35 +57,50 @@ func (c *Config) paramReq(req po.Req, method string) (*po.Param, error) {
 }
 
 func orderReq(order *proto.OrderRequest_Order, product *proto.OrderRequest_Product) (*po.OrderReq, error) {
-	type Extra struct {
+	type ProductExtra struct {
 		Wishing string `json:"wishing"`
 	}
-	var extra Extra
+	var productExtra ProductExtra
 	if product.Extra != nil {
-		err := json.Unmarshal(product.Extra, &extra)
+		err := json.Unmarshal(product.Extra, &productExtra)
 		if err != nil {
 			return nil, fmt.Errorf("product extra json unmarshal error: %v", err)
 		}
 	}
 
-	payeeInfo := &po.PayeeInfo{
+	payeeInfo := po.PayeeInfo{
 		Identity:     order.Account,
 		IdentityType: "ALIPAY_USER_ID",
 	}
 	if isValidPhoneNumber(order.Account) {
+		type OrderExtra struct {
+			Name string `json:"name"`
+		}
+		var orderExtra OrderExtra
+		if product.Extra != nil {
+			err := json.Unmarshal(order.Extra, &orderExtra)
+			if err != nil {
+				return nil, fmt.Errorf("order extra json unmarshal error: %v", err)
+			}
+		}
+		if orderExtra.Name == "" {
+			return nil, fmt.Errorf("姓名,当identity_type=ALIPAY_LOGON_ID时,本字段必填")
+		}
 		payeeInfo.IdentityType = "ALIPAY_LOGON_ID"
+		payeeInfo.Name = orderExtra.Name
 	}
 	businessParams := &po.BusinessParams{
 		SubBizScene: "REDPACKET",
 	}
+
 	o := &po.OrderReq{
 		OutBizNo:       order.OrderNo,
 		TransAmount:    fmt.Sprintf("%.2f", order.Amount),
-		ProductCode:    product.ProductNo,
+		ProductCode:    "STD_RED_PACKET",
 		BizScene:       "DIRECT_TRANSFER",
-		OrderTitle:     extra.Wishing,
-		Remark:         extra.Wishing,
-		PayeeInfo:      payeeInfo,
+		OrderTitle:     productExtra.Wishing,
+		Remark:         productExtra.Wishing,
+		PayeeInfo:      &payeeInfo,
 		BusinessParams: businessParams.ToString(),
 	}
 	return o, nil