推荐个微信 Go SDK

2022-02-25 23:31:53 +08:00
 IIInsomnia

gochat

📦 微信 Go SDK

模块 功能
支付 下单、支付、退款、查询、委托代扣、红包、企业付款、账单、评价数据、验签、解密
公众号 授权、用户、消息、素材、菜单、发布能力、草稿箱、客服、二维码、OCR 、回复、事件处理 等
小程序 授权、解密、二维码、消息、客服、素材、插件、URL Scheme 、URL Link 、OCR 、事件处理 等
企业微信 支持几乎所有服务端 API

获取

go get -u github.com/shenghui0779/gochat

使用须知

支付

  • 版本: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)

说明

Enjoy 😊

2477 次点击
所在节点    Go 编程语言
4 条回复
wzw
2022-02-26 08:03:58 +08:00
IIInsomnia
2022-02-26 10:41:26 +08:00
@wzw 风格不同
scyuns
2022-02-26 13:12:48 +08:00
收藏了 谢谢 op 的分享
dany813
2022-02-28 17:32:07 +08:00
看着不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/836502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX