需要了解的几个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

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

用户同意授权后访问的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)

我这里用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":"",
"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")
def index():
"""让用户微信访问的网页页面视图"""
# 从微信服务器中拿取用户 的资料
# 1.拿取code参数
code = request.args.get("code")
# print(1, code)
if not code:
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" in resp_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" in user_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;
}
}

python flask获取微信用户信息流程的更多相关文章

  1. python flask获取微信用户信息报404,nginx问题

    在学习flask与微信公众号时问题,发现测试自动回复/wechat8008时正常,而测试获取微信用户信息/wechat8008/index时出现404.查询资料后收发是nginx配置问题. 在loca ...

  2. Magicodes.WeiChat——使用OAuth 2.0获取微信用户信息

    使用Magicodes.WeiChat,可以很方便的获取到微信用户的信息.在使用OAuth 2.0之前,你先需要做以下操作: 1)在开发者中心修改[网页授权获取用户基本信息],在弹出的界面输入自己的根 ...

  3. 小白学react之网页获取微信用户信息

    通过上一篇<小白学react之EJS模版实战>我们学习了怎样通过EJS模版生成我们高定制化的index.html文件. 本篇我们将会继续延续我们的alt-tutorial项目的实战计划.去 ...

  4. SpringBoot中获取微信用户信息从未如此简单!

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  5. java、JavaScript获取微信用户信息登录优化方案

    1.获取微信用户信息要调用微信的好几个接口,再加上自己系统的接口就会变的很慢,影响用户体验,之前走过的弯路我就不赘述了,直接说新的方案. 2.第一步都是向微信发起获取用户code请求: 请求接口:ht ...

  6. Python 实现获取微信好友信息

    最近用闲余时间看了点python,在网上冲浪时发现有不少获取微信好友信息的博客,对此比较感兴趣,于是自己敲了敲顺便记录下来. 一.使用 wxpy 模块库获取好友男比例信息和城市分布. # -*- co ...

  7. php获取微信用户信息(没测试过)

    <?php /** * 通过$appid.$appsecret获得基础支持的接口唯一凭证access_token,返回值为array类型 */ function get_access_token ...

  8. Python之获取微信好友信息

    save_info.py: #!/usr/bin/python # -*- coding: UTF-8 -*- import itchat import pickle itchat.auto_logi ...

  9. Java 微信登录授权后获取微信用户信息昵称乱码问题解决

    String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_toke ...

随机推荐

  1. 采购发票检验MIRO差异科目设置

    采购订单发票检验时,最终的金额可能跟采购订单的价格不一样,对于这部分差异,系统提供了后台配置科目的方式. 配置科目可通过OBYC,在BSX存货差异配置相关评估类型对应科目. 当库存商品少于采购订单数量 ...

  2. Kerberos原理和基础小结

    此篇文章仅做Kerberos的基本原理和基本使用做说明,本人对Kerberos了解有限,也是通过大量英文文档中翻译过来, 加上自己对Kerberos的理解所写,本人英文太菜,看文档看的头昏眼花若有写的 ...

  3. 文件cp功能

    #include<stdio.h> #include<unistd.h> #include<fcntl.h> #include<string.h> in ...

  4. 数据结构 - 静态顺序线性表的实行(C语言)

    数据结构 - 静态顺序线性表的实行(C语言) 1 获取元素操作 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,其实是非常简单的. 只要i的数值在 ...

  5. “玲珑杯”第七届郑州轻工业学院ACM程序设计大赛 ------- D:社交网络

    题目链接: http://acm.zzuli.edu.cn/problem.php?cid=1099&pid=3 题目大意: 国语题目,题意显而易见, 解题思路: 只需要对每一个节点进行假设, ...

  6. A Simple Task CodeForces - 11D

    A Simple Task CodeForces - 11D 题意:输出一个无向图的简单环数量.简单环指无重复边的环.保证图无重边自环. ans[i][j]表示"包含i中的点,以i中第一个点 ...

  7. 222 Count Complete Tree Nodes 完全二叉树的节点个数

    给出一个完全二叉树,求出该树的节点个数.完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底层为第 h ...

  8. APP热修复

    APP热修复的概念: APP修复是针对修复app中的bug场景来定义的.当我们已上线的app出现bug的时候,我们想在用户不知情的情况下修复这个bug,那么就会用到热修复. APP热修复的实现原理: ...

  9. 转】在Ubuntu中安装Cassandra

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/ 感谢! Posted: Mar 22, 2014 Tags: cas ...

  10. 【Hibernate】Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

    今天用hibernate框架写crm项目时遇到报错: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' n ...