python微信公众号微信用户绑定第三方网站

场景

例如,某用户在第三方购物平台的账号(user_id/手机号码等)需要跟该用户的微信账号进行绑定, 实现在该购物平台的微信公众号中查询个人信息, 消费记录, 充值记录等操作.总的来说便是,将微信用户的open_id跟第三方网址user_id/手机号码等进行一对一关联

实现方案

微信用户关注公众号后,通过让微信用户请求授权链接的方式来获取用户信息,获取的信息里面就包含用户在该微信公众号的唯一标识open_id,我们进而将微信用户open_id跟第三方网站账号user_id/手机号码等进行绑定

流程

  1. 让用户请求微信授权链接, 用户同意授权
  2. 获取code, 通过获取到的code, 换取进行网页授权的access_token
  3. 刷新access_token (非必要, 如果有需要可以参照微信公众号平台)
  4. 请求链接获取用户基本信息,得到用户open_id等基本信息

第一步
请求方式 : GET
请求参数 :

参数				 是否必须				说明
appid				是				你的公众号app_id
redirect_uri		是				用户同意授权之后回调地址
response_type		是				返回类型,直接写 code
scope				是				应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state				否				重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect	是				无论直接打开还是做页面302重定向时候,必须带此参数

如果scope的值为snsapi_userinfo,则会弹出以下页面,否则不会
在这里插入图片描述

后台代码-拼接授权链接并转换为短链接返回前端

"""
流程
1: 根据微信服务器要求拼接好授权链接
2: 将授权链接转换为短链接,生成二维码(链接过长无法直接生成二维码, 所以需要转换为短链接)
3: 将生成的短链接返回前端, 使用jquery库生成二维码参数备注
BINDING_REDIRECT_URL 回调地址
BINDING_REDIRECT_URL = 你的回调地址AUTHORIZATION_URL 授权链接
AUTHORIZATION_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"WECHAT_APPID = 你的公众号app_id
"""BINDING_REDIRECT_URL = 你的回调地址
AUTHORIZATION_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"
WECHAT_APPID = 你的公众号app_iddef get_authorization_short_url(self, user_code):"""获取微信用户授权链接"""# 对回调地址进行转义,避免冲突, 因为回调地址也包含 http:// 所以需要进行转义redirect_url = urllib.quote(BINDING_REDIRECT_URL)# 用户编号进行编码, base64安全性不高,可以采用rsa等非对称加密算法进行加密# 将用户编号作为state参数一起传递过去,后面微信服务器会将state再回传到回调地址user_encode = base64.b64encode(user_code)authorization_url = AUTHORIZATION_URL % (WECHAT_APPID, redirect_url, "snsapi_userinfo", user_encode)# authorization_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众号app_id&redirect_uri=你的回调地址&response_type=code&scope=snsapi_userinfo&state=user_encode#wechat_redirect"# 长链接无法生成二维码,请求微信接口转换为短链接conversion_short_url = self.long_url_conversion_short_url(authorization_url)if conversion_short_url and conversion_short_url.startswith("http"):# 成功将长链接转换为短链接, 输出到前端进行生成二维码return self.write({"code": "0", "msg": u"操作成功!", "data": conversion_short_url})else:# 转换失败return self.write({"code": "-1", "msg": u"操作失败!"})def long_url_conversion_short_url(long_url):"""将长链接抓换为短链接返回, 以便生成二维码具体请参考 https://blog.csdn.net/MAO_TOU/article/details/97921013"""

html网页代码-获取授权短链接并且生成二维码
bootstrap模态框, 用于显示生成的二维码图片

<div class="modal fade" id="qrcode_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="myModalLabel">请打开微信扫一扫</h4></div><div class="modal-body" style="text-align: center;"><div id="authorization_code"></div></div></div></div>
</div>

JS代码

点击下载QRCode跟JQuery

