您的位置:首页 > 移动开发 > 微信开发

微信web常用接口

2017-05-03 00:00 239 查看
因为项目需要,我用python研究了基于http的微信接口。

其实,常用的接口,各大社区和论坛都有详细的介绍和说明了,在这些有不提了。

我说下,发送图片的功能。

首先,发送图片的思想是,先把图片上传到微信服务器上,服务器返回MediaId,接着调发送信息接口。

详细:

1.图片上传到微信服务器:

url:https://file2.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json

python代码:

# 上传图片到微信服务器上
def webwxuploadmedia(image_name,cookie):
global media_count
# print('-----cookie------->>'+cookie)
url = 'https://file2.wx.qq.com/cgi-bin/mmwebwx-bin/webwxuploadmedia?f=json'
# 计数器
media_count = media_count + 1
# 文件名
file_name = image_name
# MIME格式
# mime_type = application/pdf, image/jpeg, image/png, etc.
mime_type = mimetypes.guess_type(image_name, strict=False)[0]
# 微信识别的文档格式,微信服务器应该只支持两种类型的格式。pic和doc
# pic格式,直接显示。doc格式则显示为文件。
media_type = 'pic' if mime_type.split('/')[0] == 'image' else 'doc'
# 上一次修改日期
lastModifieDate = 'Thu Mar 17 2017 00:55:10 GMT+0800 (CST)'
# 文件大小
file_size = os.path.getsize(file_name)
# PassTicket
# pass_ticket = pass_ticket
# clientMediaId
client_media_id = str(int(time.time() * 1000)) + \
str(random.random())[:5].replace('.', '')
# webwx_data_ticket
webwx_data_ticket = ''
# for item in cookie:
#     if item.name == 'webwx_data_ticket':
#         webwx_data_ticket = item.value
#         break
# if (webwx_data_ticket == ''):
#     return "None Fuck Cookie"

uploadmediarequest = json.dumps({
"BaseRequest": BaseRequest,
"ClientMediaId": client_media_id,
"TotalLen": file_size,
"StartPos": 0,
"DataLen": file_size,
"MediaType": 4
}, ensure_ascii=False).encode('utf8')

multipart_encoder = MultipartEncoder(
fields={
'id': 'WU_FILE_' + str(media_count),
'name': file_name,
'type': mime_type,
'lastModifieDate': lastModifieDate,
'size': str(file_size),
'mediatype': media_type,
'uploadmediarequest': uploadmediarequest,
'webwx_data_ticket': webwx_data_ticket,
'pass_ticket': pass_ticket,
'filename': (file_name, open(file_name, 'rb'), mime_type.split('/')[1])
},
boundary='-----------------------------1575017231431605357584454111'
)

headers = {
'Host': 'file2.wx.qq.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko/20100101 Firefox/42.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Referer': 'https://wx2.qq.com/',
'Content-Type': multipart_encoder.content_type,
'Origin': 'https://wx2.qq.com',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache'
}

r = requests.post(url, data=multipart_encoder, headers=headers)
# r = urllib.request.Request(url, data=multipart_encoder, headers=headers)
response_json = r.json()
if response_json['BaseResponse']['Ret'] == 0:
return response_json
return None

参数说明:

cookie:http.cookiejar.CookieJar()

BaseRequest: {
'Uin': int(wxuin),
'Sid': wxsid,
'Skey': skey,
'DeviceID': deviceId,
}

返回数据:

{
"BaseResponse": {
"Ret": 1,
"ErrMsg": ""
}
,
"MediaId": "XXXXXXXXXXXXXXXXXXXX看起来想乱码的东西",
"StartPos": 13243,
"CDNThumbImgHeight": 34,
"CDNThumbImgWidth": 42
}

2.发送图片

# 发送图片
def webwxsendmsgimg(MyUserName, ToUserName, media_id):
url = 'https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsgimg?fun=async&f=json&pass_ticket=%s' % (pass_ticket)
clientMsgId = str(int(time.time() * 1000)) + \
str(random.random())[:5].replace('.', '')
data_json = {
"BaseRequest": BaseRequest,
"Msg": {
"Type": 3,
"MediaId": media_id,
"FromUserName": MyUserName,
"ToUserName": ToUserName,
"LocalID": clientMsgId,
"ClientMsgId": clientMsgId
}
}
headers = {'content-type': 'application/json; charset=UTF-8'}
data = json.dumps(data_json, ensure_ascii=False).encode('utf8')
r = urllib.request.Request(url, data=data, headers=headers)
# r = requests.post(url, data=data, headers=headers)
dic = r.json()
return dic['BaseResponse']['Ret'] == 0

参数说明:

media_id:上传图片成功返回的数据

BaseRequest: {
'Uin': int(wxuin),
'Sid': wxsid,
'Skey': skey,
'DeviceID': deviceId,
}

先看,获取好友列表返回的一条数据:

{'PYQuanPin': 'test22', 'EncryChatRoomId': '', 'KeyWord': '', 'ChatRoomId': 0, 'MemberList': [], 'Sex': 0, 'City': '', 'OwnerUin': 0, 'SnsFlag': 0, 'Uin': 0, 'Province': '', 'HideInputBarFlag': 0, 'StarFriend': 0, 'AttrStatus': 0, 'Alias': '', 'Statues': 1, 'Signature': '', 'MemberCount': 0, 'HeadImgUrl': '/cgi-bin/mmwebwx-bin/webwxgetheadimg?seq=657299195&username=@@af75b2f842c9805c8263ebed075e0623d5113d0e1790ea7a2663992220de03fe&skey=@crypt_5dd98d25_c7d4661fb1a13d196200f0eab0e004ee', 'NickName': 'test22', 'UserName': '@@af75b2f842c9805c8263ebed075e0623d5113d0e1790ea7a2663992220de03fe', 'PYInitial': 'TEST22', 'UniFriend': 0, 'RemarkPYQuanPin': '', 'IsOwner': 1, 'RemarkName': '', 'VerifyFlag': 0, 'AppAccountFlag': 0, 'RemarkPYInitial': '', 'DisplayName': '', 'ContactFlag': 3}

MyUserName:这里的参数MyUserName是自己信息中的'UserName'

ToUserName:ToUserName你要发送好友信息中的'UserName'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WeiXinSDK Python