offiaccount

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 1, 2022 License: Apache-2.0 Imports: 21 Imported by: 11

README

fastwego/offiaccount

A fast wechat offiaccount development sdk written in Golang

GoDoc Go Report Card

快速开始 & demo

go get github.com/fastwego/offiaccount
// 创建公众号实例
app := offiaccount.New(offiaccount.Config{
    Appid:  "APPID",
    Secret: "SECRET",
})

// 调用 api
payload := []byte(`
{
     "button":[
     {
           "name":"菜单",
           "sub_button":[
           {	
               "type":"view",
               "name":"搜索",
               "url":"http://www.baidu.com/"
            }]
       }]
}`)

resp, err := menu.Create(app, payload)
fmt.Println(resp, err)

完整的演示项目:

https://github.com/fastwego/offiaccount-demo

接口列表:

doc/apilist.md

架构设计

sdk

框架特点

快速

「快」作为框架设计的核心理念,体现在方方面面:

  • 使用 Go 语言,开发快、编译快、部署快、运行快,轻松服务海量用户
  • 丰富的文档 / 教程演示代码 ,快速上手,5 分钟即可搭建一套完整的微信公众号服务
  • 独立清晰的模块划分,快速熟悉整个框架,没有意外,一切都是你期望的样子
  • 甚至连框架自身的大部分代码也是自动生成的,维护更新快到超乎想象
符合直觉

作为第三方开发框架,尽可能贴合官方文档和设计,不引入新的概念,不给开发者添加学习负担

简洁而不过度封装

作为具体业务和微信公众号之间的中间层,专注于通道的角色:帮业务把配置/材料投递到公众号,将公众号响应/推送透传回业务

至于 AccessToken 管理消息加解密处理,框架内部完成得干净利落,开发者甚至觉察不到存在

官方文档就是最好的文档

每个接口的注释都附带官方文档的链接,让你随时翻阅,省时省心

完备的单元测试

100% 覆盖每一个接口,让你每一次调用都信心满满

详细的日志

每个关键环节都为你完整记录,Debug 倍轻松,你可以自由定义日志输出,甚至可以关闭日志

多账号支持

一套服务支持多个微信公众号账号,轻松成为第三方开发服务平台,业务节节高

支持服务集群

单台服务器支撑不住访问流量/想提高服务可用性?

只需 设置 GetAccessTokenFunc 方法 ,从中控服务获取 AccessToken,即可解决多实例刷新冲突/覆盖的问题

活跃的开发者社区

FastWeGo 是一套完整的微信开发框架,包括公众号、开放平台、微信支付、企业微信、小程序、小游戏等微信服务,拥有庞大的开发者用户群体

你遇到的所有问题几乎都可以在社区找到解决方案

参与贡献

欢迎提交 pull request / issue / 文档,一起让微信开发更快更好!

Faster we go together!

加入开发者交流群

Documentation

Overview

微信公众平台开发 SDK

See: https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

Index

Constants

This section is empty.

Variables

View Source
var (
	WXServerUrl            = "https://api.weixin.qq.com" // 微信 api 服务器地址
	UserAgent              = "fastwego/offiaccount"
	ErrorAccessTokenExpire = errors.New("access token expire")
	ErrorSystemBusy        = errors.New("system busy")
)

Functions

func GetAccessToken

func GetAccessToken(ctx *OffiAccount) (accessToken string, err error)

从 公众号实例 的 AccessToken 管理器 获取 access_token

如果没有 access_token 或者 已过期,那么刷新

获得新的 access_token 后 过期时间设置为 0.9 * expiresIn 提供一定冗余

func NoticeAccessTokenExpire

func NoticeAccessTokenExpire(ctx *OffiAccount) (err error)

NoticeAccessTokenExpire 只需将本地存储的 access_token 删除,即完成了 access_token 已过期的 主动通知

retry 请求的时候,会发现本地没有 access_token ,从而触发refresh

Types

type AccessToken

type AccessToken struct {
	Cache                          cachego.Cache
	GetAccessTokenHandler          GetAccessTokenFunc
	NoticeAccessTokenExpireHandler NoticeAccessTokenExpireFunc
}

AccessToken 管理器 处理缓存 和 刷新 逻辑

type Client

type Client struct {
	Ctx *OffiAccount
}

HttpClient 用于向公众号接口发送请求

func (*Client) HTTPGet

func (client *Client) HTTPGet(uri string) (resp []byte, err error)

HTTPGet GET 请求

func (*Client) HTTPPost

func (client *Client) HTTPPost(uri string, payload io.Reader, contentType string) (resp []byte, err error)

HTTPPost POST 请求

type Config

type Config struct {
	Appid          string
	Secret         string
	Token          string
	EncodingAESKey string
}

公众号配置

type GetAccessTokenFunc

