微信 Go SDK
模块 | 功能 |
---|---|
支付 | 下单、支付、退款、查询、委托代扣、红包、企业付款、账单、评价数据、验签、解密 |
公众号 | 授权、用户、消息、素材、菜单、发布能力、草稿箱、客服、二维码、OCR 、回复、事件处理 等 |
小程序 | 授权、解密、二维码、消息、客服、素材、插件、URL Scheme 、URL Link 、OCR 、事件处理 等 |
企业微信 | 支持几乎所有服务端 API |
go get -u github.com/shenghui0779/gochat
Action
接口(授权 和 AccessToken 等部分 API 除外)Action
,统一由 Do
方法执行Result
为前缀的结构体指针接收VerifyWXMLResult
DecryptWithAES256ECB
(退款)VerifyEventSign
DecryptEventMessage
Reply
- 版本:V2
- 模式:普通商户直连模式
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")
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)
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))
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)
access_token
每日获取次数有限且含有效期,故服务端应妥善保存 access_token
并定时刷新MySQL
、MongoDB
与 Redis
等Enjoy
![]() | 1 wzw 2022-02-26 08:03:58 +08:00 via iPhone |
![]() | 2 IIInsomnia OP @wzw 风格不同 |
![]() | 3 scyuns 2022-02-26 13:12:48 +08:00 收藏了 谢谢 op 的分享 |
![]() | 4 dany813 2022-02-28 17:32:07 +08:00 看着不错 |