flask 微信公众号 网页授权获取用户基本信息

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。以下是功能简单实现的代码范例


首先理解微信获取用户信息的业务流程

flask 微信公众号 网页授权获取用户基本信息_第1张图片




首先看微信开发者文档  这方面的教程  网页授权获取用户基本信息    http://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html

按照里面的步骤 走完一遍   可以参考我下面的范例代码。步骤如下


1.首先配置回调域名。 

flask 微信公众号 网页授权获取用户基本信息_第2张图片



flask 微信公众号 网页授权获取用户基本信息_第3张图片


注意域名的填写 ,如果你要让用户进入的链接为 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_userinfo&#wechat_redirect

注意   其中链接要经过urlencode进行编码后  在填上去。下图是具体意义

flask 微信公众号 网页授权获取用户基本信息_第4张图片



下面是链接到 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_userinfo&#wechat_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 = "%s0"
        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()

这最后获取的是openid  其他的没有从字典提取出。字典中包涵的字段如下

如果要提取具体信息。可继续按照官方文档继续步骤 。 网址  http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

























你可能感兴趣的:(微信公众号开发)