设为首页 收藏本站
查看: 855|回复: 0

[经验分享] 网站微信登录-python 实现

[复制链接]
累计签到:10 天
连续签到:1 天
发表于 2015-11-29 14:32:23 | 显示全部楼层 |阅读模式
  最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记。
  根据需求选择相应的登录方式
  微信现在提供两种登录接入方式


  • 移动应用微信登录
  • 网站应用微信登录
  这里我们使用的是网站应用微信登录
  按照 官方流程

1 注册并通过开放平台开发者资质认证
  注册微信开放平台帐号后,在帐号中心中填写开发者资质认证申请,并等待认证通过。

2 创建网站应用
  通过填写网站应用名称、简介和图标,以及各平台下载地址等资料,创建网站应用

3 接入微信登录
  在资源中心查阅网站应用开发文档,开发接入微信登陆功能,让用户可使用微信登录你的网站应用
  
  如果已经完成上面的操作,请继续往下看
  
  微信网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。
  微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:


  •   第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

  •   通过code参数加上AppID和AppSecret等,通过API换取access_token;

  •   通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。


  
  具体流程请参考官方文档,我们这里只说一下python的实现方法。官方文档地址 点这里
  
  参考python-instagram 我写了一个 python-weixin (https://github.com/zongxiao/python-weixin)一个微信python SDK
  不过现在还只有微信接入、获取用户信息、 刷新refresh_token 等简单功能
  首先 需要把代码clone到本地
  然后执行



python setup.py install
  使用方式非常简单



1 from weixin.client import WeixinAPI
2
3 APP_ID = 'your app id'
4 APP_SECRET = 'your app secret'
5 REDIRECT_URI = 'http://your_domain.com/redirect_uri'  # 这里一定要注意 地址一定要加上http/https
6
7 scope = ("snsapi_login", )
8 api = WeixinAPI(appid=APP_ID,
9                         app_secret=APP_SECRET,
10                         redirect_uri=REDIRECT_URI)
11
12 authorize_url = api.get_authorize_url(scope=scope)
  现在将

authorize_url 地址在浏览器打开, 将跳转到微信登录页面,使用手机扫码登录后将跳转到
http://your_domain.com/redirect_uri?code=CODE&state=STATE 页面
现在我们就可以使用code 来获取登录的 access_token



access_token = api.exchange_code_for_access_token(code=code)
  access_token 信息为



{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
参数说明



access_token
接口调用凭证(有效期目前为2个小时)


expires_in
access_token接口调用凭证超时时间,单位(秒)


refresh_token
用户刷新access_token(有效期目前为30天)


openid
授权用户唯一标识


scope
用户授权的作用域,使用逗号(,)分隔
  
  获取access_token后,就可以进行接口调用,有以下前提:



  •   access_token有效且未超时;

  •   微信用户已授权给第三方应用帐号相应接口作用域(scope)。

  对于接口作用域(scope),能调用的接口有以下:

授权作用域(scope)接口接口说明



snsapi_base
/sns/oauth2/access_token
通过code换取access_token、refresh_token和已授权scope


/sns/oauth2/refresh_token
刷新或续期access_token使用


/sns/auth
检查access_token有效性


snsapi_userinfo
/sns/userinfo
获取用户个人信息
  



api = WeixinAPI(appid=APP_ID,
app_secret=APP_SECRET,
redirect_uri=REDIRECT_URI)
# 刷新或续期access_token使用
refresh_token = api.exchange_refresh_token_for_access_token(refresh_token=auth_info['refresh_token'])
api = WeixinAPI(access_token=auth_info['access_token'])
# 获取用户个人信息
user = api.user(openid=auth_info['openid'])
# 检查access_token有效性
v = api.validate_token(openid=auth_info['openid'])
  
  现在就微信登录就完成了
  下面是用 flask 实现的完整的例子



from flask import Flask
from flask import Markup
from flask import redirect
from flask import request
from flask import jsonify
from weixin.client import WeixinAPI
from weixin.oauth2 import OAuth2AuthExchangeError
app = Flask(__name__)
APP_ID = 'appid'
APP_SECRET = 'app secret'
REDIRECT_URI = 'http://localhost.com/authorization'

@app.route("/authorization")
def authorization():
code = request.args.get('code')
api = WeixinAPI(appid=APP_ID,
app_secret=APP_SECRET,
redirect_uri=REDIRECT_URI)
auth_info = api.exchange_code_for_access_token(code=code)
api = WeixinAPI(access_token=auth_info['access_token'])
resp = api.user(openid=auth_info['openid'])
return jsonify(resp)

@app.route("/login")
def login():
api = WeixinAPI(appid=APP_ID,
app_secret=APP_SECRET,
redirect_uri=REDIRECT_URI)
redirect_uri = api.get_authorize_login_url(scope=("snsapi_login",))
return redirect(redirect_uri)

@app.route("/")
def hello():
return Markup('<a href="%s">weixin login!</a>') % '/login'
if __name__ == "__main__":
app.run(debug=True)
  
  参考链接:
  微信网站应用接入文档
  网站应用创建地址
  python-weixin github 地址  https://github.com/zongxiao/python-weixin
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144986-1-1.html 上篇帖子: 浅谈python web框架中的orm设计 下篇帖子: 理解Python的迭代器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表