openwechat

package module
v0.0.0-...-9bd3085 Latest Latest
Warning

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

Go to latest
Published: Feb 21, 2021 License: Apache-2.0 Imports: 19 Imported by: 0

README

openwechat

golang版个人微信号API, 类似开发公众号一样,开发个人微信号

使用前提

1、你的微信号必须能够在微信网页版成功登录

2、golang版本大于等于1.11

安装

go get

go get github.com/Ivy1996-encode/openwechat

go mod

require github.com/Ivy1996-encode/openwechat
快速开始
登录微信
package main

import (
	"fmt"
	"github.com/Ivy1996-encode/openwechat"
)

func main() {
	messageHandler := func(msg *openwechat.Message) {
		fmt.Println(msg)
	}
	bot := openwechat.DefaultBot()
    
    // 注册消息处理函数
	bot.RegisterMessageHandler(messageHandler)
    // 设置默认的登录回调
    // 可以设置通过该uuid获取到登录的二维码
	bot.UUIDCallback = openwechat.PrintlnQrcodeUrl
    // 登录
	if err := bot.Login(); err != nil {
		fmt.Println(err)
		return
	}
    // 阻塞主程序,直到用户退出或发生异常
	bot.Block()
}
回复消息
messageHandler := func(msg *openwechat.Message) {
		msg.ReplyText("hello")
}
获取消息的发送者
messageHandler := func(msg *openwechat.Message) {
		sender, err := msg.Sender()
}
获取所有的好友
// 登录之后调用
self, err := bot.GetCurrentUser()
if err != nil {
    fmt.Println(err)
    return
}
friends, err := self.Friends()
发送消息给好友
self, err := bot.GetCurrentUser()
if err != nil {
    fmt.Println(err)
    return
}
friends, err := self.Friends()
if err != nil {
    fmt.Println(err)
    return
}
if friends.Count() > 0 {
    // 发送给第一个好友
    friends[0].SendText("你好")
}
发送图片消息
friends, err := self.Friends()
if err != nil {
    fmt.Println(err)
    return
}
if friends.Count() > 0 {
    // 发送给第一个好友
    img, _ := os.Open("test.png")
    defer img.Close()
    friends[0].SendImage(img)
}
bot.Block()

更多功能请在代码中探索。。。

// todo: add more support

Documentation

Index

Constants

View Source
const (
	TextMessage  = 1
	ImageMessage = 3
	AppMessage   = 6
)

消息类型

Variables

This section is empty.

Functions

func GetQrcodeUrl

func GetQrcodeUrl(uuid string) string

func GetRandomDeviceId

func GetRandomDeviceId() string

func PrintlnQrcodeUrl

func PrintlnQrcodeUrl(uuid string)

func ToBuffer

func ToBuffer(v interface{}) (*bytes.Buffer, error)

Types

type BaseRequest

type BaseRequest struct {
	Uin                 int
	Sid, Skey, DeviceID string
}

初始的请求信息 几乎所有的请求都要携带该参数

type BaseResponse

type BaseResponse struct {
	ErrMsg string
	Ret    int
}

大部分返回对象都携带该信息

func (BaseResponse) Error

func (b BaseResponse) Error() string

func (BaseResponse) Ok

func (b BaseResponse) Ok() bool

type Bot

type Bot struct {
	Caller *Caller

	ScanCallBack  func(body []byte)
	LoginCallBack func(body []byte)
	UUIDCallback  func(uuid string)
	// contains filtered or unexported fields
}

func DefaultBot

func DefaultBot() *Bot

func NewBot

func NewBot(caller *Caller, storage WechatStorage) *Bot

func (*Bot) Alive

func (b *Bot) Alive() bool

判断当前用户是否正常在线

func (*Bot) Block

func (b *Bot) Block()

当消息同步发生了错误或者用户主动在手机上退出,该方法会立即返回,否则会一直阻塞

func (*Bot) GetCurrentUser

func (b *Bot) GetCurrentUser() (*Self, error)

获取当前的用户

func (*Bot) Login

func (b *Bot) Login() error

用户登录 该方法会一直阻塞,直到用户扫码登录,或者二维码过期

func (*Bot) RegisterMessageHandler

func (b *Bot) RegisterMessageHandler(handler MessageHandler)

注册消息处理的函数

type Caller

type Caller struct {
	Client *Client
}

调用请求和解析请求 上层模块可以直接获取封装后的请求结果

func DefaultCaller

func DefaultCaller() *Caller

