WeRoBot.Client —— 微信 API 操作类

有部分接口暂未实现,可自行调用微信接口。

开始开发

获取 access token

详细请参考 http://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html

Client.grant_token()

获取 Access Token。

返回:返回的 JSON 数据包
Client.get_access_token()

判断现有的token是否过期。 用户需要多进程或者多机部署可以手动重写这个函数 来自定义token的存储,刷新策略。

返回:返回token

注解

Client 的操作都会自动进行 access token 的获取和过期刷新操作,如果有特殊需求(如多进程部署)可重写 get_access_token

获取微信服务器IP地址

详细请参考 http://mp.weixin.qq.com/wiki/4/41ef0843d6e108cf6b5649480207561c.html

Client.get_ip_list()

获取微信服务器IP地址。

返回:返回的 JSON 数据包

自定义菜单

自定义菜单创建接口

详细请参考 http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html

Client.create_menu(menu_data)

创建自定义菜单:

client.create_menu({
    "button":[
        {
            "type":"click",
            "name":"今日歌曲",
            "key":"V1001_TODAY_MUSIC"
        },
        {
            "type":"click",
            "name":"歌手简介",
            "key":"V1001_TODAY_SINGER"
        },
        {
            "name":"菜单",
            "sub_button":[
                {
                    "type":"view",
                    "name":"搜索",
                    "url":"http://www.soso.com/"
                },
                {
                    "type":"view",
                    "name":"视频",
                    "url":"http://v.qq.com/"
                },
                {
                    "type":"click",
                    "name":"赞一下我们",
                    "key":"V1001_GOOD"
                }
            ]
        }
    ]})
参数:menu_data – Python 字典
返回:返回的 JSON 数据包

自定义菜单查询接口

详细请参考 http://mp.weixin.qq.com/wiki/5/f287d1a5b78a35a8884326312ac3e4ed.html

Client.get_menu()

查询自定义菜单。

返回:返回的 JSON 数据包

自定义菜单删除接口

详细请参考 http://mp.weixin.qq.com/wiki/3/de21624f2d0d3dafde085dafaa226743.html

Client.delete_menu()

删除自定义菜单。

返回:返回的 JSON 数据包

个性化菜单接口

详细请参考 http://mp.weixin.qq.com/wiki/0/c48ccd12b69ae023159b4bfaa7c39c20.html

Client.create_custom_menu(menu_data, matchrule)

创建个性化菜单:

button = [
    {
        "type":"click",
        "name":"今日歌曲",
        "key":"V1001_TODAY_MUSIC"
    },
    {
        "name":"菜单",
        "sub_button":[
        {
            "type":"view",
            "name":"搜索",
            "url":"http://www.soso.com/"
        },
        {
            "type":"view",
            "name":"视频",
            "url":"http://v.qq.com/"
        },
        {
            "type":"click",
            "name":"赞一下我们",
            "key":"V1001_GOOD"
        }]
 }]
 matchrule = {
    "group_id":"2",
    "sex":"1",
    "country":"中国",
    "province":"广东",
    "city":"广州",
    "client_platform_type":"2",
    "language":"zh_CN"
}
client.create_custom_menu(button, matchrule)
参数:
  • menu_data – 如上所示的 Python 字典
  • matchrule – 如上所示的匹配规则
返回:

返回的 JSON 数据包

Client.delete_custom_menu(menu_id)

删除个性化菜单。

参数:menu_id – 菜单的 ID
返回:返回的 JSON 数据包
Client.match_custom_menu(user_id)

测试个性化菜单匹配结果。

参数:user_id – 要测试匹配的用户 ID
返回:返回的 JSON 数据包

获取自定义菜单配置接口

详细请参考 http://mp.weixin.qq.com/wiki/14/293d0cb8de95e916d1216a33fcb81fd6.html

Client.get_custom_menu_config()

获取自定义菜单配置接口。

返回:返回的 JSON 数据包

消息管理

客服接口

详细请参考 http://mp.weixin.qq.com/wiki/11/c88c270ae8935291626538f9c64bd123.html 发送卡券接口暂时未支持。可自行实现。

Client.add_custom_service_account(account, nickname, password)

添加客服帐号。

参数:
  • account – 客服账号的用户名
  • nickname – 客服账号的昵称
  • password – 客服账号的密码
返回:

返回的 JSON 数据包

Client.update_custom_service_account(account, nickname, password)

修改客服帐号。

参数:
  • account – 客服账号的用户名
  • nickname – 客服账号的昵称
  • password – 客服账号的密码
返回:

返回的 JSON 数据包

Client.delete_custom_service_account(account, nickname, password)

删除客服帐号。

参数:
  • account – 客服账号的用户名
  • nickname – 客服账号的昵称
  • password – 客服账号的密码
返回:

返回的 JSON 数据包

Client.upload_custom_service_account_avatar(account, avatar)