function create_qrcode_to_authorization() {// 后台请求绑定微信二维码$.ajax({url:'获取授权链接地址',async: false,type:"POST",data:{推荐传递用户id等信息到后台,作为授权链接的state参数传入,后续微信服务器会将state回传到回调地址},dataType:"json",success: function(data){if(data['code'] == '0') {// 获取授权锻链接成功authorization_url = data['data'];// 直接使用qrcode生成二维码var qrcode = new QRCode(document.getElementById("authorization_code"), {text: authorization_url,width: 228,height: 228,colorDark : "#000000",colorLight : "#ffffff",correctLevel : QRCode.CorrectLevel.H});// 唤醒模态框$('#qrcode_modal').modal();}else {alert(data['msg']);}},error: function(){alert("操作失败,请稍后再试!");return ;},});
}

后面需要用户打开微信进行扫码,当用户扫码并且同意授权之后,微信服务器就会以 GET 方式请求我们刚才设置的回调地址, 携带state参数跟code参数,其中,state参数是我们刚才设置在授权链接里面的state,原封不动,code参数是用于 第二步 中用于 换取进行网页授权的access_token时 需要使用的参数.

第二步
后台代码-编写回调函数, 获取state跟code参数

"""
流程
1: 获取微信回传的state参数跟code参数
2: 使用code参数请求获取access_token跟open_id, access_token跟open_id可用于下一步获取用户个人信息
3: 使用access_token跟open_id请求获取微信用户信息参数备注
RETURN_TOKEN_OPEN_ID_2_USER_INFO_URL 获取access_token跟open_id的请求地址
RETURN_TOKEN_OPEN_ID_2_USER_INFO_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"WECHAT_APPID = 你的公众号app_id
WECHAT_APPSECRET = 你的公众号秘钥
"""RETURN_TOKEN_OPEN_ID_2_USER_INFO_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"
WECHAT_APPID = 你的公众号app_id
WECHAT_APPSECRET = 你的公众号秘钥def redirect_function(self):"""回调函数, 微信服务器会根据授权链接的回调地址(redirect_uri)找到并且执行该函数"""code = self.get_argument("code", "")state = self.get_argument("state", "")# 获取信息错误, 绑定失败if state == "":return self.render("wechat/wechat_error.html", errcode="500", errmsg="绑定失败")if code == "":return self.render("wechat/wechat_error.html", errcode="500", errmsg="绑定失败")user_code = base64.b64decode(state)# 请求获取访问用户信息的access_token跟open_idaccess_token_request_url = RETURN_TOKEN_OPEN_ID_2_USER_INFO_URL % (WECHAT_APPID, WECHAT_APPSECRET, code)wechat_access_token_response = urllib2.urlopen(access_token_request_url)# 获取wechat返回数据(json格式)access_token_response_json = wechat_access_token_response.read()access_token_response_dict = json.loads(access_token_response_json)if "errcode" in access_token_response_dict.keys():# 返回错误信息return self.render("wechat/wechat_error.html", errcode="500", errmsg="绑定失败")# 获取open_id跟access_token, 后续根据open_id跟access_token获取用户基本信息user_open_id = access_token_response_dict["openid"]access_token = access_token_response_dict["access_token"]# 到这一步已经可以进行绑定了,当前用户的user_code跟open_id都有,# 只要在数据库进行存储即可,如果还需要获取用户在微信的基本信息,则需要再次# 发送请求进行获取userinfo_response_dict = get_wechat_user_info(user_open_id, access_token)# 返回的用户信息可以参考 微信公众平台 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839if userinfo_response_dict:print userinfo_response_dictelse:print "获取用户信息失败" 

第四步
后台代码-根据access_token跟open_id获取微信用户信息