Default Constructor for Caller

func NewCaller

func NewCaller(client *Client) *Caller

Constructor for Caller

func (*Caller) CheckLogin

func (c *Caller) CheckLogin(uuid string) (*CheckLoginResponse, error)

检查是否登录成功

func (*Caller) GetLoginInfo

func (c *Caller) GetLoginInfo(body []byte) (*LoginInfo, error)

获取登录信息

func (*Caller) GetLoginUUID

func (c *Caller) GetLoginUUID() (string, error)

获取登录的uuid

func (*Caller) SyncCheck

func (c *Caller) SyncCheck(info LoginInfo, response WebInitResponse) (*SyncCheckResponse, error)

异步获取是否有新的消息

func (*Caller) WebInit

func (c *Caller) WebInit(request BaseRequest) (*WebInitResponse, error)

获取初始化信息

func (*Caller) WebWxBatchGetContact

func (c *Caller) WebWxBatchGetContact(members Members, request BaseRequest) (Members, error)

获取联系人的详情 注: Members参数的长度不要大于50

func (*Caller) WebWxGetContact

func (c *Caller) WebWxGetContact(info LoginInfo) (Members, error)

获取所有的联系人

func (*Caller) WebWxOplog

func (c *Caller) WebWxOplog(request BaseRequest, remarkName, toUserName string) error

修改用户备注接口

func (*Caller) WebWxSendImageMsg

func (c *Caller) WebWxSendImageMsg(file *os.File, request BaseRequest, info LoginInfo, fromUserName, toUserName string) error

发送图片消息接口

func (*Caller) WebWxSendMsg

func (c *Caller) WebWxSendMsg(msg *SendMessage, info LoginInfo, request BaseRequest) error

发送消息接口

func (*Caller) WebWxStatusNotify

func (c *Caller) WebWxStatusNotify(request BaseRequest, response WebInitResponse, info LoginInfo) error

通知手机已登录

func (*Caller) WebWxSync

func (c *Caller) WebWxSync(request BaseRequest, response WebInitResponse, info LoginInfo) (*WebWxSyncResponse, error)

获取新的消息接口

type CheckLoginResponse

type CheckLoginResponse struct {
	Code string
	Raw  []byte
}

type Client

type Client struct{ *http.Client }

http请求客户端 客户端需要维持Session会话 并且客户端不允许跳转

func DefaultClient

func DefaultClient() *Client

自动存储cookie 设置客户端不自动跳转

func NewClient

func NewClient(client *http.Client) *Client

func (*Client) CheckLogin

func (c *Client) CheckLogin(uuid string) (*http.Response, error)

检查是否登录

func (*Client) GetLoginInfo

func (c *Client) GetLoginInfo(path string) (*http.Response, error)

请求获取LoginInfo

func (*Client) GetLoginQrcode

func (c *Client) GetLoginQrcode(uuid string) (*http.Response, error)

获取登录的二维吗

func (*Client) GetLoginUUID

func (c *Client) GetLoginUUID() (*http.Response, error)

获取登录的uuid

func (*Client) SyncCheck

func (c *Client) SyncCheck(info LoginInfo, response WebInitResponse) (*http.Response, error)

异步检查是否有新的消息返回

func (*Client) WebInit

func (c *Client) WebInit(request BaseRequest) (*http.Response, error)

请求获取初始化信息

func (*Client) WebWxBatchGetContact

func (c *Client) WebWxBatchGetContact(members Members, request BaseRequest) (*http.Response, error)

获取联系人详情

func (*Client) WebWxGetContact

func (c *Client) WebWxGetContact(info LoginInfo) (*http.Response, error)

获取联系人信息

func (*Client) WebWxGetHeadImg

func (c *Client) WebWxGetHeadImg(headImageUrl string) (*http.Response, error)

获取用户的头像

func (*Client) WebWxOplog

func (c *Client) WebWxOplog(request BaseRequest, remarkName, userName string) (*http.Response, error)

用户重命名接口

func (*Client) WebWxSendAppMsg

func (c *Client) WebWxSendAppMsg(msg *SendMessage, request BaseRequest) (*http.Response, error)

发送文件信息

func (*Client) WebWxSendMsg

func (c *Client) WebWxSendMsg(msg *SendMessage, info LoginInfo, request BaseRequest) (*http.Response, error)

发送文本消息

func (*Client) WebWxSendMsgImg

func (c *Client) WebWxSendMsgImg(msg *SendMessage, request BaseRequest, info LoginInfo) (*http.Response, error)

