另外一个账号出现一些问题,所以想在改用这个。

刚开始接触微信这方面,了解的还不够全面,写写自己的认识,希望不要见怪。既来之则安之。首先,我们要对微信开发有一个基础的概念。

具体请查看:微信公众平台中的微信网页授权

有这么一个基础的认知后,我们再开始接下来要做的。

最基础的流程:

二维码是一个url,我们扫描的过程就是一个访问的过程,这个url就是我们已经搭建好的服务器地址,经过urls.py这样一个url、后台处理模块相对应的过程,

我们开始正式进行网页授权。

第一步:用户同意授权,获取code

也就是访问这个url ='https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={redirect_url}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'

其中我们需要自己确定好的参数有:appid、redirect_url。appid是你们公众号的appid,redirect_url是我们访问上方这个url之后获取到code,处理code的这样一个回调连接。

这里给大家提供一个简单的书写方式:

1 url_tpl = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid={appid}&redirect_uri={redirect_url}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect'
2 url = url_tpl.format(appid=appid, redirect_url=redirect_url)

需要注意的是:

1、用户同意授权后,跳转的页面是redirect_url所连接的页面。

2、code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

第二步:通过code换取网页授权access_token

也就是同上的访问这个url_tpl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code'

url = url_tpl.format(appid=config.WEIXIN['appid'], secret=config.WEIXIN['secret'], code=code)

其中我们需要的参数有appid、secret、code。appid是公众号的appid, secret公众号的appsecret,code就是我们第一步操作所获取的code。

因为微信开发这方面是刚开始接触,而且是自学,我按照自己理解所想写的一段流程代码

  1 # -*- encoding:utf-8-*-
  2
  3 # vim: set ts=4 et sw=4 sts=4 fileencoding=utf-8 :
  4
  5 import os
  6 import sys
  7 import logging
  8 import time
  9 from zbase.web import core
 10 from zbase.web import template
 11 from zbase.base.dbpool import with_database
 12 import json
 13 import config
 14 import urllib2
 15 import MySQLdb
 16
 17 log = logging.getLogger()
 18
 19
 20 # 1 第一步:用户同意授权,获取code
 21 # 2 第二步:通过code换取网页授权access_token
 22 # 3 第三步:刷新access_token(如果需要)
 23 # 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
 24 # 5 附:检验授权凭证(access_token)是否有效
 25
 26 class Visit_User:
 27     def __init__(self):
 28         self.appid = 'appid'  # 公众号appid
 29         self.secret = 'secret'  # 公众号secret
 30         self.redirect_url = 'http://api.uyu.com/v1/wx/user_auth'  # 回调地址
 31
 32     def Visit_Url(self, url):  # 每次访问链接
 33         try:
 34             result = urllib2.urlopen(url).read()
 35             return result
 36         except urllib2.HTTPError, e:
 37             print e.code
 38         except urllib2.URLErrror, e:
 39             print str(e)
 40
 41     def Get_Code(self):  # 1 第一步:用户同意授权,获取code
 42         get_code_url = 'https://open.weixin.qq.com/sns/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect' % (
 43             self.appid, self.redirect_url)
 44         code = self.Visit_Url(get_code_url)
 45         if code:
 46             return code
 47         else:
 48             print "Failure to obtain results"
 49
 50     def Get_Access_token(self):  # 2 第二步:通过code换取网页授权access_token
 51         code = self.Get_Code()
 52         get_access_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code' % (
 53             self.appid, self.secret, code)
 54         acc_token = self.Visit_Url(get_access_url)
 55         if acc_token["errcode"]:
 56             pass
 57         if acc_token["access_token"]:
 58             # access_token = json.loads(access_token)
 59             access_token = acc_token["access_token"]
 60             expires_in = acc_token["expires_in"]
 61             refresh_token = acc_token["refresh_token"]
 62             openid = acc_token["openid"]
 63             scope = acc_token["scope"]
 64             return access_token, openid, refresh_token
 65
 66     def Refresh_Access_token(self):  # 3 第三步:刷新access_token(如果需要)
 67         yu_zu = self.Get_Access_token()
 68         refresh_token = yu_zu[2]
 69         new_access_url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s' % (
 70             self.appid, refresh_token)
 71         new_acc_token = self.Visit_Url(new_access_url)
 72         if new_acc_token["errcode"]:
 73             pass
 74         if new_acc_token["access_token"]:
 75             # access_token = json.loads(access_token)
 76             access_token = new_acc_token["access_token"]
 77             expires_in = new_acc_token["expires_in"]
 78             refresh_token = new_acc_token["refresh_token"]
 79             openid = new_acc_token["openid"]
 80             scope = new_acc_token["scope"]
 81             return access_token, openid
 82
 83     def Verify_Access_token(self):  # 验证access_token是否有效
 84         yu_zu = self.Refresh_Access_token()
 85         access_token = yu_zu[0]
 86         openid = yu_zu[1]
 87         verify_url = 'https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s ' % (
 88             access_token, openid)
 89         verify = self.Visit_Url(verify_url)
 90         if verify["error"] == 0:
 91             print "Succeed!!!"
 92             return access_token, openid
 93         else:
 94             pass
 95
 96     def Get_Message(self):  # 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
 97         yu_zu = self.Verify_Access_token()
 98         access_token = yu_zu[0]
 99         openid = yu_zu[1]
