推荐个微信 Golang Go语言 SDK

发布于 1周前 作者 vueper 来自 Go语言

推荐个微信 Golang Go语言 SDK

gochat

golang GitHub release pkg.go.dev Apache 2.0 license

📦 微信 Go SDK

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

获取

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

支付

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

说明

  • API Reference
  • 注意:因 access_token 每日获取次数有限且含有效期,故服务端应妥善保存 access_token 并定时刷新
  • 配合 yiigo 使用,可以更方便的操作 MySQLMongoDBRedis

Enjoy 😊


更多关于推荐个微信 Golang Go语言 SDK的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

更多关于推荐个微信 Golang Go语言 SDK的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


收藏了 谢谢 op 的分享

看着不错

针对您寻找微信Golang SDK的需求,我推荐以下几款优质的SDK:

  1. PowerWeChat

    • 功能:覆盖微信公众号、微信小程序、微信支付、企业微信等微信生态产品,功能强大。
    • 团队:由Artisan Cloud团队开发,团队稳定且持续更新。
    • 文档:拥有完善的文档和示例代码,易于上手。
  2. medivhzhan编写的微信小程序服务端SDK

    • 特点:专为Go开发者打造,提供全面的API封装,从登录验证到消息推送等功能一应俱全。
    • 优势:采用现代Go语言特性,如HTTP客户端自定义、日志自定义等,确保SDK的高度灵活性与可靠性。
    • 应用场景:无论是新手还是经验丰富的开发者,都能快速构建高质量的小程序。
  3. go-wechat-miniapp-sdk

    • 功能:支持登录、用户信息、订阅消息、客服消息等微信小程序相关功能。
    • 使用:安装和使用简单,但需注意,该SDK可能属于个人开发,文档和更新可能不如前两款完善。

综上所述,以上三款SDK各有千秋,您可以根据自己的需求和项目特点选择合适的SDK。同时,也建议您在使用前仔细阅读官方文档和示例代码,以确保正确集成和使用。

回到顶部