发送图片 这个接口依赖上传文件的接口 发送的图片必须是已经成功上传的图片

func (*Client) WebWxStatusNotify

func (c *Client) WebWxStatusNotify(request BaseRequest, response WebInitResponse, info LoginInfo) (*http.Response, error)

通知手机已登录

func (*Client) WebWxSync

func (c *Client) WebWxSync(request BaseRequest, response WebInitResponse, info LoginInfo) (*http.Response, error)

获取消息接口

func (*Client) WebWxUploadMedia

func (c *Client) WebWxUploadMedia(file *os.File, request BaseRequest, info LoginInfo, forUserName, toUserName, contentType, mediaType string) (*http.Response, error)

上传文件

func (*Client) WebWxVerifyUser

func (c *Client) WebWxVerifyUser(storage WechatStorage, info RecommendInfo, verifyContent string) (*http.Response, error)

添加用户为好友接口

type Friend

type Friend struct{ *User }

func (*Friend) RemarkName

func (f *Friend) RemarkName(name string) error

func (*Friend) SendImage

func (f *Friend) SendImage(file *os.File) error

func (*Friend) SendMsg

func (f *Friend) SendMsg(msg *SendMessage) error

func (*Friend) SendText

func (f *Friend) SendText(content string) error

func (Friend) String

func (f Friend) String() string

implement fmt.Stringer

type Friends

type Friends []*Friend

func (Friends) Count

func (f Friends) Count() int

func (Friends) SearchByRemarkName

func (f Friends) SearchByRemarkName(name string) (Friends, error)

type Group

type Group struct{ *User }

func (*Group) Members

func (g *Group) Members() (Members, error)

获取所有的群成员

func (*Group) SendImage

func (g *Group) SendImage(file *os.File) error

func (*Group) SendMsg

func (g *Group) SendMsg(msg *SendMessage) error

func (*Group) SendText

func (g *Group) SendText(content string) error

func (Group) String

func (g Group) String() string

implement fmt.Stringer

type Groups

type Groups []*Group

func (Groups) Count

func (g Groups) Count() int

type LoginInfo

type LoginInfo struct {
	Ret         int    `xml:"ret"`
	Message     string `xml:"message"`
	SKey        string `xml:"skey"`
	WxSid       string `xml:"wxsid"`
	WxUin       int    `xml:"wxuin"`
	PassTicket  string `xml:"pass_ticket"`
	IsGrayScale int    `xml:"isgrayscale"`
}

登录信息

type MPSubscribeMsg

type MPSubscribeMsg struct {
	UserName       string
	Time           int64
	NickName       string
	MPArticleCount int
	MPArticleList  []struct {
		Title  string
		Cover  string
		Digest string
		Url    string
	}
}

公众号的订阅信息

type Members

type Members []*User

func (Members) Count

func (m Members) Count() int

func (Members) SearchByRemarkName

func (m Members) SearchByRemarkName(name string) (Members, error)

func (Members) SearchByUserName

func (m Members) SearchByUserName(username string) (*User, error)

func (Members) SetOwner

func (m Members) SetOwner(s *Self)

type Message

type Message struct {
	AppInfo struct {
		AppID string
		Type  int
	}
	AppMsgType           int
	Content              string
	CreateTime           int64
	EncryFileName        string
	FileName             string
	FileSize             string
	ForwardFlag          int
	FromUserName         string
	HasProductId         int
	ImgHeight            int
	ImgStatus            int
	ImgWidth             int
	MediaId              string
	MsgId                string
	MsgType              int
	NewMsgId             int64
	OriContent           string
	PlayLength           int64
	RecommendInfo        RecommendInfo
	Status               int
	StatusNotifyCode     int
	StatusNotifyUserName string
	SubMsgType           int
	Ticket               string
	ToUserName           string
	Url                  string
	VoiceLength          int
	Bot                  *Bot

	Context context.Context
	// contains filtered or unexported fields
}

func (*Message) Get

func (m *Message) Get(key string) (value interface{}, exist bool)

func (*Message) IsCard

func (m *Message) IsCard() bool

func (*Message) IsFriendAdd

func (m *Message) IsFriendAdd() bool

func (*Message) IsMap

func (m *Message) IsMap() bool

func (*Message) IsPicture

func (m *Message) IsPicture() bool

func (*Message) IsRecalled

func (m *Message) IsRecalled() bool

func (*Message) IsSendByFriend

func (m *Message) IsSendByFriend() bool