100         user_message_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN' % (
101             access_token, openid)
102         user_message = self.Visit_Url(user_message_url)
103         openid = user_message["openid"]
104         global openid
105         nickname = user_message["nickname"]
106         sex = user_message["sex"]
107         province = user_message["province"]
108         city = user_message["city"]
109         country = user_message["country"]
110         openheadimgurlid = user_message["headimgurl"]
111         privilege = user_message["privilege"]
112         unionid = user_message["unionid"]
113         return openid, nickname, sex, province, city, country, openheadimgurlid
114
115     def Insert_db(self):
116         pass
117
118
119
120 class Query_User_Tel:
121     def __init__(self, tel):
122         self.openid = openid
123         self.tel = tel
124         self.conn = MySQLdb.connect(
125             host='localhost',
126             user='root',
127             passwd='123456',
128             db='test',
129             port=3306
130         )
131
132     def Judge_user(self):
133         try:
134             # conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', db='shang', port=3306)
135             cur = self.conn.cursor()
136             cur.execute('select * from register WHERE Openid=%s ' % self.openid)
137             rows = cur.fetchall()
138             if rows:
139                 return True
140             else:
141                 print "Please register with the registration page"
142             cur.close()
143             self.conn.close()
144         except MySQLdb.Error, e:
145             print "Mysql Error %d: %s" % (e.args[0], e.args[1])
146
147     def Judge_tel(self):
148         try:
149             # conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', db='shang', port=3306)
150             cur = self.conn.cursor()
151             cur.execute('select * from register WHERE Tel=%s ' % self.tel)
152             rows = cur.fetchall()
153             if rows:
154                 return True
155             else:
156                 print "Please enter the telephone number again"
157             cur.close()
158             self.conn.close()
159         except MySQLdb.Error, e:
160             print "Mysql Error %d: %s" % (e.args[0], e.args[1])

View Code

一开始我是以为所有步骤都要走一遍,后来发现在我所做的实际操作里我只需要获取到openid就可以,换而言之就是我只需要用过code换区网页授权access_token,从中拿到openid,从而验证的这个验证或者绑定的过程就可以完成。

当然,如果你想要更加合理无误的话,却是需要更加复杂和完善的操作。

转载于:https://www.cnblogs.com/sqz2671/p/7156541.html

