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

news/2024/5/16 10:44:37/文章来源:https://blog.csdn.net/qq_34322008/article/details/90054057

点击访问原文
您还可以加入全栈技术交流群(QQ群号:254842154)

现在很多网站都已经建立了一套完整的用户账号体系,基于这套体系,再做其他应用的用户扩展就非常方便。例如,有了微软的outlook账户,就可以登录win8,可以登录微软的邮箱,还可以登录skype。同样地,一个Apple ID可以享受苹果的所有服务。正所谓,一个账号,处处使用。
对于企业,可能会有产品线通常有网站,app,微信公众号等。统一各产品线的账号体系,实现一个账号处处使用的目标是非常有必要的。网站和app使用同一个账号,不需要做任何多余的工作,客户只要有用户名密码即可登录。对于微信公众号,由于它是基于微信公众平台的一个应用,需要遵守平台的规则,所以需要做一些额外的工作才能达到账号互通的目标。
接下来我们就来讨论一下,如何做到微信公众号用户与网站用户的账号体系无缝对接。
当用户关注微信公众号后,会有一些交互,交互过程中可能需要获取到用户的身份信息(对应到网站的账户信息),例如在公众号中下单,查询订单等操作。那么现在问题来了:对于同一个用户,我们如何建立微信公众号用户(openid)与网站用户(userid)之间的对应关系。这个过程我们称之为绑定。

在这里插入图片描述

微信账号绑定

为了简化讨论,我总结了这样两个场景:
一、用户已注册成为我们的网站用户,但还未关注我们的微信公众号;
二、用户未注册,但已关注我们的微信公众号。
对于以上两种情况,下面分别讨论。

场景一

用户已注册成为我们的网站用户,但还未关注我们的微信公众号。如何方便用户关注公众号,同时又能把用户和微信公众号绑定在一起呢?很自然地就可以想到二维码这个入口。
最近几年,二维码的应用特别广泛。微信对二维码的推广及应用可以说是如鱼得水,微信二维码支付,微信二维码登录,微信二维码名片等等。可以说,二维码已经成为O2O中连接线上线下的重要纽带。小马哥也称"二维码是线上线下的一个关键入口"。
在这里,需要用户在网站上先登录,然后在合适的地方给出一个绑定入口,比如在个人设置里。绑定流程如下:

在这里插入图片描述

微信账号绑定流程

这里需要用到微信的二维码生成功能:http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html
关于微信二维码,官方文档中这样说:

目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,有效期30天(2592000秒),但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1–100000,即10万个)。两种二维码分别适用于帐号绑定、用户来源统计等场景。

显然,我们使用临时二维码比较合适。每当用户刷新页面时,都可以生成一次。
由于二维码里可以带有场景值(scene_id),当用户扫描带有场景值的二维码后,微信服务器会把场景值推送给我们自己的服务器,我们拿到场景值后,就可以做验证和绑定逻辑。注意:生成二维码需要认证后的服务号。
一次完整的绑定流程应该是这样的:
①用户登录网页,点击“绑定微信账户”;
②后台使用微信接口,生成二维码链接返回给前端显示,并建立场景值A与用户的对应关系;
③用户扫描二维码,并点击关注微信公众号(假如已关注,直接跳到④);
④后台接收微信服务器推送的场景值A;
⑤后台根据场景值A,查询到对应的用户ID(依赖于②中建立的对应关系);
⑥建立用户userid与微信用户openid的对应关系;
⑦给用户的微信客户端推送“绑定成功”的提示;
⑧通知前台页面,绑定已完成,刷新页面,并返回一些微信账户信息。完成绑定。
其中,②中,“建立场景值A与用户之间的对应关系”,因为用户已经登录,所以用户点击“绑定微信账户”时,我们可以在后台分配一个临时场景值A与用户ID之间的对于关系。对于用户量不大的网站,可以直接使用php中的apc来缓存,并设置一个过期时间(与临时二维码过期时间设置成一样即可)。不要使用session来存储这种对应关系,因为④中是微信的推送事件,是不带session信息的,可以使用redis这类缓存或DB来存储。另,这里要使用临时二维码,数量上没有限制,只有时间限制,前台定时刷新即可。
⑧中,因为http没有推送机制,所以最简单的方法就是轮询去查询,是否已经完成绑定,完成绑定后再刷新页面。
完成绑定后,用户再跟我们的微信公众号交互时,根据openid可以找到对应的userid,即完成身份识别。对于之前提到的下单,查询订单,都是可以实现的。
整个绑定过程并不复杂,实现起来也没有太大的技术难度,最关键的是思路。
上述流程是用户已经在网页端登录了,也就是说已经注册用户。对于没有登录的情况,我们也可以做,在登录页面生成一个二维码,让用户用微信扫一扫。假如用户已经注册,则可以自动登录,并完成网站账号和微信账号的绑定;假如用户没有注册,则网页跳转到绑定账号页面,只要用户输入邮箱密码快速注册,同时也完成了网站账号和微信用户的绑定。实现技术方案跟上述类似。