判断消息是否由好友发送

func (*Message) IsSendByGroup

func (m *Message) IsSendByGroup() bool

判断消息是否由群组发送

func (*Message) IsSendBySelf

func (m *Message) IsSendBySelf() bool

判断消息是否由自己发送

func (*Message) IsSharing

func (m *Message) IsSharing() bool

func (*Message) IsSystem

func (m *Message) IsSystem() bool

func (*Message) IsText

func (m *Message) IsText() bool

func (*Message) IsVideo

func (m *Message) IsVideo() bool

func (*Message) IsVoice

func (m *Message) IsVoice() bool

func (*Message) Reply

func (m *Message) Reply(msgType int, content, mediaId string) error

回复消息

func (*Message) ReplyImage

func (m *Message) ReplyImage(file *os.File) error

回复图片消息

func (*Message) ReplyText

func (m *Message) ReplyText(content string) error

回复文本消息

func (*Message) Sender

func (m *Message) Sender() (*User, error)

获取消息的发送者

func (*Message) SenderInGroup

func (m *Message) SenderInGroup() (*User, error)

获取消息在群里面的发送者

func (*Message) Set

func (m *Message) Set(key string, value interface{})

用在多个messageHandler之间传递信息

type MessageHandler

type MessageHandler func(message *Message)

type MessageHandlerGroup

type MessageHandlerGroup struct {
	// contains filtered or unexported fields
}

func (MessageHandlerGroup) ProcessMessage

func (m MessageHandlerGroup) ProcessMessage(message *Message)

func (*MessageHandlerGroup) RegisterHandler

func (m *MessageHandlerGroup) RegisterHandler(handler MessageHandler)

type RecommendInfo

type RecommendInfo struct {
	Alias      string
	AttrStatus int64
	City       string
	Content    string
	NickName   string
	OpCode     int
	Province   string
	QQNum      int64
	Scene      int
	Sex        int
	Signature  string
	Ticket     string
	UserName   string
	VerifyFlag int
}

一些特殊类型的消息会携带该结构体信息

type ReturnResponse

type ReturnResponse struct {
	*http.Response
	// contains filtered or unexported fields
}

Http请求的响应结构体封装

func NewReturnResponse

func NewReturnResponse(response *http.Response, err error) *ReturnResponse

Constructor for ReturnResponse

func (*ReturnResponse) Err

func (r *ReturnResponse) Err() error

获取当前请求的错误

func (*ReturnResponse) ReadAll

func (r *ReturnResponse) ReadAll() ([]byte, error)

读取请求体

func (*ReturnResponse) ScanJSON

func (r *ReturnResponse) ScanJSON(v interface{}) error

json序列化

func (*ReturnResponse) ScanXML

func (r *ReturnResponse) ScanXML(v interface{}) error

xml序列化

type Self

type Self struct {
	*User
	Bot *Bot
	// contains filtered or unexported fields
}

func (*Self) FileHelper

func (s *Self) FileHelper() (*Friend, error)

获取文件传输助手对象,封装成Friend返回

func (*Self) Friends

func (s *Self) Friends(update ...bool) (Friends, error)

获取所有的好友

func (*Self) Groups

func (s *Self) Groups(update ...bool) (Groups, error)

获取所有的群组

func (*Self) Members

func (s *Self) Members(update ...bool) (Members, error)

获取所有的好友、群组、公众号信息

func (*Self) UpdateMembersDetail

func (s *Self) UpdateMembersDetail() error

更新所有的联系人信息

type SendMessage

type SendMessage struct {
	Type         int
	Content      string
	FromUserName string
	ToUserName   string
	LocalID      int64
	ClientMsgId  int64
	MediaId      string
}

发送消息的结构体

func NewMediaSendMessage

func NewMediaSendMessage(msgType int, fromUserName, toUserName, mediaId string) *SendMessage

媒体消息的构造方法

func NewSendMessage

func NewSendMessage(msgType int, content, fromUserName, toUserName, mediaId string) *SendMessage

SendMessage的构造方法

func NewTextSendMessage

func NewTextSendMessage(content, fromUserName, toUserName string) *SendMessage

文本消息的构造方法

type SimpleWechatStorage

type SimpleWechatStorage struct {
	// contains filtered or unexported fields
}

implement WechatStorage WechatStorage接口的实现

func NewSimpleWechatStorage

func NewSimpleWechatStorage() *SimpleWechatStorage

func (*SimpleWechatStorage) GetBaseRequest

