python web服务器怎么获取用户信息_python flask获取微信用户信息流程

需要了解的几个url

用户第一次访问时的url,包含以下几个参数

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http%3A//www.example.com/wechat8008/index&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect

1473830-20190126184344387-655103459.png

下图为scope等于snsapi_userinfo时的授权页面:

1473830-20190126201603442-1326557553.png

用户同意授权后访问的url,该url会访问你的视图函数

http://www.example.com/wechat8008/index?code=021ci0np18bW0j0IpHnp1eXGmp1ci0ns&state=1

如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE

以上是同意授权的示例url,该url会访问你的视图函数,只需要留意获取code参数

通过code换取网页授权access_token的请求url

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

该url包含4个参数:

其中appid和secret在填写你自己公众号设置里的的实际参数,

code是前面访问时带过来的url参数,获取之code = request.args.get("code")

grant_type=authorization_code固定写法

url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code" % (WECHAT_APPID, WECHAT_APPSECRET, code)

1473830-20190126190506171-1466959349.png

我这里用urllib2发送请求  response = urllib2.urlopen(url)

返回值为一个响应体数据,解析之resp_dict = json.loads(response.read())

正确时返回的JSON数据包如下:

{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"snsapi_userinfo"}

拉取用户信息时的请求url

https://api.weixin.qq.com/sns/userinfo?access_token=access_token&openid=open_id&lang=zh_CN

该url包含3个参数:

access_token是上一步请求返回的参数,提取之  access_token = resp_dict.get("access_token")

open_id同上open_id = resp_dict.get("openid")

语言lang=zh_CN

url = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN" %(access_token, open_id)

同样用urllib2发送请求

response = urllib2.urlopen(url)

返回值

正确时返回的JSON数据包如下:

{"openid":"OPENID","nickname": NICKNAME,"sex":"1","province":"PROVINCE"

"city":"CITY","country":"COUNTRY","headimgurl":"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46","privilege":["PRIVILEGE1"

"PRIVILEGE2"],"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}

这里就可以根据自己的需求使用用户信息了。

视图函数代码

from flask import Flask, request, abort, render_template

import hashlib

import xmltodict

import time

import urllib2

import json

WECHAT_TOKEN = "python"

WECHAT_APPID = "wxe123456789"

WECHAT_APPSECRET = "123456789"

app = Flask(__name__)

#www.example.com/wechat8008/index

@app.route("/wechat8008/index")defindex():"""让用户微信访问的网页页面视图"""

#从微信服务器中拿取用户 的资料

#1.拿取code参数

code = request.args.get("code")#print(1, code)

if notcode:return u"缺失code参数"

#2.向微信服务器发送http请求,获取access_token

url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code" %\

(WECHAT_APPID, WECHAT_APPSECRET, code)#使用urllib2的urlopen方法发送请求

#如果只传网址url参数,则默认使用http的get请求方式,返回响应对象

response =urllib2.urlopen(url)#获取响应体数据,微信返回的json数据

json_str =response.read()

resp_dict=json.loads(json_str)#print(2, resp_dict)

#提取access_token

if "errcode" inresp_dict:return u"获取acces_token失败"access_token= resp_dict.get("access_token")

open_id= resp_dict.get("openid") #用户的编号

#3.向微信服务器发送http请求,获取用户信息

url = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN" %\

(access_token, open_id)

response=urllib2.urlopen(url)#读取微信传回的json的响应体数据

user_json_str =response.read()

user_dict_data=json.loads(user_json_str)#print(user_dict_data)

if "errcode" inuser_dict_data:return u"获取用户信息失败"

else:#将用户的资料数据填充到页面中

return render_template("index.html",user=user_dict_data)if __name__ == '__main__':

app.run(port=8008, debug=True)

需要注意的是,微信只认域名和80端口。如果你80端口已被占用,可用nginx转发一下

server {#监听80端口

listen 80;#本机

server_name localhost;location/wechat8008 {

proxy_pass http://127.0.0.1:8008;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值