├── .idea ├── .gitignore ├── inspectionProfiles │ └── profiles_settings.xml ├── misc.xml ├── modules.xml ├── sdk_http_python.iml └── vcs.xml ├── api.py ├── demoMain.py └── requirements.txt /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/sdk_http_python.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /api.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | # @name='python wx_bot API', 3 | # @version='1.0.1', 4 | # @author='wordgao', 5 | # @author_email='wordgao@163.com', 6 | # @description='根据官方提供的PHP版API翻译后的API插件 Q 257386' 7 | import requests 8 | import json 9 | 10 | """ 11 | 【事件数值】 【事件描述】 12 | 100 私聊消息 13 | 200 群聊消息 14 | 300 暂无 15 | 400 群成员增加 16 | 410 群成员减少 17 | 500 收到好友请求 18 | 600 二维码收款 19 | 700 收到转账 20 | 800 软件开始启动 21 | 900 新的账号登录完成 22 | 910 账号下线 23 | """ 24 | 25 | """" 26 | * @param int type => 事件类型(事件列表可参考 - 事件列表demo) 27 | * @param string from_wxid => 1级来源id(比如发消息的人的id) 28 | * @param string from_name => 1级来源昵称(比如发消息的人昵称) 29 | * @param string final_from_wxid => 2级来源id(群消息事件下,1级来源为群id,2级来源为发消息的成员id,私聊事件下都一样) 30 | * @param string final_nickname => 2级来源昵称 31 | * @param string robot_wxid => 当前登录的账号(机器人)标识id 32 | * @param string msg => 消息内容 33 | * @param string parameters => 附加参数(暂未用到,请忽略) 34 | * @param int time => 请求时间(时间戳10位版本) 35 | 36 | 【功能名】 【demo中函数名】 37 | 发送文本消息 send_text_msg() 38 | 发送群消息并艾特某人 send_group_at_msg() 39 | 发送图片消息 send_iamge_msg() 40 | 发送视频消息 send_video_msg() 41 | 发送文件消息 send_file_msg() 42 | 发送动态表情 send_emoji_msg() 43 | 发送分享链接 send_link_msg() 44 | 发送音乐消息 send_music_msg() 45 | 取指定登录账号的昵称 get_robot_name() 46 | 取指定登录账号的头像 get_robot_headimgurl() 47 | 取登录账号列表 get_logged_account_list() 48 | 取好友列表 get_friend_list() 49 | 取群聊列表 get_group_list() 50 | 取群成员资料 get_group_member() 51 | 取群成员列表 get_group_member_list() 52 | 接收好友转账 accept_transfer() 53 | 同意群聊邀请 agree_group_invite() 54 | 同意好友请求 agree_friend_verify() 55 | 修改好友备注 modify_friend_note() 56 | 删除好友 delete_friend() 57 | 踢出群成员 remove_group_member() 58 | 修改群名称 modify_group_name() 59 | 修改群公告 modify_group_notice() 60 | 建立新群 building_group() 61 | 退出群聊 quit_group() 62 | 邀请加入群聊 invite_in_group() 63 | """ 64 | 65 | # 主动调用发送接口 66 | API_URL = "http://127.0.0.1:8073/send" 67 | 68 | 69 | # TODO data['msg'] = requests.utils.quote(msg) # 发送内容 发送的信息如果出现乱码,请按照此方式修改 70 | 71 | 72 | def send_text_msg(robwxid, to_wxid, msg): 73 | """ 74 | 发送文字消息(好友或者群) 75 | * @access public 76 | * @param string robwxid 登录账号id,用哪个账号去发送这条消息 77 | * @param string to_wxid 对方的id,可以是群或者好友id 78 | * @param string msg 消息内容 79 | * @return string json_string 80 | """ 81 | data = dict() 82 | data['type'] = 100 # Api数值(可以参考 - api列表demo) 83 | data['msg'] = requests.utils.quote(msg) # 发送内容 84 | data['to_wxid'] = to_wxid # 对方id 85 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 86 | result = json.dumps(data) 87 | try: 88 | return requests.post(API_URL, data={"data": result}) 89 | except requests.exceptions.ConnectionError as e: 90 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 91 | 92 | 93 | def send_group_at_msg(robwxid, to_wxid, at_wxid, at_name, msg): 94 | """ 95 | * 发送群消息并艾特某人 96 | * 97 | * @access public 98 | * @param string robwxid 账户id,用哪个账号去发送这条消息 99 | * @param string to_wxid 群id 100 | * @param string at_wxid 艾特的id,群成员的id 101 | * @param string at_name 艾特的昵称,群成员的昵称 102 | * @param string msg 消息内容 103 | * @return string json_string 104 | """ 105 | data = dict() 106 | data['type'] = 102 # Api数值(可以参考 - api列表demo) 107 | data['msg'] = requests.utils.quote(msg) # 发送的文件的绝对路径 108 | data['to_wxid'] = to_wxid # 群id 109 | data['at_wxid'] = at_wxid # 艾特的id,群成员的id 110 | data['at_name'] = at_name # 艾特的昵称,群成员的昵称 111 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 112 | result = json.dumps(data) 113 | try: 114 | return requests.post(API_URL, data={"data": result}) 115 | except requests.exceptions.ConnectionError as e: 116 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 117 | 118 | 119 | def send_image_msg(robwxid, to_wxid, path): 120 | """ 121 | * 发送图片消息 122 | * 123 | * @access public 124 | * @param string robwxid 登录账号id,用哪个账号去发送这条消息 125 | * @param string to_wxid 对方的id,可以是群或者好友id 126 | * @param string path 图片的绝对路径 127 | * @return string json_string 128 | """ 129 | data = dict() 130 | data['type'] = 103 # Api数值(可以参考 - api列表demo) 131 | data['msg'] = path # 发送的图片的绝对路径 132 | data['to_wxid'] = to_wxid # 对方id 133 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 134 | result = json.dumps(data) 135 | try: 136 | return requests.post(API_URL, data={"data": result}) 137 | except requests.exceptions.ConnectionError as e: 138 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 139 | 140 | 141 | def send_video_msg(robwxid, to_wxid, path): 142 | """ 143 | * 发送视频消息 144 | * 145 | * @access public 146 | * @param string robwxid 账户id,用哪个账号去发送这条消息 147 | * @param string to_wxid 对方的id,可以是群或者好友id 148 | * @param string path 视频的绝对路径 149 | * @return string json_string 150 | """ 151 | data = dict() 152 | data['type'] = 104 # Api数值(可以参考 - api列表demo) 153 | data['msg'] = path # 发送的视频的绝对路径 154 | data['to_wxid'] = to_wxid # 对方id 155 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 156 | result = json.dumps(data) 157 | try: 158 | return requests.post(API_URL, data={"data": result}) 159 | except requests.exceptions.ConnectionError as e: 160 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 161 | 162 | 163 | def send_file_msg(robwxid, to_wxid, path): 164 | """ 165 | * 发送文件消息 166 | * 167 | * @access public 168 | * @param string robwxid 账户id,用哪个账号去发送这条消息 169 | * @param string to_wxid 对方的id,可以是群或者好友id 170 | * @param string path 文件的绝对路径 171 | * @return string json_string 172 | """ 173 | data = dict() 174 | data['type'] = 105 # Api数值(可以参考 - api列表demo) 175 | data['msg'] = path # 发送的文件的绝对路径 176 | data['to_wxid'] = to_wxid # 对方id(默认发送至来源的id,也可以发给其他人) 177 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 178 | result = json.dumps(data) 179 | try: 180 | return requests.post(API_URL, data={"data": result}) 181 | except requests.exceptions.ConnectionError as e: 182 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 183 | 184 | 185 | def send_emoji_msg(robwxid, to_wxid, path): 186 | """ 187 | * 发送动态表情 188 | * 189 | * @access public 190 | * @param string robwxid 账户id,用哪个账号去发送这条消息 191 | * @param string to_wxid 对方的id,可以是群或者好友id 192 | * @param string path 动态表情文件(通常是gif)的绝对路径 193 | * @return string json_string 194 | """ 195 | data = dict() 196 | data['type'] = 106 # Api数值(可以参考 - api列表demo) 197 | data['msg'] = path # 发送的动态表情的绝对路径 198 | data['to_wxid'] = to_wxid # 对方id(默认发送至来源的id,也可以发给其他人) 199 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 200 | result = json.dumps(data) 201 | try: 202 | return requests.post(API_URL, data={"data": result}) 203 | except requests.exceptions.ConnectionError as e: 204 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 205 | 206 | 207 | def send_link_msg(robwxid, to_wxid, title, text, target_url, pic_url): 208 | """ 209 | * 发送分享链接 210 | * 211 | * @access public 212 | * @param string robwxid 账户id,用哪个账号去发送这条消息 213 | * @param string to_wxid 对方的id,可以是群或者好友id 214 | * @param string title 链接标题 215 | * @param string text 链接内容 216 | * @param string target_url 跳转链接 217 | * @param string pic_url 图片链接 218 | * @return string json_string 219 | """ 220 | link = dict() 221 | link['title'] = title 222 | link['text'] = text 223 | link['url'] = target_url 224 | link['pic'] = pic_url 225 | 226 | # 封装返回数据结构 227 | data = dict() 228 | data['type'] = 107 # Api数值(可以参考 - api列表demo) 229 | data['msg'] = link # 发送的分享链接结构体 230 | data['to_wxid'] = to_wxid # 对方id(默认发送至来源的id,也可以发给其他人) 231 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 232 | result = json.dumps(data) 233 | try: 234 | return requests.post(API_URL, data={"data": result}) 235 | except requests.exceptions.ConnectionError as e: 236 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 237 | 238 | 239 | def send_music_msg(robwxid, to_wxid, name): 240 | """ 241 | * 发送音乐分享 242 | * 243 | * @access public 244 | * @param string robwxid 账户id,用哪个账号去发送这条消息 245 | * @param string to_wxid 对方的id,可以是群或者好友id 246 | * @param string name 歌曲名字 247 | * @return string json_string 248 | """ 249 | data = dict() 250 | data['type'] = 108 # Api数值(可以参考 - api列表demo) 251 | data['msg'] = name # 歌曲名字 252 | data['to_wxid'] = to_wxid # 对方id(默认发送至来源的id,也可以发给其他人) 253 | data['robot_wxid'] = robwxid # 账户id,用哪个账号去发送这条消息 254 | result = json.dumps(data) 255 | try: 256 | return requests.post(API_URL, data={"data": result}) 257 | except requests.exceptions.ConnectionError as e: 258 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 259 | 260 | 261 | def get_robot_name(robwxid): 262 | """ 263 | * 取指定登录账号的昵称 264 | * 265 | * @access public 266 | * @param string robwxid 账户id 267 | * @return string 账号昵称 268 | """ 269 | data = dict() 270 | data['type'] = 201 # Api数值(可以参考 - api列表demo) 271 | data['robot_wxid'] = robwxid # 账户id 272 | result = json.dumps(data) 273 | try: 274 | return requests.post(API_URL, data={"data": result}) 275 | except requests.exceptions.ConnectionError as e: 276 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 277 | 278 | 279 | def get_robot_headimgurl(robwxid): 280 | """ 281 | * 取指定登录账号的头像 282 | * 283 | * @access public 284 | * @param string robwxid 账户id 285 | * @return string 头像http地址 286 | """ 287 | data = dict() 288 | data['type'] = 202 # Api数值(可以参考 - api列表demo) 289 | data['robot_wxid'] = robwxid # 账户id 290 | result = json.dumps(data) 291 | try: 292 | return requests.post(API_URL, data={"data": result}) 293 | except requests.exceptions.ConnectionError as e: 294 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 295 | 296 | 297 | def get_logged_account_list(): 298 | """ 299 | * 取登录账号列表 300 | * 301 | * @access public 302 | * @param string robwxid 账户id 303 | * @return string 当前框架已登录的账号信息列表 304 | """ 305 | data = dict() 306 | data['type'] = 203 # Api数值(可以参考 - api列表demo) 307 | result = json.dumps(data) 308 | try: 309 | return requests.post(API_URL, data={"data": result}) 310 | except requests.exceptions.ConnectionError as e: 311 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 312 | 313 | 314 | def get_friend_list(robwxid='', is_refresh=0): 315 | """ 316 | * 取好友列表 317 | * 318 | * @access public 319 | * @param string robwxid 账户id 320 | * @param string is_refresh 是否刷新 321 | * @return string 当前框架已登录的账号信息列表 322 | """ 323 | data = dict() 324 | data['type'] = 204 # Api数值(可以参考 - api列表demo) 325 | data['robot_wxid'] = robwxid # 账户id(可选,如果填空字符串,即取所有登录账号的好友列表,反正取指定账号的列表) 326 | data['is_refresh'] = is_refresh # 是否刷新列表,0 从缓存获取 / 1 刷新并获取 327 | result = json.dumps(data) 328 | try: 329 | ret_data = requests.post(API_URL, data=result).text # 获取数据 330 | ret_json = json.loads(ret_data) # 格式化提取数据 331 | ret_list = requests.utils.unquote(ret_json["data"]) # 对获取的数据进行解码 332 | return json.loads(ret_list) # 对解码后的数据返回list 333 | except requests.exceptions.ConnectionError as e: 334 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 335 | 336 | 337 | def get_group_list(robwxid='', is_refresh=0): 338 | """ 339 | * 取群聊列表 340 | * 341 | * @access public 342 | * @param string robwxid 账户id 343 | * @param string is_refresh 是否刷新 344 | * @return string 当前框架已登录的账号信息列表 345 | """ 346 | data = dict() 347 | data['type'] = 205 # Api数值(可以参考 - api列表demo) 348 | data['robot_wxid'] = robwxid # 账户id(可选,如果填空字符串,即取所有登录账号的好友列表,反正取指定账号的列表) 349 | data['is_refresh'] = is_refresh # 是否刷新列表,0 从缓存获取 / 1 刷新并获取 350 | result = json.dumps(data) 351 | try: 352 | return requests.post(API_URL, data={"data": result}) 353 | except requests.exceptions.ConnectionError as e: 354 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 355 | 356 | 357 | def get_group_member_list(robwxid, group_wxid, is_refresh=0): 358 | """ 359 | * 取群成员列表 360 | * 361 | * @access public 362 | * @param string robwxid 账户id 363 | * @param string group_wxid 群id 364 | * @param string is_refresh 是否刷新 365 | * @return string 当前框架已登录的账号信息列表 366 | """ 367 | data = dict() 368 | data['type'] = 206 # Api数值(可以参考 - api列表demo) 369 | data['robot_wxid'] = robwxid # 账户id 370 | data['group_wxid'] = group_wxid # 群id 371 | data['is_refresh'] = is_refresh # 是否刷新列表,0 从缓存获取 / 1 刷新并获取 372 | result = json.dumps(data) 373 | try: 374 | ret_data = requests.post(API_URL, data=result).text # 获取数据 375 | ret_json = json.loads(ret_data) # 格式化提取数据 376 | ret_list = requests.utils.unquote(ret_json["data"]) # 对获取的数据进行解码 377 | return json.loads(ret_list) # 对解码后的数据返回list 378 | except requests.exceptions.ConnectionError as e: 379 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 380 | 381 | 382 | def get_group_member(robwxid, group_wxid, member_wxid): 383 | """ 384 | * 取群成员资料 385 | * 386 | * @access public 387 | * @param string robwxid 账户id 388 | * @param string group_wxid 群id 389 | * @param string member_wxid 群成员id 390 | * @return string json_string 391 | """ 392 | data = dict() 393 | data['type'] = 207 # Api数值(可以参考 - api列表demo) 394 | data['robot_wxid'] = robwxid # 账户id,取哪个账号的资料 395 | data['group_wxid'] = group_wxid # 群id 396 | data['member_wxid'] = member_wxid # 群成员id 397 | result = json.dumps(data) 398 | result = json.dumps(data) 399 | try: 400 | return requests.post(API_URL, data={"data": result}) 401 | except requests.exceptions.ConnectionError as e: 402 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 403 | 404 | 405 | def accept_transfer(robwxid, friend_wxid, json_string): 406 | """ 407 | * 接收好友转账 408 | * 409 | * @access public 410 | * @param string robwxid 账户id 411 | * @param string friend_wxid 朋友id 412 | * @param string json_string 转账事件原消息 413 | * @return string json_string 414 | """ 415 | data = dict() 416 | data['type'] = 301 # Api数值(可以参考 - api列表demo) 417 | data['robot_wxid'] = robwxid # 账户id 418 | data['friend_wxid'] = friend_wxid # 朋友id 419 | data['msg'] = json_string # 转账事件原消息 420 | result = json.dumps(data) 421 | try: 422 | return requests.post(API_URL, data={"data": result}) 423 | except requests.exceptions.ConnectionError as e: 424 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 425 | 426 | 427 | def agree_group_invite(robwxid, json_string): 428 | """ 429 | * 同意群聊邀请 430 | * 431 | * @access public 432 | * @param string robwxid 账户id 433 | * @param string json_string 同步消息事件中群聊邀请原消息 434 | * @return string json_string 435 | """ 436 | data = dict() 437 | data['type'] = 302 # Api数值(可以参考 - api列表demo) 438 | data['robot_wxid'] = robwxid # 账户id 439 | data['msg'] = json_string # 同步消息事件中群聊邀请原消息 440 | result = json.dumps(data) 441 | try: 442 | return requests.post(API_URL, data={"data": result}) 443 | except requests.exceptions.ConnectionError as e: 444 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 445 | 446 | 447 | def agree_friend_verify(robwxid, json_string): 448 | """ 449 | * 同意好友请求 450 | * 451 | * @access public 452 | * @param string robwxid 账户id 453 | * @param string json_string 好友请求事件中原消息 454 | * @return string json_string 455 | """ 456 | data = dict() 457 | data['type'] = 303 # Api数值(可以参考 - api列表demo) 458 | data['robot_wxid'] = robwxid # 账户id 459 | data['msg'] = json_string # 好友请求事件中原消息 460 | result = json.dumps(data) 461 | try: 462 | return requests.post(API_URL, data={"data": result}) 463 | except requests.exceptions.ConnectionError as e: 464 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 465 | 466 | 467 | def modify_friend_note(robwxid, friend_wxid, note): 468 | """ 469 | * 修改好友备注 470 | * 471 | * @access public 472 | * @param string robwxid 账户id 473 | * @param string friend_wxid 好友id 474 | * @param string note 新备注(空字符串则是删除备注) 475 | * @return string json_string 476 | """ 477 | data = dict() 478 | data['type'] = 304 # Api数值(可以参考 - api列表demo) 479 | data['robot_wxid'] = robwxid # 账户id 480 | data['friend_wxid'] = friend_wxid # 朋友id 481 | data['note'] = note # 新备注(空字符串则是删除备注) 482 | result = json.dumps(data) 483 | try: 484 | return requests.post(API_URL, data={"data": result}) 485 | except requests.exceptions.ConnectionError as e: 486 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 487 | 488 | 489 | def delete_friend(robwxid, friend_wxid): 490 | """ 491 | * 删除好友 492 | * 493 | * @access public 494 | * @param string robwxid 账户id 495 | * @param string friend_wxid 好友id 496 | * @return string json_string 497 | """ 498 | data = dict() 499 | data['type'] = 305 # Api数值(可以参考 - api列表demo) 500 | data['robot_wxid'] = robwxid # 账户id 501 | data['friend_wxid'] = friend_wxid # 朋友id 502 | result = json.dumps(data) 503 | try: 504 | return requests.post(API_URL, data={"data": result}) 505 | except requests.exceptions.ConnectionError as e: 506 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 507 | 508 | 509 | def remove_group_member(robwxid, group_wxid, member_wxid): 510 | """ 511 | * 踢出群成员 512 | * 513 | * @access public 514 | * @param string robwxid 账户id 515 | * @param string group_wxid 群id 516 | * @param string member_wxid 群成员id 517 | * @return string json_string 518 | """ 519 | data = dict() 520 | data['type'] = 306 # Api数值(可以参考 - api列表demo) 521 | data['robot_wxid'] = robwxid # 账户id 522 | data['group_wxid'] = group_wxid # 群id 523 | data['member_wxid'] = member_wxid # 群成员id 524 | result = json.dumps(data) 525 | try: 526 | return requests.post(API_URL, data={"data": result}) 527 | except requests.exceptions.ConnectionError as e: 528 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 529 | 530 | 531 | def modify_group_name(robwxid, group_wxid, group_name): 532 | """ 533 | * 修改群名称 534 | * 535 | * @access public 536 | * @param string robwxid 账户id 537 | * @param string group_wxid 群id 538 | * @param string group_name 新群名 539 | * @return string json_string 540 | """ 541 | data = dict() 542 | data['type'] = 307 # Api数值(可以参考 - api列表demo) 543 | data['robot_wxid'] = robwxid # 账户id 544 | data['group_wxid'] = group_wxid # 群id 545 | data['group_name'] = group_name # 新群名 546 | result = json.dumps(data) 547 | try: 548 | return requests.post(API_URL, data={"data": result}) 549 | except requests.exceptions.ConnectionError as e: 550 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 551 | 552 | 553 | def modify_group_notice(robwxid, group_wxid, notice): 554 | """ 555 | * 修改群公告 556 | * 557 | * @access public 558 | * @param string robwxid 账户id 559 | * @param string group_wxid 群id 560 | * @param string notice 新公告 561 | * @return string json_string 562 | """ 563 | data = dict() 564 | data['type'] = 308 # Api数值(可以参考 - api列表demo) 565 | data['robot_wxid'] = robwxid # 账户id 566 | data['group_wxid'] = group_wxid # 群id 567 | data['notice'] = notice # 新公告 568 | result = json.dumps(data) 569 | try: 570 | return requests.post(API_URL, data={"data": result}) 571 | except requests.exceptions.ConnectionError as e: 572 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 573 | 574 | 575 | def building_group(robwxid, friends): 576 | """ 577 | * 建立新群 578 | * 579 | * @access public 580 | * @param string robwxid 账户id 581 | * @param array friends 三个人及以上的好友id数组,['wxid_1xxx', 'wxid_2xxx', 'wxid_3xxx', 'wxid_4xxx'] 582 | * @return string json_string 583 | """ 584 | data = dict() 585 | data['type'] = 309 # Api数值(可以参考 - api列表demo) 586 | data['robot_wxid'] = robwxid # 账户id 587 | data['friends'] = friends # 好友id数组 588 | result = json.dumps(data) 589 | try: 590 | return requests.post(API_URL, data={"data": result}) 591 | except requests.exceptions.ConnectionError as e: 592 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 593 | 594 | 595 | def quit_group(robwxid, group_wxid): 596 | """ 597 | * 退出群聊 598 | * 599 | * @access public 600 | * @param string robwxid 账户id 601 | * @param string group_wxid 群id 602 | * @return string json_string 603 | """ 604 | data = dict() 605 | data['type'] = 310 # Api数值(可以参考 - api列表demo) 606 | data['robot_wxid'] = robwxid # 账户id 607 | data['group_wxid'] = group_wxid # 群id 608 | result = json.dumps(data) 609 | try: 610 | return requests.post(API_URL, data={"data": result}) 611 | except requests.exceptions.ConnectionError as e: 612 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 613 | 614 | 615 | def invite_in_group(robwxid, group_wxid, friend_wxid): 616 | """ 617 | * 邀请加入群聊 618 | * 619 | * @access public 620 | * @param string robwxid 账户id 621 | * @param string group_wxid 群id 622 | * @param string friend_wxid 好友id 623 | * @return string json_string 624 | """ 625 | data = dict() 626 | data['type'] = 311 # Api数值(可以参考 - api列表demo) 627 | data['robot_wxid'] = robwxid # 账户id 628 | data['group_wxid'] = group_wxid # 群id 629 | data['friend_wxid'] = friend_wxid # 好友id 630 | result = json.dumps(data) 631 | try: 632 | return requests.post(API_URL, data={"data": result}) 633 | except requests.exceptions.ConnectionError as e: 634 | raise ConnectionError(f"请检查当前的回复地址是否正确! {API_URL}") 635 | 636 | 637 | def sendSGHttp(url, params, method='get', timeout=3): 638 | """ 639 | * 执行一个 HTTP 请求,仅仅是post组件,其他语言请自行替换即可 640 | * 641 | * @param string url 执行请求的url地址 642 | * @param mixed params 表单参数 643 | * @param int timeout 超时时间 644 | * @param string method 请求方法 post / get 645 | * @return array 结果数组 646 | """ 647 | if url is None: 648 | return None 649 | ret = None 650 | err = None 651 | if method.lower() == "get": 652 | try: 653 | ret = requests.get(url, data=params, timeout=timeout).text 654 | except Exception as e: 655 | err = e 656 | else: 657 | try: 658 | ret = requests.post(url, data=params, timeout=timeout).text 659 | except Exception as e: 660 | err = e 661 | data = {"result": ret, "error_msg": err} 662 | return data 663 | -------------------------------------------------------------------------------- /demoMain.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, jsonify 2 | from api import * 3 | import socket 4 | 5 | ip_address = socket.getfqdn(socket.gethostname()) 6 | Local_Addr = socket.gethostbyname(ip_address) 7 | 8 | """ 9 | 【事件数值】 【事件描述】 10 | 100 私聊消息 11 | 200 群聊消息 12 | 300 暂无 13 | 400 群成员增加 14 | 410 群成员减少 15 | 500 收到好友请求 16 | 600 二维码收款 17 | 700 收到转账 18 | 800 软件开始启动 19 | 900 新的账号登录完成 20 | 910 账号下线 21 | """ 22 | 23 | app = Flask(__name__) 24 | 25 | 26 | @app.route("/", methods=["POST", "GET"]) 27 | def index(): 28 | if request.method == "POST": 29 | wx_type = request.form.get("type") # 数据类型 30 | msg = request.form.get("msg") # 发送内容 31 | to_wxid = request.form.get("from_wxid") # 1级来源id(比如发消息的人的id) 32 | from_name = request.form.get("from_name") # 1级来源昵称(比如发消息的人昵称) 33 | final_from_wxid = request.form.get("final_from_wxid") # 2级来源id(群消息事件下,1级来源为群id,2级来源为发消息的成员id,私聊事件下都一样) 34 | final_nickname = request.form.get("final_from_name") # 2级来源昵称 35 | robot_wxid = request.form.get("robot_wxid") # 当前登录的账号(机器人)标识id 36 | parameters = request.form.get("parameters") # 附加参数(暂未用到,请忽略) 37 | ws_time = request.form.get("time") # 请求时间(时间戳10位版本) 38 | try: 39 | file_url = request.form.get("file_url") # 如果是文件消息(图片、语音、视频、动态表情),这里则是可直接访问的网络地址,非文件消息时为空 40 | except: 41 | raise TypeError("请使用 http-api 2.4+以上的版本") 42 | 43 | if wx_type == "100": 44 | send_text_msg(robot_wxid, to_wxid, "Hello") 45 | elif wx_type == "200": # 群聊消息 46 | send_group_at_msg(robot_wxid, to_wxid, final_from_wxid, final_nickname, "Hello!请加我私聊") 47 | else: 48 | pass 49 | else: 50 | return f"GET访问测试页面,本机地址 http://{Local_Addr}" # 此处的测试地址应该是http://localhost:8074/复制到可爱猫功能-》HTTP多语言对-》消息回调地址 51 | return jsonify({"code": 200, "data": "result ok"}) 52 | 53 | 54 | if __name__ == '__main__': 55 | app.run(host="0.0.0.0", port=8074, debug=True) 56 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==0.12 2 | requests==2.20.0 --------------------------------------------------------------------------------