设置客服帐号的头像。

参数:
  • account – 客服账号的用户名
  • avatar – 头像文件,必须是 jpg 格式
返回:

返回的 JSON 数据包

Client.get_custom_service_account_list()

获取所有客服账号。

返回:返回的 JSON 数据包
Client.send_text_message(user_id, content)

发送文本消息。

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • content – 消息正文
返回:

返回的 JSON 数据包

Client.send_image_message(user_id, media_id)

发送图片消息。

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • media_id – 图片的媒体ID。 可以通过 upload_media() 上传。
返回:

返回的 JSON 数据包

Client.send_voice_message(user_id, media_id)

发送语音消息。

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • media_id – 发送的语音的媒体ID。 可以通过 upload_media() 上传。
返回:

返回的 JSON 数据包

Client.send_video_message(user_id, media_id, title=None, description=None)

发送视频消息。

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • media_id – 发送的视频的媒体ID。 可以通过 upload_media() 上传。
  • title – 视频消息的标题
  • description – 视频消息的描述
返回:

返回的 JSON 数据包

Client.send_music_message(user_id, url, hq_url, thumb_media_id, title=None, description=None)

发送音乐消息。 注意如果你遇到了缩略图不能正常显示的问题, 不要慌张; 目前来看是微信服务器端的问题。 对此我们也无能为力 ( #197 )

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • url – 音乐链接
  • hq_url – 高品质音乐链接,wifi环境优先使用该链接播放音乐
  • thumb_media_id – 缩略图的媒体ID。 可以通过 upload_media() 上传。
  • title – 音乐标题
  • description – 音乐描述
返回:

返回的 JSON 数据包

Client.send_article_message(user_id, articles)

发送图文消息:

articles = [
    {
        "title":"Happy Day",
        "description":"Is Really A Happy Day",
        "url":"URL",
        "picurl":"PIC_URL"
    },
    {
        "title":"Happy Day",
        "description":"Is Really A Happy Day",
        "url":"URL",
        "picurl":"PIC_URL"
    }
]
client.send_acticle_message("user_id", acticles)
参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • articles – 一个包含至多8个 article 字典或 Article 对象的数组
返回:

返回的 JSON 数据包

Client.send_news_message(user_id, media_id)

发送永久素材中的图文消息。

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • media_id – 媒体文件 ID
返回:

返回的 JSON 数据包

用户管理

用户分组管理

详细请参考 http://mp.weixin.qq.com/wiki/8/d6d33cf60bce2a2e4fb10a21be9591b8.html

Client.create_group(name)

创建分组。

参数:name – 分组名字(30个字符以内)
返回:返回的 JSON 数据包
Client.get_groups()

查询所有分组。

返回:返回的 JSON 数据包
Client.get_group_by_id(openid)

查询用户所在分组。

参数:openid – 用户的OpenID
返回:返回的 JSON 数据包
Client.update_group(group_id, name)

修改分组名。

参数:
  • group_id – 分组 ID,由微信分配
  • name – 分组名字(30个字符以内)
返回:

返回的 JSON 数据包

Client.move_user(user_id, group_id)

移动用户分组。

参数:
  • user_id – 用户 ID,即收到的 Message 的 source
  • group_id – 分组 ID
返回:

返回的 JSON 数据包

Client.move_users(user_id_list, group_id)

批量移动用户分组。

参数:
  • user_id_list – 用户 ID 的列表(长度不能超过50)
  • group_id – 分组 ID
返回:

返回的 JSON 数据包

Client.delete_group(group_id)

删除分组。

参数:group_id – 要删除的分组的 ID
返回:返回的 JSON 数据包

设置备注名

详细请参考 http://mp.weixin.qq.com/wiki/16/528098c4a6a87b05120a7665c8db0460.html

Client.remark_user(user_id, remark)

设置备注名。

参数:
  • user_id – 设置备注名的用户 ID
  • remark – 新的备注名,长度必须小于30字符
返回:

返回的 JSON 数据包

获取用户基本信息

详细请参考 http://mp.weixin.qq.com/wiki/1/8a5ce6257f1d3b2afb20f83e72b72ce9.html

Client.get_user_info(user_id, lang='zh_CN')

获取用户基本信息。

参数:
  • user_id – 用户 ID 。 就是你收到的 Message 的 source
  • lang – 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
返回:

返回的 JSON 数据包

Client.get_users_info(user_id_list, lang='zh_CN')

批量获取用户基本信息。

参数:
  • user_id_list – 用户 ID 的列表
  • lang – 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
返回:

返回的 JSON 数据包

账户管理

长链接转短链接接口和微信认证事件推送暂未添加,可自行实现。

生成带参数的二维码

详细请参考 http://mp.weixin.qq.com/wiki/18/167e7d94df85d8389df6c94a7a8f78ba.html

Client.create_qrcode(data)

创建二维码。

参数:data – 你要发送的参数 dict
返回:返回的 JSON 数据包
Client.show_qrcode(ticket)

通过ticket换取二维码。

参数:ticket – 二维码 ticket 。可以通过 create_qrcode() 获取到
返回:返回的 Request 对象

获取用户列表

详细请参考 http://mp.weixin.qq.com/wiki/12/54773ff6da7b8bdc95b7d2667d84b1d4.html

Client.get_followers(first_user_id=None)

获取关注者列表 详情请参考 http://mp.weixin.qq.com/wiki/index.php?title=获取关注者列表

参数:first_user_id – 可选。第一个拉取的OPENID,不填默认从头开始拉取
返回:返回的 JSON 数据包

素材管理

新增临时素材

详细请参考 http://mp.weixin.qq.com/wiki/15/2d353966323806a202cd2deaafe8e557.html

Client.upload_media(media_type, media_file)

上传临时多媒体文件。

参数:
  • media_type – 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
  • media_file – 要上传的文件,一个 File-object
返回:

返回的 JSON 数据包

获取临时素材

详细请参考 http://mp.weixin.qq.com/wiki/9/677a85e3f3849af35de54bb5516c2521.html

Client.download_media(media_id)

下载临时多媒体文件。

参数:media_id – 媒体文件 ID
返回:requests 的 Response 实例

新增永久素材

详细请参考 http://mp.weixin.qq.com/wiki/10/10ea5a44870f53d79449290dfd43d006.html

Client.add_news(articles)

新增永久图文素材:

articles = [{
   "title": TITLE,
   "thumb_media_id": THUMB_MEDIA_ID,
   "author": AUTHOR,
   "digest": DIGEST,
   "show_cover_pic": SHOW_COVER_PIC(0 / 1),
   "content": CONTENT,
   "content_source_url": CONTENT_SOURCE_URL
}
# 若新增的是多图文素材,则此处应有几段articles结构,最多8段
]
client.add_news(articles)
参数:articles – 如示例中的数组
返回:返回的 JSON 数据包
Client.upload_news_picture(file)

上传图文消息内的图片。

参数:file – 要上传的文件,一个 File-object
返回:返回的 JSON 数据包
Client.upload_permanent_media(media_type, media_file)

上传其他类型永久素材。

参数:
  • media_type – 媒体文件类型,分别有图片(image)、语音(voice)和缩略图(thumb)
  • media_file – 要上传的文件,一个 File-object
返回:

返回的 JSON 数据包

Client.upload_permanent_video(title, introduction, video)

上传永久视频。

参数:
  • title – 视频素材的标题
  • introduction – 视频素材的描述
  • video – 要上传的视频,一个 File-object
返回:

requests 的 Response 实例

获取永久素材

详细请参考 http://mp.weixin.qq.com/wiki/12/3c12fac7c14cb4d0e0d4fe2fbc87b638.html

Client.download_permanent_media(media_id)

获取永久素材。

参数:media_id – 媒体文件 ID
返回:requests 的 Response 实例

删除永久素材

详细请参考 http://mp.weixin.qq.com/wiki/7/2212203f4e17253b9aef77dc788f5337.html

Client.delete_permanent_media(media_id)

删除永久素材。

参数:media_id – 媒体文件 ID
返回:返回的 JSON 数据包

修改永久图文素材

详细请参考 http://mp.weixin.qq.com/wiki/10/c7bad9a463db20ff8ccefeedeef51f9e.html

Client.update_news(update_data)

修改永久图文素材:

update_data = {
    "media_id":MEDIA_ID,
    "index":INDEX,
    "articles": {
        "title": TITLE,
        "thumb_media_id": THUMB_MEDIA_ID,
        "author": AUTHOR,
        "digest": DIGEST,
        "show_cover_pic": SHOW_COVER_PIC(0 / 1),
        "content": CONTENT,
        "content_source_url": CONTENT_SOURCE_URL
    }
}
client.update_news(update_data)
参数:update_data – 更新的数据,要包含 media_id(图文素材的 ID),index(要更新的文章在图文消息中的位置),articles(新的图文素材数据)
返回:返回的 JSON 数据包

获取素材总数

详细请参考 http://mp.weixin.qq.com/wiki/5/a641fd7b5db7a6a946ebebe2ac166885.html

Client.get_media_count()

获取素材总数。

返回:返回的 JSON 数据包

获取素材列表

详细请参考 http://mp.weixin.qq.com/wiki/15/8386c11b7bc4cdd1499c572bfe2e95b3.html

Client.get_media_list(media_type, offset, count)

获取素材列表。

参数:
  • media_type – 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
  • offset – 从全部素材的该偏移位置开始返回,0表示从第一个素材返回
  • count – 返回素材的数量,取值在1到20之间
返回:

返回的 JSON 数据包