type GetAccessTokenFunc func(ctx *OffiAccount) (accessToken string, err error)

GetAccessTokenFunc 获取 access_token 方法接口

type NoticeAccessTokenExpireFunc

type NoticeAccessTokenExpireFunc func(ctx *OffiAccount) (err error)

NoticeAccessTokenExpireFunc 通知中控 刷新 access_token

type OffiAccount

type OffiAccount struct {
	Config      Config
	AccessToken AccessToken
	Client      Client
	Server      Server
	Logger      *log.Logger
}

OffiAccount 公众号实例

func New

func New(config Config) (offiAccount *OffiAccount)

创建公众号实例

type Server

type Server struct {
	Ctx *OffiAccount
}

响应微信请求 或 推送消息/事件 的服务器

func (*Server) EchoStr

func (s *Server) EchoStr(writer http.ResponseWriter, request *http.Request)

EchoStr 服务器接口校验

func (*Server) ParseXML

func (s *Server) ParseXML(body []byte) (m interface{}, err error)

ParseXML 解析微信推送过来的消息/事件

func (*Server) Response

func (s *Server) Response(writer http.ResponseWriter, request *http.Request, reply interface{}) (err error)

Response 响应微信消息 (自动判断是否要加密)

Directories

Path Synopsis
apis
account
Package account 账号管理
Package account 账号管理
ai
Package ai 智能接口
Package ai 智能接口
card
Package card 微信卡券
Package card 微信卡券
card/giftcard
Package giftcard 微信礼品卡
Package giftcard 微信礼品卡
card/membercard
Package membercard 会员卡专区
Package membercard 会员卡专区
card/submerchant
Package submerchant 票券-第三方开发者模式
Package submerchant 票券-第三方开发者模式
card/ticket
Package ticket 特殊票券
Package ticket 特殊票券
comment
Package comment 图文消息留言管理
Package comment 图文消息留言管理
cps
Package cps 返佣商品
Package cps 返佣商品
customservice
Package customservice 客服消息/功能
Package customservice 客服消息/功能
datacube
Package datacube 数据统计
Package datacube 数据统计
draft
Package draft 草稿箱
Package draft 草稿箱
guide/buyer
Package buyer 服务号对话能力(原微信导购助手)/客户管理
Package buyer 服务号对话能力(原微信导购助手)/客户管理
guide/guide
Package guide 服务号对话能力(原微信导购助手)/顾问管理
Package guide 服务号对话能力(原微信导购助手)/顾问管理
guide/job
Package job 服务号对话能力(原微信导购助手)/群发任务
Package job 服务号对话能力(原微信导购助手)/群发任务
guide/material
Package material 服务号对话能力(原微信导购助手)/素材管理
Package material 服务号对话能力(原微信导购助手)/素材管理
guide/tag
Package tag 服务号对话能力(原微信导购助手)/标签管理
Package tag 服务号对话能力(原微信导购助手)/标签管理
invoice
Package invoice 微信发票
Package invoice 微信发票
marketcode
Package marketcode 一物一码
Package marketcode 一物一码
material
Package material 素材管理
Package material 素材管理
menu
Package menu 自定义菜单
Package menu 自定义菜单
message
Package message 消息管理
Package message 消息管理
message/mass
Package mass 群发消息
Package mass 群发消息
message/template
Package template 模板消息
Package template 模板消息
nontax
Package nontax 非税票据/缴费
Package nontax 非税票据/缴费
nontax/vehicle
Package vehicle 非税车主平台
Package vehicle 非税车主平台
oauth
网页授权流程分为四步: 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
网页授权流程分为四步: 1、引导用户进入授权页面同意授权,获取code 2、通过code换取网页授权access_token(与基础支持中的access_token不同) 3、如果需要,开发者可以刷新网页授权access_token,避免过期 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
poi
Package poi 微信门店
Package poi 微信门店
poi/miniprogram
Package miniprogram 微信门店小程序
Package miniprogram 微信门店小程序
store
Package store 微信小店/功能接口
Package store 微信小店/功能接口
store/express
Package express 微信小店/邮费模板管理管理
Package express 微信小店/邮费模板管理管理
store/group
Package group 微信小店/分组管理
Package group 微信小店/分组管理
store/order
Package order 微信小店/订单管理
Package order 微信小店/订单管理
store/product
Package product 微信小店/商品管理
Package product 微信小店/商品管理
store/shelf
Package shelf 微信小店/货架管理
Package shelf 微信小店/货架管理
store/stock
Package stock 微信小店/库存管理
Package stock 微信小店/库存管理
user
Package user 用户管理
Package user 用户管理
user/tags
Package tags 用户标签管理
Package tags 用户标签管理
util
Package util 开发辅助
Package util 开发辅助
Package test 模拟微信服务器 测试
Package test 模拟微信服务器 测试
type

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL