针对微信小游戏,封装了自带access-token缓存的客户端,支持登录会话管理和订阅消息。
import (
"github.com/muzimu/wechat-sdk/cache"
"github.com/muzimu/wechat-sdk/client"
"github.com/muzimu/wechat-sdk/config"
)
func main() {
// 创建配置
cfg := &config.Config{
AppID: "your_app_id",
AppSecret: "your_app_secret",
Cache: cache.NewMemory(), // 使用内置内存缓存
}
// 创建客户端
cli := client.NewClient(cfg)
// ========== 登录会话管理 ==========
auth := cli.GetAuth()
// 登录凭证校验(客户端 wx.login() 获取 code 后调用)
res, err := auth.Code2Session("js_code")
if err != nil {
// 处理错误
}
// res.OpenID - 用户唯一标识
// res.SessionKey - 会话密钥
// 检验登录态
err = auth.CheckSession("signature", "openid")
// 重置登录态
resetRes, err := auth.ResetUserSessionKey("signature", "openid")
// ========== 订阅消息 ==========
sub := cli.GetSubscribe()
// 发送订阅消息
msg := &subscribe.Message{
ToUser: "user_openid",
TemplateID: "template_id",
Page: "pages/index/index",
Data: map[string]*subscribe.DataItem{
"thing1": {Value: "订单内容"},
"amount2": {Value: "100.00"},
},
}
err = sub.Send(msg)
}测试位于 test/sdk_test.go,通过 .env 文件读取微信凭证与目标用户信息。
将仓库根目录下的 .env.example 复制为 .env:
cp .env.example .env编辑 .env,替换以下字段:
| 字段 | 说明 |
|---|---|
WECHAT_APP_ID |
小游戏 AppID |
WECHAT_APP_SECRET |
小游戏 AppSecret |
WECHAT_TO_USER |
接收订阅消息的用户 OpenID |
WECHAT_TEMPLATE_ID |
订阅消息模板 ID |
WECHAT_JS_CODE |
登录测试用,来自客户端 wx.login() |
WECHAT_SIGNATURE |
登录态测试用,签名 |
WECHAT_OPEN_ID |
登录态测试用,用户 OpenID |
.env已被.gitignore排除,不会被提交到版本库。
# 运行全部测试
go test ./test/...
# 只运行登录凭证校验测试
go test -v -run TestCode2Session ./test/...
# 只运行检验登录态测试
go test -v -run TestCheckSession ./test/...
# 只运行重置登录态测试
go test -v -run TestResetUserSessionKey ./test/...
# 只运行订阅消息发送测试
go test -v -run TestSend ./test/...
# 只运行模板列表查询测试
go test -v -run TestGetTemplateList ./test/...若未配置对应环境变量,测试会自动跳过而不是失败,便于在 CI 中按需启用。