场景二

场景二,对于用户来说操作略微复杂,因为它需要用户在微信客户端的网页中完成登录/注册。所以,假如注册过程太过复杂繁琐,不建议使用。
流程:

在这里插入图片描述

用户绑定账户流程

上述绑定流程集成了注册的过程,所以看起来比较复杂。实现起来也没有太大的难度,我们重点关注一下安全性方面的问题,因为绑定账户涉及到用户的信息安全,考虑两个问题:
1、如何防止链接被伪造
登录/注册的链接需要确保是我们自己的服务器生成的,其他人无法伪造。可以参考微信的验证服务器地址的有效性:
http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html。
所以一个比较安全的登录链接可以是这样的:
http://api.hello1010.com/wechat/login.html?openid=x1&signature=x2&timestamp=x3&nonce=x4&echostr&=x5
校验签名的代码:
private function checkSignature()
{
$openid = $_GET[“openid”];
$signature = $_GET[“signature”];
$timestamp = $_GET[“timestamp”];
$nonce = $_GET[“nonce”];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce, $openid);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){return true;
}else{return false;
}

}

token值可以跟自己的微信公众号后台的一致,也可以换一个,建议换一个安全点。
2、如何确保openid是可信的
考虑这种场景:A用户进入登录页面,复制登录链接到浏览器,把openid替换为B用户的openid,使用A用户的账号密码登录。这样就把A用户的userid和B用户的openid绑定在一起了,显然是不安全的。
解决方案有很多,比如可以给openid加密,在加密方法保密的情况下,用户无法伪造加密后的openid。假如不想给openid加密,可以在生成链接时,在服务器端建立openid与签名signature的对应关系,假如用户篡改了openid就无法通过校验。
记住,永远不要轻信客户端传过来的信息。

扩展应用

完成绑定后,我们可以做一些简单的应用。比如,公司需要举办一个线下路演活动,该活动需要报名才能参加,并且需要签到。
这是一个典型的可以用微信实现的O2O例子。流程如下:

在这里插入图片描述

线下路演签到流程

其中,“绑定用户子流程”就是场景二中的流程。报名的交互在这里不再累述,每个业务都不一样。
对于一个已经完成绑定的用户,他参加一个活动,需要做的就是通过微信报名,然后扫描二维码签到,体验相当流畅。
如有任何问题,欢迎跟我交流!

作者:hellojammyPlus
链接:https://www.jianshu.com/p/a51c54ddd0f3
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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

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

相关文章

Anonymous几天之内攻陷500多个中国网站

根据CNET的报道,Anonymous***激进组织已经在几天之内黑掉了超过500个中国政府/商业网站,并号召中国***加入他们。 The hacked Web site for the Central Business District in Chengdu, China. (Credit: Screenshot by Steven Musil/CNET)转载于:https:/…

SharePoint2013 App 开发中 自定义网站栏,内容类型,列表。

打开vs2012新建项目。 选择Sharepoint hosted模式。 一个app开发的项目就创建好了。 创建网站栏 1.右键项目》添加》新建项》Site column 创建一个网站栏 2.在element.xml中添加以下字段。 <?xml version"1.0" encoding"utf-8"?> <Elements xml…

SEO的作用是什么?为什么要学习SEO?

SEO的作用是什么&#xff1f; 让更多的用户更快的找到他想找的东西&#xff1b;可以让相关关键词排名靠前&#xff0c;满足用户需求&#xff1b;让有需求的人首先找到你&#xff1b;提供搜索结果的自然排名&#xff0c;增加可信度&#xff1b;让你的网站排名自然靠前&#xff0…

服务器更新网站,分享自动更新网站的方法

今天来聊聊一篇关于分享自动更新网站的方法的文章,现在就为大家来简单介绍下分享自动更新网站的方法,希望对各位小伙伴们有所帮助。详细原理&#xff1a;1) Windows服务端&#xff1a;Windows服务采用.Net Framework2.0框架&#xff0c;所以使用时应该先安装好.Net Framework2.…

wdcp后台创建网站后,总是显示403界面

后台创建站点后后&#xff0c;域名已解析&#xff0c;但无法打开默认页面&#xff0c;创建网站后会有一个默认的index.html 存在于public_html下面的&#xff0c;我用FTP 查看是有的&#xff0c;但用域名却无法访问&#xff0c;总是显示403界面 经查看&#xff0c;发现端口管理…

用合作的态度来提升网站收录与排名

合作共赢&#xff0c;这个词被应用到各行各业是不无道理的&#xff0c;在SEO行业里同样如此。在多年前&#xff0c;那是SEO飞速发展的时代&#xff0c;我们见证了许许多多的SEO神话&#xff0c;各种各样一夜暴富的神人&#xff0c;但为什么近几年这样的神话越来越少?这个问题很…

python制作网页服务器_十分钟上手Python开发网站服务器

如何一键安装Python开发环境&#xff1f;如何使用Jupyter Notebook开发Flask网站服务器&#xff1f;跟我一起来上手Python编程&#xff0c;十分钟开发一个动态网站服务器程序。 Python编程 首先请安装Anaconda软件。 登录https://www.anaconda.com官网&#xff0c;下载安装Indi…

