推荐个微信 Go SDK

IIInsomnia · · 1107 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# gochat 📦 微信 Go SDK | 模块 | 功能 | | -------- | ------------------------------------------------------------------------------------ | | 支付 | 下单、支付、退款、查询、委托代扣、红包、企业付款、账单、评价数据、验签、解密 | | 公众号 | 授权、用户、消息、素材、菜单、发布能力、草稿箱、客服、二维码、OCR、回复、事件处理 等 | | 小程序 | 授权、解密、二维码、消息、客服、素材、插件、URL Scheme、URL Link、OCR、事件处理 等 | | 企业微信 | 支持几乎所有服务端API | ## 获取 ```sh go get -u github.com/shenghui0779/gochat ``` ## 使用须知 - 微信API被封装成 `Action` 接口(授权 和 AccessToken 等部分API除外) - 每个API对应一个 `Action`,统一由 `Do` 方法执行 - 除支付(mch)外,返回结果均以 `Result` 为前缀的结构体指针接收 - 对于微信支付的回调通知处理,提供了两个方法: - 验签 - `VerifyWXMLResult` - 解密 - `DecryptWithAES256ECB` (退款) - 对于微信推送的事件消息处理,提供了三个方法: - 验签 - `VerifyEventSign` - 解密 - `DecryptEventMessage` - 回复 - `Reply` - 企业微信按照不同功能模块划分了相应的目录,根据URL可以找到对应的目录和文件 - 所有API均采用Mock单元测试(Mock数据来源于官方文档,如遇问题,欢迎提[Issue](https://github.com/shenghui0779/gochat/issues)) ## 支付 > - 版本:V2 > - 模式:普通商户直连模式 ```go import ( "github.com/shenghui0779/gochat" "github.com/shenghui0779/gochat/wx" "github.com/shenghui0779/gochat/mch" ) // 创建实例 pay := gochat.NewMch("mchid", "apikey", tls.Certificate...) // 设置 debug 模式(支持自定义日志) pay.SetClient(wx.WithDedug(), wx.WithLogger(wx.Logger)) // --------- 统一下单 ------------------------------- action := mch.UnifyOrder("appid", &mch.ParamsUnifyOrder{...}) result, err := pay.Do(ctx, action) if err != nil { log.Println(err) return } fmt.Println(result) // --------- 拉起支付 ------------------------------- // APP支付 pay.APPAPI("appid", "prepayID") // JSAPI/小程序支付 pay.JSAPI("appid", "prepayID") // 小程序红包 pay.MinipRedpackJSAPI("appid", "package") ``` ## 公众号 ```go import ( "github.com/shenghui0779/gochat" "github.com/shenghui0779/gochat/wx" "github.com/shenghui0779/gochat/offia" ) // 创建实例 oa := gochat.NewOffia("appid", "appsecret") // 设置服务器配置 oa.SetServerConfig("token", "encodingAESKey") // 设置 debug 模式(支持自定义日志) oa.SetClient(wx.WithDedug(), wx.WithLogger(wx.Logger)) // --------- 生成网页授权URL ------------------------------- url := oa.OAuth2URL(offia.ScopeSnsapiBase, "redirectURL", "state") fmt.Println(url) // --------- 获取网页授权Token ------------------------------- result, err := oa.Code2OAuthToken(ctx, "code") if err != nil { log.Println(err) return } fmt.Println(result) // --------- 获取AccessToken ------------------------------- result, err := oa.AccessToken(ctx) if err != nil { log.Println(err) return } fmt.Println(result) // --------- 获取关注的用户列表 ------------------------------- result := new(offia.ResultUserList) action := offia.GetUserList("nextOpenID", result) if err := oa.Do(ctx, action); err != nil { log.Println(err) return } fmt.Println(result) ``` ## 小程序 ```go import ( "github.com/shenghui0779/gochat" "github.com/shenghui0779/gochat/wx" "github.com/shenghui0779/gochat/minip" ) // 创建实例 oa := gochat.NewMinip("appid", "appsecret") // 设置服务器配置 oa.SetServerConfig("token", "encodingAESKey") // 设置 debug 模式(支持自定义日志) oa.SetClient(wx.WithDedug(), wx.WithLogger(wx.Logger)) // --------- 获取授权SessionKey ------------------------------- result, err := oa.Code2Session(ctx, "code") if err != nil { log.Println(err) return } fmt.Println(result) // --------- 获取AccessToken ------------------------------- result, err := oa.AccessToken(ctx) if err != nil { log.Println(err) return } fmt.Println(result) // --------- 解密授权的用户信息 ------------------------------- result := new(minip.UserInfo) if err := DecryptAuthInfo("sessionKey", "iv", "encryptedData", result); err != nil { log.Println(err) return } fmt.Println(result) // --------- 创建小程序二维码 ------------------------------- qrcode := new(minip.QRCode) action := minip.CreateQRCode("pagepath", 120, qrcode) if err := minip.Do(ctx, action); err != nil { log.Println(err) return } fmt.Println(base64.StdEncoding.EncodeToString(qrcode.Buffer)) ``` ## 企业微信 ```go import ( "github.com/shenghui0779/gochat" "github.com/shenghui0779/gochat/wx" "github.com/shenghui0779/gochat/corp" "github.com/shenghui0779/gochat/corp/addrbook" ) // 创建实例 cp := gochat.NewCorp("corpid") // 设置服务器配置 cp.SetServerConfig("token", "encodingAESKey") // 设置 debug 模式(支持自定义日志) cp.SetClient(wx.WithDedug(), wx.WithLogger(wx.Logger)) // --------- 生成网页授权URL ------------------------------- url := cp.OAuth2URL(corp.ScopeSnsapiBase, "redirectURL", "state") fmt.Println(url) // --------- 生成扫码授权URL ------------------------------- url := cp.QRCodeAuthURL("agentID", "redirectURL", "state") fmt.Println(url) // --------- 获取AccessToken ------------------------------- result, err := cp.AccessToken(ctx, "secret") if err != nil { log.Println(err) return } fmt.Println(result) // --------- 获取部门列表 ------------------------------- result := new(addrbook.ResultDepartmentList) action := addrbook.ListDepartment(0, result) if err := cp.Do(ctx, action); err != nil { log.Println(err) return } fmt.Println(result) ``` ## 说明 - [API Reference](https://pkg.go.dev/github.com/shenghui0779/gochat) - 注意:因 `access_token` 每日获取次数有限且含有效期,故服务端应妥善保存 `access_token` 并定时刷新 - 配合 [yiigo](https://github.com/shenghui0779/yiigo) 使用,可以更方便的操作 `MySQL`、`MongoDB` 与 `Redis` 等 **Enjoy 😊**

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1107 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传