求教微信公共平台第三方接口python实现,无法返回数据给客户端?咋整?

def weixin(request):
	try: # 微信接口认证 使用GET方式
		if request.method == 'GET':
			token = 'air2you'
			tmpArr =[token, request.GET['timestamp'], request.GET['nonce']]
			tmpArr.sort()
			tmpArr.sort()
			tmpStr = ''.join(tmpArr)
			code = hashlib.sha1(tmpStr).hexdigest()
			if code  == request.GET['signature']:
				return render_to_response('air/weixin.html',{'echostr':request.GET['echostr']})		
			else: 
				return render_to_response('air/weixin.html',{'echostr':''})
		# 微信接口通讯 返回用户需要数据
		elif request.method == 'POST':
			xml = et.fromstring(request.raw_post_data)
			_to = xml.find('FromUserName').text
			_from = xml.find('ToUserName').text
			_content = 'welcome!'
			_type = 'text'
			return render_to_response('air/weixin.xml',{'_to':_to, '_from': _from, '_time' : int(time.time()), '_type': _type, '_content' : _content}, mimetype='application/xml')
	except Exception, e:
		return render_to_response('air/weixin.html',{'echostr':''})
#weixin.xml<xml><ToUserName><![CDATA[{{ _to }}]]></ToUserName><FromUserName><![CDATA[{{ _from }}]]></FromUserName><CreateTime>{{ _time }}</CreateTime><MsgType><![CDATA[{{ _type }}]]></MsgType><Content><![CDATA[{{ _content }}]]></Content><FuncFlag>0</FuncFlag></xml>


慕姐4208626
浏览 118回答 2
2回答

偶然的你

添加一个response header试试: content_type = 'application/xml'

HUWWW