脑图学习架构设计之二:网站架构模式

转载于:https://blog.51cto.com/dba10g/1610906

IE无法打开internet网站已终止操作的解决的方法

用IE内核浏览器的朋友&#xff0c;或许不经意间会碰到这样滴问题&#xff1a;打开某个网页时&#xff0c;浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”。而大多数情况下该页面甚至非常可能看起来已经载入完成&#xff0c;内容能够全然显…

iPhone App创建与审核步骤二:如何在developer.apple.com网站中设置App预览和截屏以完成App上架

iPhone App创建与审核步骤二&#xff1a;如何在developer.apple.com网站中设置App预览和截屏以完成App上架&#xff0c;根据图标规范RAD Studio 10.4 for delphi XE 或RAD Studio 10.3 for delphi 如何制作AppIcon图标 一、APP 预览和截屏 截屏规范 设备尺寸或平台 截屏尺寸 …

移动端网站设计参考规范(初稿)

找了一些这方面的资料&#xff0c;都是零零散散的&#xff0c;东西太多看起来比较累人&#xff0c;所以把一些有用的实际数据提炼了出来&#xff0c;仅供参考。 一、约定规范 团队内部使用相同版本Photoshop&#xff0c;Illustrator文件命名规范“版本号页面内容修改最新序号”…

Iphone App创建与审核步骤一:如何在developer.apple.com网站中设置你的IOS开发所需的Certificates, Identifiers Profiles

Iphone App创建与审核步骤一&#xff1a;如何在developer.apple.com网站中设置你的IOS开发所需的Certificates, Identifiers & Profiles&#xff08;证书、App ID及配置文件&#xff09; 步骤一、Apple Developer App的注册于账户管理 步骤二、在手机上打开最新版本的Appl…

【Bootstrap3.0建站笔记一】表单元素排版

1、文字和输入框前后排列&#xff1a; 代码&#xff1a; <div class"row"><div class"col-lg-12"><div class"panel panel-default"><div class"panel-heading"><h2>条件查找</h2></div>&l…

网站只有php怎么办,想获取一个网站的网站内容,但总是获取不到该怎么办

是这个网站&#xff1a;http://www.reg007.com/search。比如说&#xff0c;我在输入框里面输入了981267080qq.com他就会跳转到http://www.reg007.com/search?q981267080-at-qq.com。我想用php的file_get_contents获取http://www.reg007.com/search?q981267080-at-qq.com的网页…

配置Nginx网站https访问、http共存访问、http强制跳转到https

最近公司一客户要求服务器与客户端之间传输内容是加密的&#xff0c;通过https协议访问&#xff0c;于是使用OpenSSL生成证书&#xff0c;默认情况下ssl模块并未被安装&#xff0c;如果要使用该模块则需要在编译nginx时指定–with-http_ssl_module参数&#xff0c;需要确保机器…

php 随机在文章中添加锚文本_原创文章SEO技巧——嘉定行吟科技

一、网站内容关键词的选定是根据自动分词许多SEO优化人员&#xff0c;对于网站页面内容的选择大多都是在关键词标签中出现的&#xff0c;但实际上这是一种错误的方法&#xff0c;其中一些只是优化人员的主观看法&#xff0c;没有从搜索引擎的规则上考虑&#xff0c;如果优化人员…

网站暴库原理与方法剖析

2019独角兽企业重金招聘Python工程师标准>>> 一、方式 暴库的方式有多种多样&#xff0c;我知道的就有3种以上&#xff0c;常见的暴的方法有&#xff1a;%5c类暴,conn.asp暴,ddos暴等等 二、原理 “%5c”暴库法&#xff0c;它不是网页本身的漏洞&#xff0c;而是利用…

如何用自己电脑做服务器,绑定域名建一个个人网站

使用自己的电脑&#xff0c;下载一个tomcat服务器&#xff0c;并将域名解析到本机&#xff0c;这样就可以发布自己的网站了。不过&#xff0c;关机之后网站便登不上去了。这样做只是为了我们可以更好的开发调试自己的工程&#xff0c;网站上线之后可以让更多的朋友帮你找bug。这…

www.beishuo.net 网站打开异常慢的原因

现象&#xff1a;客户投诉http://www.beishuo.net/ 网站在移动线路下打不开或者打开异常缓慢&#xff08;墨绿色是服务器向客户端发送数据的时间&#xff0c;显得非常耗时&#xff09;分析&#xff1a;这个CASE比较有意思&#xff0c;我在用科来分析数据包的时候发现服务器的重…

程序员常用的刷题网站

1、LintcodeLintcode.com——LintCode网站是国内较大的在线编程&测评网站。此网站提供各大IT公司的算法面试题类型&#xff0c;行分门别类&#xff0c;由简单到中等&#xff0c;再到难&#xff0c;便于不同水平的程序员进行刷题练习。同时网站支持多种语言&#xff08;Java…