def get_wechat_user_info(self, user_open_id, access_token):# 发送请求获取用户信息(只获取基本信息)userinfo_request_url = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN" %(access_token, user_open_id)userinfo_response = urllib2.urlopen(userinfo_request_url)# 提取用户信息(json格式)userinfo_response_json = userinfo_response.read()userinfo_response_dict = json.loads(userinfo_response_json)if "errcode" in userinfo_response_dict.keys():# 返回错误信息return Falseelse:# 请求链接返回的用户信息return userinfo_response_dict

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/40322.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信公众号开发—通过网页授权实现业务系统登录及用户绑定(微信网页授权自动登录业务系统)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 微信公众号开发—通过网页授权实现业务系统登录及用户绑定(微信网页授权…

微信授权登录流程以及公众号配置方法(golang后端)

一、准备一个已经认证OK的微信公众号和已经备案的域名&#xff0c;且解析好配置好https证书。 1.如上图 微信公众号 > 基本配置 &#xff0c;设置开发者密码 2.设置IP白名单&#xff0c;白名单填写提供后端服务的服务器公网IP 二、公众号服务器配置。 1.找到基本配置 2.将服…

微信公众号用户与网站用户的绑定方案

现在很多网站都已经建立了一套完整的用户账号体系&#xff0c;基于这套体系&#xff0c;再做其他应用的用户扩展就非常方便。例如&#xff0c;有了微软的outlook账户&#xff0c;就可以登录win8&#xff0c;可以登录微软的邮箱&#xff0c;还可以登录skype。同样地&#xff0c;…

微信开放平台 帐号管理 绑定在同一个开放平台帐号下的公众号及小程序让用户unionid一致...

开发十年&#xff0c;就只剩下这套架构体系了&#xff01; >>> 第三方平台在获得此权限后&#xff0c;可以代替已授权的公众号/小程序创建开放平台帐号或进行绑定/解绑操作。 绑定在同一个开放平台帐号下的公众号及小程序&#xff0c;用户unionid一致。开发者可调用…

wechat-0051,微信公众号,第三方登录—扫码绑定

声明&#xff1a;这边所谓的第三方登录&#xff0c;不是通过网页授权的方式&#xff0c;而是利用生成带参数的二维码&#xff0c;将微信号和平台账号绑定实现。如果你要做的是授权登录&#xff0c;请查看 https://blog.csdn.net/wrongyao/article/details/80229986 微信第三方…

IT创业项目 - 跟淘宝商城合作网赚项目,赚多少你说了算!

【项目介绍】&#xff1a; 使用淘宝商城的巨大流量销售产品或者服务。 【市场前景】&#xff1a; 淘宝网作为最大的B2C交易平台,淘宝商城又是淘宝网要点的发展对象&#xff0c;越来越多的年轻人喜爱在淘宝购买产品和服务。使用好淘宝的流量&#xff0c;赚钱十分简略。其实这是一…

微信公众号开发消息推送以及图文推送

今天给大家分享的关注公众号自动推送图文消息&#xff0c;以及做一个超牛逼的机器人。 先看看效果。 发错图了。。。这是我昨天开发的一款机器人chu了会骂人啥都不会了。我今天将它词库进行了更新和升级&#xff0c;接入了http://www.itpk.cn/ 机器人第三词库 先给你截图&…

【全网最简单】给朋友- 制作,微信公众号推送教程

简介&#xff1a; 前段时间&#xff0c;抖音非常火的微信公众号推送天气&#xff0c;生日&#xff0c;祝福等信息给女朋友专属推送&#xff0c;而且大部分都是Python写的&#xff0c;对于我来说&#xff0c;必须得整起&#xff0c;上java版本&#xff0c;到时候打个包&#xff…

小扎All in AIGC,连夜成立顶级产品团队

金磊 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT的火爆&#xff0c;终究是让Meta坐不住了。 这不&#xff0c;小扎&#xff08;扎克伯格&#xff09;连夜对外宣布了公司的大动作&#xff1a; 成立顶级产品团队&#xff0c;专注AIGC。 这个团队可以说是整合了全公司搞AIGC的人才…

MySQL 被 PG 干翻!最赚钱的开发语言是他?

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013) Stack Overflow 发布了 2023 年开发者调查报告&#xff0c;据称共计超过 9 万名开发者参与了此次调查。 完整报告包含了受访开发者画像&#xff0c;以及关于开发技术、AI、职业、社区等方面的内容。本文主要介绍关于…