#!&nbsp;/usr/bin/env&nbsp;python#&nbsp;coding=utf-8__author__&nbsp;=&nbsp;'jszhou'from&nbsp;bottle&nbsp;import&nbsp;*import&nbsp;hashlibimport&nbsp;xml.etree.ElementTree&nbsp;as&nbsp;ETimport&nbsp;urllib2#&nbsp;import&nbsp;requestsimport&nbsp;json&nbsp; &nbsp; @get("/")def&nbsp;checkSignature(): &nbsp;&nbsp;&nbsp;&nbsp;token&nbsp;=&nbsp;"****" &nbsp;&nbsp;&nbsp;&nbsp;signature&nbsp;=&nbsp;request.GET.get('signature',&nbsp;None)&nbsp;&nbsp;#&nbsp;拼写不对害死人那,把signature写成singnature,直接导致怎么也认证不成功 &nbsp;&nbsp;&nbsp;&nbsp;timestamp&nbsp;=&nbsp;request.GET.get('timestamp',&nbsp;None) &nbsp;&nbsp;&nbsp;&nbsp;nonce&nbsp;=&nbsp;request.GET.get('nonce',&nbsp;None) &nbsp;&nbsp;&nbsp;&nbsp;echostr&nbsp;=&nbsp;request.GET.get('echostr',&nbsp;None) &nbsp;&nbsp;&nbsp;&nbsp;tmpList&nbsp;=&nbsp;[token,&nbsp;timestamp,&nbsp;nonce] &nbsp;&nbsp;&nbsp;&nbsp;tmpList.sort() &nbsp;&nbsp;&nbsp;&nbsp;tmpstr&nbsp;=&nbsp;"%s%s%s"&nbsp;%&nbsp;tuple(tmpList) &nbsp;&nbsp;&nbsp;&nbsp;hashstr&nbsp;=&nbsp;hashlib.sha1(tmpstr).hexdigest()&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;return&nbsp;"echostr:&nbsp;%s"&nbsp;%&nbsp;echostr &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;hashstr&nbsp;==&nbsp;signature:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;echostr&nbsp;&nbsp;&nbsp;&nbsp;else:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;None &nbsp; &nbsp;def&nbsp;parse_msg(): &nbsp;&nbsp;&nbsp;&nbsp;recvmsg&nbsp;=&nbsp;request.body.read() &nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;ET.fromstring(recvmsg) &nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;child&nbsp;in&nbsp;root: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg[child.tag]&nbsp;=&nbsp;child.text&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;msg&nbsp; &nbsp; def&nbsp;query_movie_info(): &nbsp;&nbsp;&nbsp;&nbsp;movieurlbase&nbsp;=&nbsp;"http://api.douban.com/v2/movie/subject/" &nbsp;&nbsp;&nbsp;&nbsp;DOUBAN_APIKEY&nbsp;=&nbsp;"******" &nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;=&nbsp;parse_msg() &nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;=&nbsp;'%s%s?apikey=%s'&nbsp;%&nbsp;(movieurlbase,&nbsp;id["Content"],&nbsp;DOUBAN_APIKEY)&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;header&nbsp;=&nbsp;{'Referer':&nbsp;url,&nbsp;'Content-Type':&nbsp;'application/json'} &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;resp&nbsp;=&nbsp;requests.get(url=url,&nbsp;headers=header) &nbsp;&nbsp;&nbsp;&nbsp;resp&nbsp;=&nbsp;urllib2.urlopen(url) &nbsp;&nbsp;&nbsp;&nbsp;movie&nbsp;=&nbsp;json.loads(resp.read()) &nbsp;&nbsp;&nbsp;&nbsp;info&nbsp;=&nbsp;movie['title']&nbsp;+&nbsp;':&nbsp;'&nbsp;+&nbsp;''.join(movie['summary'])&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;info&nbsp; &nbsp; @post("/")def&nbsp;response_msg():&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;拿到Post过来的数据 &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;分析数据(拿到FromUserName、ToUserName、CreateTime、MsgType和content) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;构造回复信息(将其中content变为返回给用户的信息) &nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;parse_msg() &nbsp;&nbsp;&nbsp;&nbsp;textTpl&nbsp;=&nbsp;"""<xml> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<ToUserName><![CDATA[%s]]></ToUserName> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FromUserName><![CDATA[%s]]></FromUserName> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<CreateTime>%s</CreateTime> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<MsgType><![CDATA[%s]]></MsgType> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<Content><![CDATA[%s]]></Content> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FuncFlag>0</FuncFlag> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</xml>""" &nbsp;&nbsp;&nbsp;&nbsp;Content&nbsp;=&nbsp;query_movie_info()&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;if&nbsp;Content&nbsp;is&nbsp;not&nbsp;False: &nbsp;&nbsp;&nbsp;&nbsp;echostr&nbsp;=&nbsp;textTpl&nbsp;%&nbsp;(msg['FromUserName'],&nbsp;msg['ToUserName'],&nbsp;str(int(time.time())),&nbsp;msg['MsgType'],&nbsp;Content)&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;echostr&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echostr&nbsp;=&nbsp;textTpl&nbsp;%&nbsp;(msg['FromUserName'],&nbsp;msg['ToUserName'],&nbsp;str(int(time.time())),&nbsp;msg['MsgType'],&nbsp;"Content") &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;echostr &nbsp;if&nbsp;__name__&nbsp;==&nbsp;"__main__":&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Interactive&nbsp;mode &nbsp;&nbsp;&nbsp;&nbsp;debug(True) &nbsp;&nbsp;&nbsp;&nbsp;run(host='127.0.0.1',&nbsp;port=8888,&nbsp;reloader=True)else:&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Mod&nbsp;WSGI&nbsp;launch &nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;sae &nbsp;&nbsp;&nbsp;&nbsp;debug(True) &nbsp;&nbsp;&nbsp;&nbsp;os.chdir(os.path.dirname(__file__)) &nbsp;&nbsp;&nbsp;&nbsp;app&nbsp;=&nbsp;default_app() &nbsp;&nbsp;&nbsp;&nbsp;application&nbsp;=&nbsp;sae.create_wsgi_app(app)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python