func (s *SimpleWechatStorage) GetBaseRequest() BaseRequest

func (*SimpleWechatStorage) GetLoginInfo

func (s *SimpleWechatStorage) GetLoginInfo() LoginInfo

func (*SimpleWechatStorage) GetWebInitResponse

func (s *SimpleWechatStorage) GetWebInitResponse() WebInitResponse

func (*SimpleWechatStorage) SetBaseRequest

func (s *SimpleWechatStorage) SetBaseRequest(baseRequest BaseRequest)

func (*SimpleWechatStorage) SetLoginInfo

func (s *SimpleWechatStorage) SetLoginInfo(loginInfo LoginInfo)

func (*SimpleWechatStorage) SetWebInitResponse

func (s *SimpleWechatStorage) SetWebInitResponse(webInitResponse WebInitResponse)

type SyncCheckResponse

type SyncCheckResponse struct {
	RetCode  string
	Selector string
}

func (*SyncCheckResponse) Error

func (s *SyncCheckResponse) Error() string

实现error接口

func (*SyncCheckResponse) NorMal

func (s *SyncCheckResponse) NorMal() bool

func (*SyncCheckResponse) Success

func (s *SyncCheckResponse) Success() bool

type SyncKey

type SyncKey struct {
	Count int
	List  []struct{ Key, Val int64 }
}

type User

type User struct {
	Uin               int
	HideInputBarFlag  int
	StarFriend        int
	Sex               int
	AppAccountFlag    int
	VerifyFlag        int
	ContactFlag       int
	WebWxPluginSwitch int
	HeadImgFlag       int
	SnsFlag           int
	UserName          string
	NickName          string
	HeadImgUrl        string
	RemarkName        string
	PYInitial         string
	PYQuanPin         string
	RemarkPYInitial   string
	RemarkPYQuanPin   string
	Signature         string
	MemberCount       int
	MemberList        Members
	OwnerUin          int
	Statues           int
	AttrStatus        int
	Province          string
	City              string
	Alias             string
	UniFriend         int
	DisplayName       string
	ChatRoomId        int
	KeyWord           string
	EncryChatRoomId   string
	IsOwner           int

	Self *Self
}

func (*User) Detail

func (u *User) Detail() (*User, error)

获取用户的详情

func (*User) GetAvatarResponse

func (u *User) GetAvatarResponse() (*http.Response, error)

获取用户头像

func (*User) SaveAvatar

func (u *User) SaveAvatar(filename string) error

下载用户头像

func (*User) String

func (u *User) String() string

implement fmt.Stringer

type UserDetailItem

type UserDetailItem struct {
	UserName        string
	EncryChatRoomId string
}

type UserDetailItemList

type UserDetailItemList []UserDetailItem

func NewUserDetailItemList

func NewUserDetailItemList(members Members) UserDetailItemList

type WebInitResponse

type WebInitResponse struct {
	BaseResponse        BaseResponse
	Count               int
	ChatSet             string
	SKey                string
	SyncKey             SyncKey
	User                User
	ClientVersion       int
	SystemTime          int64
	GrayScale           int
	InviteStartCount    int
	MPSubscribeMsgCount int
	MPSubscribeMsgList  []MPSubscribeMsg
	ClickReportInterval int
	ContactList         []User
}

初始化的相应信息

type WebWxBatchContactResponse

type WebWxBatchContactResponse struct {
	BaseResponse BaseResponse
	ContactList  []*User
	Count        int
}

type WebWxContactResponse

type WebWxContactResponse struct {
	BaseResponse BaseResponse
	MemberCount  int
	MemberList   []*User
	Seq          int
}

type WebWxSyncResponse

type WebWxSyncResponse struct {
	AddMsgCount            int
	AddMsgList             []*Message
	BaseResponse           BaseResponse
	ContinueFlag           int
	DelContactCount        int
	ModChatRoomMemberCount int
	ModChatRoomMemberList  Members
	ModContactCount        int
	Skey                   string
	SyncCheckKey           SyncKey
	SyncKey                SyncKey
}

type WechatStorage

type WechatStorage interface {
	SetLoginInfo(loginInfo LoginInfo)
	SetBaseRequest(baseRequest BaseRequest)
	SetWebInitResponse(webInitResponse WebInitResponse)
	GetLoginInfo() LoginInfo
	GetBaseRequest() BaseRequest
	GetWebInitResponse() WebInitResponse
}

WechatStorage 可以根据自己的情况来实现该接口

Jump to

Keyboard shortcuts

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