文心一言员工跳槽工资翻倍,猎头:百万年薪很正常

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 前段时间&#xff0c;国内外科技圈呈现出群雄逐“ChatGPT”的态势&#xff1a;谷歌官宣竞品 Bard 、微软发布 AI 驱动的新版 Bing 搜索引擎和 Edge 浏览器、百度官宣“文心一言”、网易…

AIGC分享交流平台、GPT-4、GPT实时联网、Claude

拥有无限畅谈的AI个人助理&#xff0c;提高效率和创造力&#xff0c;引领未来的智能生活&#xff1b; 不仅承载着最前沿的科技理念&#xff0c;更集成了对人工智能可能性的深度理解。 已支持基于GPT、Claude等主流大模型的对话内容生成、支持GPT联网查询实时信息&#xff1b;基…

2022年休闲游戏市场总结

在预测 2023 年之前&#xff0c;我们先回顾一下 2022 年。从上一年发生的事件中往往能看到未来趋势的影子&#xff0c;所以 2022 年的总结至关重要。 一、2022年总结回顾 1、流行游戏类型 回顾 2022 年&#xff0c;三种超休闲游戏表现最为突出&#xff1a; 跑酷游戏&#xff1a…

破解VProtect所有版本,PATCH HWID方式过注册

运行后&#xff1a; 本机机器码"195F9059606EEB4723128A216ED1426B”&#xff0c;在内存中搜索该字符串&#xff0c;可以得到3个地方&#xff0c;我这里以最后搜索到的地方为切入点&#xff0c; 为什么&#xff1f; 找到的3个地方都下内存断点判断&#xff0c;刚好最后找到…

新加坡国立大学学霸,《快乐机器学习》和《Python 从入门到入迷》作者,FRM,CAIA...

王的机器主理人 王圣元 (FRM, CAIA) 某加密货币公司 Head of Quant 冬海集团 SeaMoney 建模负责人 八方咨询 量化总监 新加坡国立大学金融数学硕士 新加坡国立大学量化金融学士 《快乐机器学习》的作者 《Python 从入门到入迷》的作者 第一本书 《快乐机器学习》 第二本书《Pyt…

瑞芯微推出RV1126性能/案例大评测

瑞芯微推出RV1126性能/案例大评测 目录 案例1&#xff1a;面部识别 案例2&#xff1a;图像分割 案例3&#xff1a;目标检测 一、车载录像性能提升一倍,支持8路1080p视频录像 二、内置2T独立NPU,AI效率更高 三、配备安防级ISP,确保夜拍高清晰度 四、存储空间扩容一倍,记录…

【SAT】

A Tutorial to SAT Solving 约束求解基础与应用4.10 1. SAT的概念 Propositional Satisfiability (SAT)&#xff1a;Given a propositional formula φ, test whether there is an assignment to the variables that makes φ true. 公式组成&#xff1a; 布尔变量x litera…

2023年SAT、ACT、AP、Alevel、IB考试时间表

2023年已经来临&#xff01;以下是2023年SAT、ACT、AP、A-Level、IB考试时间安排&#xff0c;早规划早备考&#xff0c;建议大家收藏&#xff01;2023 SAT从2023年开始&#xff0c;美国以外的所有SAT考试都将转为机考&#xff0c;美国SAT考试将在2024年全面转为机考。2023年一共…

13万亿邮储银行数字化转型之路

中国邮政储蓄可追溯至1919 年开办的邮政储金业务&#xff0c;至今已有百年历史。2007年 3月&#xff0c;在改革原邮政储蓄管理体制基础上&#xff0c;中国邮政储蓄银行有限责任公司挂牌成立。2012年1月&#xff0c;本行整体改制为股份有限公司。2016年9月本行在香港联交所挂牌上…

国内的Ubuntu镜像源|Ubuntu清华镜像源

国内的Ubuntu镜像源|Ubuntu清华镜像源 今天学习docker需要在线Ubuntu镜像&#xff0c;所以做了一个镜像下载地址笔记&#xff0c;方面以后的下载。 官方镜像下载访问地址&#xff1a; https://cn.ubuntu.com/download/alternative-downloads 网页拉到最下&#xff0c;找到chi…