├── .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 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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
--------------------------------------------------------------------------------