我的Python开发之路---微信网页授权(扫码登陆)相关推荐

  1. vue开发本地调试微信网页授权

    vue开发本地调试微信网页授权 相关信息: 微信开发者工具 vue-cli3 1.修改hosts文件 这里可能会遇到无法修改的问题,可以通过修改权限或管理员权限打开修改 修改用户权限的操作如下: 修改 ...

  2. 网页版微信和微信公共号扫码登陆原理分析

    看到知乎上有关于微信扫码登陆原理的讨论.现将自己的分析结果写出来,供大家参考,不正确的地方望指正. 用户打开网页版微信: https://wx.qq.com/,微信为用户生成了一张包含uuid的二维码 ...

  3. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

  4. java实现简单扫码登录功能(模仿微信网页版扫码)

    java实现简单扫码登录功能 模仿微信pc网页版扫码登录 使用js代码生成qrcode二维码减轻服务器压力 js循环请求服务端,判断是否qrcode被扫 二维码超时失效功能 二维码被扫成功登录,服务端 ...

  5. 提问:微信网页授权到第三方调用错误、调用微信公众号扫码登陆错误、微信SCOP权限错误或没有权限

    总结: 调用微信扫码,但是微信返回提示SCOP错误,我的微信公众号认证了,也把对应的域名填写了,代码上填写的snsapi的路径是填写在对用网页授权域名下的路径. 错误原因: 应该是微信公众号上的配置错 ...

  6. [微信] 微信网页版扫码登录的实现

    我们先来回顾一下微信网页版的扫码登录过程 1. 打开微信网页版,https://wx.qq.com/ 2. 打开手机微信客户端,扫一扫 3. 点击确定,登录 看似简单的操作流程,中间涉及的数据交互有很 ...

  7. 微信公众号开发——实现用户微信网页授权流程

  8. java实现扫码微信登录_java实现简单扫码登录功能(模仿微信网页版扫码)

    public class PoolCache { // 缓存超时时间 10分钟 private static Long timeOutSecond = 10 * 60 * 1000L; // 每半小时 ...

  9. 微信授权Java重定向前端地址_微信网页授权+分享踩过的坑

    页面用浏览器自带返回和安卓物理返回死循环的话,直接看高潮部分 背景 折磨我两个工作日加周末一天的问题,我觉得还是有必要记录一下,为什么程序员总是加班,就是遇到这些意想不到的问题 需求 领导:我想做两个 ...

  10. iOS 11.3 显示:Apple ID 或将实现微信式扫码登陆

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 据外媒 9to5mac 近日报道,苹果似乎在筹备基于 "iCloud 个人数据&q ...

最新文章

  1. VSCODE编译头文件时函数没有定义的解决方案(VSCODE手动链接C文件方法)
  2. qt 进程打开excel_Qt QAxObject操作excel文件过程总结(转):(示例代码)
  3. Ubuntu/Fedora高版本安装海思SDK的方法
  4. 【转】30种MySQL索引优化的方法
  5. 【报告分享】致胜直播带货十大法则.pdf(附下载链接)
  6. 【读书笔记《Android游戏编程之从零开始》】11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)...
  7. win8更改计算机锁屏时间,在win8系统中设置自动锁屏功能的方法
  8. [AHK]提取Win10聚焦的锁屏壁纸
  9. 蓝桥杯--算法提高 字符串跳步(java)
  10. Aspnet Mvc 前后端分离项目手记(一) 关于跨域问题(还有前言)
  11. python 计算gdp_使用Numpy计算Python-Gini系数
  12. 拼图c语言程序,C语言实现拼图小游戏
  13. [质因数分解]樱花 洛谷P1445
  14. 进程间通讯 rcf应用简介
  15. 做科研的几点体会:如何多发 SCI
  16. 网信耕耘十余载,金融安全3.0时代的缔造者
  17. java: You aren't using a compiler supported by lombok, so lombok will not work and has been disab...
  18. 用迅雷下载的视频,文件夹打开是空的,文件夹有大小,也没有隐藏文件的解决办法
  19. JavaWeb开发_Web前端_Ajax
  20. CAShapeLayer和UIBezierPath

热门文章

  1. LINUX下载编译ass
  2. undefined reference to symbol 'dlsym@@GLIBC_2.17' libdl.so: error adding symbols: DSO missing from c
  3. JDK 32位(x86)版本,最新的是JDK8
  4. 泰山游记:绝顶海拔1525米
  5. WINDOWS编译OpenJDK8的问题及解决办法
  6. 量子纠缠,如何理解不确定性
  7. 管理感悟:产品功能比别人差,所以不能用?
  8. 挑选32 2K显示器
  9. 语言混编之java调用c_Java通过JNI调用C语言库
  10. 联想服务器如何进入pe系统,如何制作支持Legacy BIOS和UEFI BIOS两种模式启动的Windows PE...