From 69e3dd10705d39f949d2bacd9c83005a5325e1c3 Mon Sep 17 00:00:00 2001 From: yanghao05 Date: Mon, 14 Apr 2025 20:48:50 +0800 Subject: [PATCH] feat: update prepay id --- backend/app/service/testx/testing.go | 2 ++ backend/config.toml | 4 +-- backend/config.yh.toml | 51 +++++++++++++++++++++++++-- backend/providers/wepay/pay.go | 23 ++++++++---- backend/providers/wepay/pay_test.go | 52 ++++++++++++++++++++++++++++ 5 files changed, 122 insertions(+), 10 deletions(-) create mode 100644 backend/providers/wepay/pay_test.go diff --git a/backend/app/service/testx/testing.go b/backend/app/service/testx/testing.go index 8dcc2ee..1563257 100644 --- a/backend/app/service/testx/testing.go +++ b/backend/app/service/testx/testing.go @@ -6,6 +6,7 @@ import ( "quyun/providers/app" "quyun/providers/postgres" + "quyun/providers/wechat" "go.ipao.vip/atom" "go.ipao.vip/atom/container" @@ -18,6 +19,7 @@ func Default(providers ...container.ProviderContainer) container.Providers { return append(container.Providers{ app.DefaultProvider(), postgres.DefaultProvider(), + wechat.DefaultProvider(), }, providers...) } diff --git a/backend/config.toml b/backend/config.toml index 026c091..018d8d6 100644 --- a/backend/config.toml +++ b/backend/config.toml @@ -37,10 +37,10 @@ AppID = "wx47649361b6eba174" AppSecret = "e9cdf19b006cd294a9dae7ad8ae08b72" Token = "W8Xhw5TivYBgY" EncodingAesKey = "OlgPgMvsl92zy5oErtEzRcziRT2txoN3jgEHV6RQZMY" -DevMode = false +DevMode = true [WeChat.Pay] -NotifyURL="" +NotifyURL="https://www.baidu.com/go.php" MechID = "1702644947" SerialNo = "4563EC584A35BC84FB27AA4100C934C9A91D59CA" MechName = "佳芃(北京)企业管理咨询有限公司" diff --git a/backend/config.yh.toml b/backend/config.yh.toml index ea0bbc2..22846c2 100644 --- a/backend/config.yh.toml +++ b/backend/config.yh.toml @@ -1,7 +1,7 @@ [App] Mode = "development" BaseURI = "baseURI" -Storage = "/Users/rogee/Projects/self/quyun/fixtures" +StoragePath = "/Users/rogee/Projects/self/quyun/fixtures" [Http] Port = 8088 @@ -28,5 +28,52 @@ DB = 0 AccessKeyId = "LTAI5t86SjiP9zRd3q2w7jQN" AccessKeySecret = "hV7spvJuWh8w0EEIXj8NFi2uBlF4aS" Bucket ="rogee-test" +#Host ="abc" Region ="cn-beijing" -CallbackURL = "https://localhost" +CallbackURL = "https://www.baidu.com" + +[WeChat] +AppID = "wx47649361b6eba174" +AppSecret = "e9cdf19b006cd294a9dae7ad8ae08b72" +Token = "W8Xhw5TivYBgY" +EncodingAesKey = "OlgPgMvsl92zy5oErtEzRcziRT2txoN3jgEHV6RQZMY" +DevMode = false + +[WeChat.Pay] +NotifyURL="https://www.baidu.com/go.php" +MchID = "1702644947" +SerialNo = "4563EC584A35BC84FB27AA4100C934C9A91D59CA" +MechName = "佳芃(北京)企业管理咨询有限公司" +ApiV3Key="5UBDkxVDY44AKafkqN6YgYxgtkXP6Mw6" +PrivateKey="""-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC+GjWdwRorgQXw +Z8ouZeW8UsUgjiSUPKLJHGOZQESa09xmzm+DVZWNCPEHJvz1bDmSNXVsQUWRE/+y +MwSfe+faq0d4BZiw1ueFbRyj4Vw/x7B2vY0i8yo0VyTnWdC6QZRc+V+dbuPJM1Ok ++Qf2yg+NZhz3XuTWvQOscAc9+f3aj8fhXJQlRmNby736w0iDu9EQFvPnkVs10/lW +RwICvzEbEMq7D2SSXS/lc/qS84eHYYCnH8b3NGNCt7ifSXPJesGT/+pwBKmPef6T +lK0pjgqqiKltP04nYeP7Ujz5r8v/CPebUG6Iuht3EjH84i4UCpcBdI/mD2rJInJ/ +jiiCjP7tAgMBAAECggEAVYVe94BGsKmTrWpT13m513X4/sNTi2iX5xehavExq+GB +trJKEnBvHgqWvBv7EsHESJVKJRBcJn8zucwf2UuZq5MATOtfnLahYzIJ/2PD52GD +bnepxb5VD0Tg8j9CmngkMYtyS1X2na48g+wQfCK8ymTUxSholH5l565iY6xSWn8r +SD/u/EBLv69i40uocG1hUUicrJZ1wc5T0ct3GpfiA1BfH462/dp6mROONdpwM8IT +ltRH4wjIc2nPgE7eNbXlHg+KkqyNNLA+BeN3yn001QwvP6Q0panuCTsVVlvEuGAY +RwXbu/0fHFbppIpgfr7AFGRWKTF66Peq3ozsG9jNgQKBgQDviSJxN2Mpdln4i5F3 +74s8FMtZ5bY63RHHcvJ5/D9G1iDNHFgLJsgdrbAhLqBbqg73EsIT8TsPlAqKPKS8 +EGKBg75MsMSYu7EmzIURV3Gy+Pou9jOkTUfQfblkiV+uJjWQPlBlfksL1bQnfSvZ +Pk1DCwGMb5DMDazAQLP9/wtLYQKBgQDLKz9YHF+wFsnfUjBQngDLCTkxrfxp8y84 +s/z5IRZIEdfxmnaEeWJXYa0oeQumNLSVHrryvHm3vkBgKexN49TWUGIM3q54gi/R +FPXXJKarDEI7C86Th3g+3FPEez5v+CEncmlB9X3kBT0ZFROWD3HHaz2DUKPVmJe1 +eUOtAN0LDQKBgCoulx8i5taFXgCz61EYoQdajhjtp/KjvZ7G8kZjEm2SBcK5DBQi +pzj6vjqJsHmT8AC4j+7dG055/oUresMXi5FNNvTgaC6RVvgDKifMo1wmFkCw4JU9 +erkPetdmja/oUKRvJM9Kt0KFRq1xkIg4PXjh9krZ1sDoY5STkF7ZTA7hAoGAQhPv +xzV7Pac7wwFVK3MoKOD4FBtVRBRO4G9RsKk9OPVsuWyWbWGZRXhEPCyaSFVOAk37 +WaVJJSSghWY9L9wQxh9gtHTcY99bs/HQP0fxWSJkjBW7+ymNR0ybhgTbeslF5zGD +4Gr6peW6SGUdeKnPRJ+xYvsgPgEiHmixRRxJyCUCgYEAoguVZdpDaRDZGGrTghwj +F4kMIyEczFeBZtK2JEGSLA6j8uj+oBZ26c6K4sh/Btc0l6IkiXijXbTaH87s52xZ +im8aIZZ9jDKUFxtjVUL0l9fjRsCLAvaBbWw3z4EdtOGuYlnhNCheeSd+/Lzqrb1q +pnTiwBHnQCMFFL/rNcz/Mmk= +-----END PRIVATE KEY-----""" +PublicKeyID="PUB_KEY_ID_0117026449472025041400331572000400" +# JS pay domain +# mp.jdwan.com +# quyun.mp.jdwan.com diff --git a/backend/providers/wepay/pay.go b/backend/providers/wepay/pay.go index b60c7ed..81ad8a8 100644 --- a/backend/providers/wepay/pay.go +++ b/backend/providers/wepay/pay.go @@ -53,7 +53,15 @@ func (c *Client) GetClient() *wechat.ClientV3 { return c.payClient } -func (c *Client) V3TransactionJsapi(ctx context.Context, bm *BodyMap) (*wechat.PrepayRsp, error) { +type PrepayData struct { + AppID string `json:"app_id"` + PrepayID string `json:"prepay_id"` +} + +func (c *Client) V3TransactionJsapi(ctx context.Context, f func(*BodyMap)) (*PrepayData, error) { + bm := NewBodyMap(c.config) + f(bm) + resp, err := c.payClient.V3TransactionJsapi(ctx, bm.bm) if err != nil { return nil, err @@ -63,7 +71,10 @@ func (c *Client) V3TransactionJsapi(ctx context.Context, bm *BodyMap) (*wechat.P return nil, errors.New(resp.Error) } - return resp, nil + return &PrepayData{ + AppID: c.config.AppID, + PrepayID: resp.Response.PrepayId, + }, nil } func (c *Client) BodyMap() *BodyMap { return NewBodyMap(c.config) } @@ -74,10 +85,10 @@ type BodyMap struct { func NewBodyMap(c *w.Config) *BodyMap { bm := make(gopay.BodyMap) - bm.Set("sp_appid", c.AppID). - Set("sp_mchid", c.Pay.MchID). + bm.Set("appid", c.AppID). + Set("mchid", c.Pay.MchID). Set("notify_url", c.Pay.NotifyURL). - Set("amount", func(bm gopay.BodyMap) { + SetBodyMap("amount", func(bm gopay.BodyMap) { bm.Set("total", 1). Set("currency", "CNY") }) @@ -121,7 +132,7 @@ func (b *BodyMap) Amount(total int, currency string) *BodyMap { // Payer func (b *BodyMap) Payer(spOpenId string) *BodyMap { return b.SetBodyMap("payer", func(bm gopay.BodyMap) { - bm.Set("sp_openid", spOpenId) + bm.Set("openid", spOpenId) }) } diff --git a/backend/providers/wepay/pay_test.go b/backend/providers/wepay/pay_test.go new file mode 100644 index 0000000..f9e8566 --- /dev/null +++ b/backend/providers/wepay/pay_test.go @@ -0,0 +1,52 @@ +package wepay + +import ( + "context" + "fmt" + "testing" + "time" + + "quyun/app/service/testx" + + . "github.com/smartystreets/goconvey/convey" + "github.com/stretchr/testify/suite" + "go.ipao.vip/atom/contracts" + "go.uber.org/dig" +) + +type WePayInjectParams struct { + dig.In + Initials []contracts.Initial `group:"initials"` + + Client *Client +} + +type WePayTestSuite struct { + suite.Suite + + WePayInjectParams +} + +func Test_WePay(t *testing.T) { + providers := testx.Default().With(Provide) + testx.Serve(providers, t, func(params WePayInjectParams) { + suite.Run(t, &WePayTestSuite{WePayInjectParams: params}) + }) +} + +func (s *WePayTestSuite) Test_PrePay() { + Convey("get prepay", s.T(), func() { + Convey("prepay", func() { + resp, err := s.Client.V3TransactionJsapi(context.Background(), func(bm *BodyMap) { + bm. + OutTradeNo(fmt.Sprintf("test_trade_no_%d", time.Now().Unix())). + Description("Test transaction"). + Payer("o5Bzk644x3LOMJsKSZRlqWin74IU") + }) + So(err, ShouldBeNil) + So(resp, ShouldNotBeNil) + + s.T().Logf("prepay response: %+v", resp) + }) + }) +}