Skip to content

timerzz/itchatgo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

itchatgo

!注意,这个方法已经无法使用!大概2022/1/1左右,微信把uos的接口也封了

itchatgo受到itchat 项目的启发,可以通过golang处理微信信息。

itchatgo参考UOS版本微信,绕过了微信的登录限制。

itchatgo提供了更为易扩展的接口,通过这些接口,可以极大程度的开发出极具个性化的程序。

使用

在golang项目中使用itchatgo

import(
    "github.com/timerzz/itchatgo"
)

入门Demo

如果只使用api部分可以只引入api

import(
    "github.com/timerzz/itchatgo/api"
)
var api = api.NewApi()

TODO

  • 登录、登出
  • 接收消息
  • 发送文字,图片
  • 获取联系人
  • 获取群成员详情
  • 获取头像
  • 登录回调,退出登录回调,停止监听回调
  • 发送文件
  • 发送视频
  • 群、好友变更
  • 创建群聊
  • 邀请入群
  • 撤回消息

接口

登录

import(
"github.com/timerzz/itchatgo"
)

func func main() {
    clientSet := itchatgo.NewClientSet()
	uuidInfo, err := cs.LoginCtl().SetTimeout(3 * time.Minute).Login()
	if err != nil{
	    fmt.Println(err)
	    return
	}
	//设置登录成功和退出登录的回调函数
	cs.LoginCtl().SetLoggedCall(func() {
	    fmt.Println("登录成功")
	})
	cs.LoginCtl().SetLogoutCall(func() {
	    fmt.Println("退出登录")
	})
}

登录是LoginCtlLogin函数,函数返回uuidInfo和error。其中uuidInfo包含uuid、二维码图片 的[]byte以及二维码url。可以通过类似github.com/qianlnk/qrcode的库直接通过uuidInfo中的QrUrl生成二维码。

除此之外,还可以通过SetLoggedCall和SetLogoutCall用来设置登录成功和退出登录的回调函数。

登录有默认的超时时间是10min,超过10min就不再轮询。这个超时时间可以通过SetTimeout设置

更新二维码

	cs.LoginCtl().ReLoadUUid()

停止登录

	cs.LoginCtl().StopLogin()

在登录成功前,如果不停止登录,会一直轮询有没有登录成功

退出登录

clientSet.LoginCtl().Logout()

接收消息

var msgHandler = func(msg *model.WxRecvMsg) {
    if strings.Contains(msg.Content, "exit"){
        cs.LoginCtl().Logout()
    }else{
        fmt.Println(msg.Content)
    }
}

//错误处理函数
var errHandler = func(err error) {
    fmt.Println(err)
}

//开始监听
cs.MsgCtl().Receive(msgHandler, errHandler)

Receive需要传入消息的处理函数和错误处理函数

如果你不需要一直进行消息的接收,也可以使用MsgCtl().WebWxSync()来接收消息(可以参考Receive的实现)。

也可以通过SetExitCall设置退出监听时的回调函数

发送消息

clientSet.Api().SendMsg(msg, toUserName)  //发送文字消息
clientSet.Api().SendImage(filePath, toUserName, MediaId)  //发送图片

如果toUserName是"",默认会发给文件传输助手。

获取联系人

clientSet.ContactCtl().GetAllContact()
clientSet.ContactCtl().GetUserByNickName()

GetAllContact会获取所有联系人,好友和群会混在一起。

获取头像

clientSet.Api().GetHeadImg(userName, chatRoomName,filePath) 
clientSet.Api().GetHeadImgByUser(User,filePath)

获取头像提供了两个方法。
GetHeadImg接收三个参数:userName, chatRoomUserName, filePath。

如果没有username而有chatRoomUname, 就是获取群的头像   
如果两个都有,就是获取群中某个用户的头像   
如果有picPath, 还会把头像保存到filePath路径
返回值是头像的[]byte和error

另一个方法是GetHeadImgByUser(User,filePath), 可以直接传入model.User对象,这个方法 会使用User中的HedImgUrl字段去获取头像。
需要注意的是,这样个方法获取的头像大小不一样,GetHeadImg获取的图大,GetHeadImgByUser获取的图小

获取群详情

clientSet.ContactCtl().GetContactDetail()

特别鸣谢

itchat4go
ItChat

参考

微信网页版接口分析

捐赠

如果觉得这个项目有所帮助, 可以请我喝杯奶茶
图片名称 图片名称