如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。以下是功能简单实现的代码范例
首先理解微信获取用户信息的业务流程
首先看微信开发者文档 这方面的教程 网页授权获取用户基本信息 http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html
按照里面的步骤 走完一遍 可以参考我下面的范例代码。步骤如下
1.首先配置回调域名。
注意域名的填写 ,如果你要让用户进入的链接为 http//www.qq.com 那么这个回调域名就要是www.qq.com
如果是http//www.qq.com/asd 那么回调域名也写 www.qq.com
3 编写链接: 格式为 https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的appi&redirect_uri=你的链接&response_type=code&scope=snsapi_userinfowechat_redirect
注意 其中链接要经过urlencode进行编码后 在填上去。下图是具体意义
下面是链接到 http://1.625124155.applinzi.com/index 的写法:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx304c584bf4e8d0c5&redirect_uri=http%3a%2f%2f1.625124155.applinzi.com%2findex&response_type=code&scope=snsapi_userinfowechat_redirect
找到了这个链接后,微信用户通过这个链接进入网址 微信就会返回我们code值。有了code 我们就能继续下面的步骤
。下面是后台处理用户进入网页后,如何通过code获取用户信息
注意 :
r = urllib2.urlopen('https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx304c584bf4e8d0c5&secret=a76395a3e481fee16d5cd8b011c63a4c&code='+ CODE + '&grant_type=authorization_code') c = r.read()
这个url 不要有空格,在微信教程里面复制的url有好多空格。注意要把空格去掉
# -*- coding=utf-8 -*- import time from flask import Flask,g,request,make_response,render_template import hashlib import xml.etree.ElementTree as ET import urllib2 import json app = Flask(__name__) app.debug=True @app.route('/',methods=['GET','POST']) def wechat_auth(): if request.method == 'GET': token='123456' #微信配置所需的token data = request.args signature = data.get('signature','') timestamp = data.get('timestamp','') nonce = data.get('nonce','') echostr = data.get('echostr','') s = [timestamp,nonce,token] s.sort() s = ''.join(s) if (hashlib.sha1(s).hexdigest() == signature): return make_response(echostr) else: rec = request.stream.read() xml_rec = ET.fromstring(rec) tou = xml_rec.find('ToUserName').text fromu = xml_rec.find('FromUserName').text content = xml_rec.find('Content').text xml_rep = "" response = make_response(xml_rep % (fromu,tou,str(int(time.time())), content)) response.content_type='application/xml' return response CODE = request.args.get('code') r = urllib2.urlopen('https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx304c584bf4e8d0c5&secret=a76395a3e481fee16d5cd8b011c63a4c&code='+ CODE + '&grant_type=authorization_code')#将code输入并请求这个链接,会获得返回的一个json值 c = r.read() b = json.loads(c)#将获得的json值转码为python格式 if b != None: return b['openid'] else: return '空的' if __name__ == '__main__': app.run() %s 0
这最后获取的是openid 其他的没有从字典提取出。字典中包涵的字段如下
如果要提取具体信息。可继续按照官方文档继续步骤 。 网址 http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html