Skip to content

Commit 882dab8

Browse files
committed
x
1 parent 7d898e6 commit 882dab8

7 files changed

+1484
-1
lines changed

wechat/go.mod

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ require (
77
github.com/Khan/genqlient v0.7.0
88
github.com/bytedance/sonic v1.12.4
99
github.com/go-chi/chi/v5 v5.1.0
10+
github.com/go-pay/gopay v1.5.106
11+
github.com/rabbitmq/amqp091-go v1.10.0
1012
github.com/silenceper/wechat/v2 v2.1.7
13+
github.com/tinylib/msgp v1.2.4
1114
github.com/vektah/gqlparser/v2 v2.5.19
1215
)
1316

@@ -25,13 +28,18 @@ require (
2528
github.com/cloudwego/iasm v0.2.0 // indirect
2629
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
2730
github.com/fatih/structs v1.1.0 // indirect
28-
github.com/go-pay/gopay v1.5.106 // indirect
31+
github.com/go-pay/crypto v0.0.1 // indirect
32+
github.com/go-pay/errgroup v0.0.2 // indirect
33+
github.com/go-pay/util v0.0.4 // indirect
34+
github.com/go-pay/xlog v0.0.3 // indirect
35+
github.com/go-pay/xtime v0.0.2 // indirect
2936
github.com/go-redis/redis/v8 v8.11.5 // indirect
3037
github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
3138
github.com/gorilla/websocket v1.5.0 // indirect
3239
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
3340
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
3441
github.com/onsi/gomega v1.34.1 // indirect
42+
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect
3543
github.com/sirupsen/logrus v1.9.0 // indirect
3644
github.com/spf13/cast v1.4.1 // indirect
3745
github.com/tidwall/gjson v1.14.1 // indirect

wechat/go.sum

+18
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,18 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo
4747
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
4848
github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
4949
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
50+
github.com/go-pay/crypto v0.0.1 h1:B6InT8CLfSLc6nGRVx9VMJRBBazFMjr293+jl0lLXUY=
51+
github.com/go-pay/crypto v0.0.1/go.mod h1:41oEIvHMKbNcYlWUlRWtsnC6+ASgh7u29z0gJXe5bes=
52+
github.com/go-pay/errgroup v0.0.2 h1:5mZMdm0TDClDm2S3G0/sm0f8AuQRtz0dOrTHDR9R8Cc=
53+
github.com/go-pay/errgroup v0.0.2/go.mod h1:0+4b8mvFMS71MIzsaC+gVvB4x37I93lRb2dqrwuU8x8=
5054
github.com/go-pay/gopay v1.5.106 h1:UVAX/jJu3tQXcS39FwYw1bcBEOcW1zdBSQ4EIbhiLrI=
5155
github.com/go-pay/gopay v1.5.106/go.mod h1:I+1qOFZsNt6quaA1B9grXgz+RrFh6rOXQYiX2R+IaoU=
56+
github.com/go-pay/util v0.0.4 h1:TuwSU9o3Qd7m9v1PbzFuIA/8uO9FJnA6P7neG/NwPyk=
57+
github.com/go-pay/util v0.0.4/go.mod h1:Tsdhs8Ib9J9b4+NKNO1PHh5hWHhlg98PthsX0ckq6PM=
58+
github.com/go-pay/xlog v0.0.3 h1:avyMhCL/JgBHreoGx/am/kHxfs1udDOAeVqbmzP/Yes=
59+
github.com/go-pay/xlog v0.0.3/go.mod h1:mH47xbobrdsSHWsmFtSF5agWbMHFP+tK0ZbVCk5OAEw=
60+
github.com/go-pay/xtime v0.0.2 h1:7YR4/iuELsEHpJ6LUO0SVK80hQxDO9MLCfuVYIiTCRM=
61+
github.com/go-pay/xtime v0.0.2/go.mod h1:W1yRbJaSt4CSBcdAtLBQ8xajiN/Pl5hquGczUcUE9xE=
5262
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
5363
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
5464
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
@@ -100,8 +110,12 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl
100110
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
101111
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
102112
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
113+
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c h1:dAMKvw0MlJT1GshSTtih8C2gDs04w8dReiOGXrGLNoY=
114+
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM=
103115
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
104116
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
117+
github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw=
118+
github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o=
105119
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
106120
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
107121
github.com/silenceper/wechat/v2 v2.1.7 h1:v4AC4pa6NRm7Pa2FJnmWABOxZ9hx3IIo20xKT4t1msY=
@@ -129,13 +143,17 @@ github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
129143
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
130144
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
131145
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
146+
github.com/tinylib/msgp v1.2.4 h1:yLFeUGostXXSGW5vxfT5dXG/qzkn4schv2I7at5+hVU=
147+
github.com/tinylib/msgp v1.2.4/go.mod h1:ykjzy2wzgrlvpDCRc4LA8UXy6D8bzMSuAF3WD57Gok0=
132148
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
133149
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
134150
github.com/vektah/gqlparser/v2 v2.5.19 h1:bhCPCX1D4WWzCDvkPl4+TP1N8/kLrWnp43egplt7iSg=
135151
github.com/vektah/gqlparser/v2 v2.5.19/go.mod h1:y7kvl5bBlDeuWIvLtA9849ncyvx6/lj06RsMrEjVy3U=
136152
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
137153
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ=
138154
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
155+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
156+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
139157
golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg=
140158
golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
141159
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

wechat/mq/mq.go

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package mq
2+
3+
import (
4+
"context"
5+
"encoding"
6+
"log"
7+
"time"
8+
9+
amqp "github.com/rabbitmq/amqp091-go"
10+
)
11+
12+
func failOnError(err error, msg string) {
13+
if err != nil {
14+
log.Panicf("%s: %s", msg, err)
15+
}
16+
}
17+
18+
type MQ struct {
19+
ch *amqp.Channel
20+
conn *amqp.Connection
21+
exname string
22+
timeout time.Duration
23+
}
24+
25+
func X(url string) *MQ {
26+
conn, err := amqp.Dial(url)
27+
failOnError(err, "Failed to connect to RabbitMQ")
28+
29+
ch, err := conn.Channel()
30+
failOnError(err, "Failed to open a channel")
31+
32+
err = ch.ExchangeDeclare(
33+
"wechat_topic", // name
34+
amqp.ExchangeTopic, // type
35+
true, // durable
36+
false, // auto-deleted
37+
false, // internal
38+
false, // no-wait
39+
nil, // arguments
40+
)
41+
failOnError(err, "Failed to declare an exchange")
42+
43+
return &MQ{ch: ch, conn: conn, exname: "wechat_topic"}
44+
}
45+
46+
func (mq *MQ) Send(ctx context.Context, c encoding.BinaryMarshaler, key string) {
47+
octx, cancel := context.WithTimeout(ctx, mq.timeout)
48+
defer cancel()
49+
50+
bs, _ := c.MarshalBinary()
51+
52+
err := mq.ch.PublishWithContext(octx,
53+
mq.exname, // exchange
54+
key, // routing key
55+
false, // mandatory
56+
false, // immediate
57+
amqp.Publishing{
58+
ContentType: "text/plain",
59+
Body: bs,
60+
})
61+
failOnError(err, "Failed to publish a message")
62+
}
63+
64+
func (mq *MQ) Close() error {
65+
mq.ch.Close()
66+
mq.conn.Close()
67+
return nil
68+
}

wechat/pkg/msg/business_circle.go

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package msg
2+
3+
//go:generate msgp
4+
5+
const (
6+
REGISTERED_MODE = "REGISTERED_MODE"
7+
REGISTERED_AND_AUTHORIZATION_MODE = "REGISTERED_AND_AUTHORIZATION_MODE"
8+
)
9+
10+
// 商圈会员积分服务授权结果通知
11+
type BusinessCircleAuthor struct {
12+
OpenID string `json:"openid"` // 顾客授权时使用的小程序上的OpenID
13+
Code string `json:"code"` // 用户开会员卡时的商圈商户号
14+
MchID string `json:"mchid"` // 用户开会员卡时的商圈商户号
15+
AuthType string `json:"auth_type"` // 用户授权类型
16+
}
17+
18+
type BusinessCircleShopBase struct {
19+
MchID string `json:"mchid"` // 微信支付分配的商户号
20+
MerchantName string `json:"merchant_name"` // 商圈商户名称
21+
ShopName string `json:"shop_name"` // 门店名称,商圈在商圈小程序上圈店时填写的门店名称
22+
ShopNumber string `json:"shop_number"` // 门店编号,商圈在商圈小程序上圈店时填写的门店编号,用于跟商圈自身已有的商户识别码对齐
23+
}
24+
25+
// 商圈会员场内支付结果通知
26+
type BusinessCirclePayment struct {
27+
BusinessCircleShopBase
28+
AppID string `json:"appid"` // 顾客授权积分时使用的小程序的AppID
29+
OpenID string `json:"openid"` // 顾客授权时使用的小程序上的OpenID
30+
Amount int `json:"amount"` // 用户实际消费金额,单位(分)
31+
TimeEnd string `json:"time_end"` // 交易完成时间,遵循[rfc3339]标准格式
32+
TransactionID string `json:"transaction_id"` // 微信支付订单号
33+
}
34+
35+
// 商圈会员场内退款结果通知
36+
type BusinessCircleRefund struct {
37+
BusinessCircleShopBase
38+
AppID string `json:"appid"` // 顾客授权积分时使用的小程序的AppID
39+
OpenID string `json:"openid"` // 顾客授权时使用的小程序上的OpenID
40+
RefundTime string `json:"time_end"` // 交易完成时间,遵循[rfc3339]标准格式
41+
PayAmount int `json:"pay_amount"` // 用户实际消费金额,单位(分)
42+
RefundAmount int `json:"refund_amount"` // 用户退款金额,单位(分)
43+
TransactionID string `json:"transaction_id"` // 微信支付订单号
44+
RefundID string `json:"refund_id"` // 微信支付退款单号
45+
}

0 commit comments

Comments
 (0)