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

news/2024/5/21 1:02:27/文章来源:https://blog.csdn.net/dabao87/article/details/80397129

转自:https://www.jianshu.com/p/a51c54ddd0f3

 

现在很多网站都已经建立了一套完整的用户账号体系,基于这套体系,再做其他应用的用户扩展就非常方便。例如,有了微软的outlook账户,就可以登录win8,可以登录微软的邮箱,还可以登录skype。同样地,一个Apple ID可以享受苹果的所有服务。正所谓,一个账号,处处使用。

对于企业,可能会有产品线通常有网站,app,微信公众号等。统一各产品线的账号体系,实现一个账号处处使用的目标是非常有必要的。网站和app使用同一个账号,不需要做任何多余的工作,客户只要有用户名密码即可登录。对于微信公众号,由于它是基于微信公众平台的一个应用,需要遵守平台的规则,所以需要做一些额外的工作才能达到账号互通的目标。

接下来我们就来讨论一下,如何做到微信公众号用户与网站用户的账号体系无缝对接。

当用户关注微信公众号后,会有一些交互,交互过程中可能需要获取到用户的身份信息(对应到网站的账户信息),例如在公众号中下单,查询订单等操作。那么现在问题来了:对于同一个用户,我们如何建立微信公众号用户(openid)与网站用户(userid)之间的对应关系。这个过程我们称之为绑定。

微信账号绑定

为了简化讨论,我总结了这样两个场景:

一、用户已注册成为我们的网站用户,但还未关注我们的微信公众号;
二、用户未注册,但已关注我们的微信公众号。

对于以上两种情况,下面分别讨论。

场景一

用户已注册成为我们的网站用户,但还未关注我们的微信公众号。如何方便用户关注公众号,同时又能把用户和微信公众号绑定在一起呢?很自然地就可以想到二维码这个入口。

最近几年,二维码的应用特别广泛。微信对二维码的推广及应用可以说是如鱼得水,微信二维码支付,微信二维码登录,微信二维码名片等等。可以说,二维码已经成为O2O中连接线上线下的重要纽带。小马哥也称"二维码是线上线下的一个关键入口"。

在这里,需要用户在网站上先登录,然后在合适的地方给出一个绑定入口,比如在个人设置里。绑定流程如下:

微信账号绑定流程

这里需要用到微信的二维码生成功能:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542

关于微信二维码,官方文档中这样说:

目前有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_805035.aspx

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

相关文章

curl 网站开发指南

curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。 它支持多种协议,下面举例讲解如何将它用于网站开发。 一、查看网页源码 直接在curl命令后加上网址…

网站性能优化 - 数据库及服务器架构篇

我先前曾写过三篇有关网站系统、ASP.NET 性能优化的文章,分别从 SQL 语句、数据库设计、ASP.NET 功能、IIS 7 的套件,来探讨此一性能议题。本帖算是系列作的第四篇,整理了一些我看过的书籍和文章,改从「负载均衡、服务器架构、数据…

收集自己的网络书签,创建自己的网站导航

2019独角兽企业重金招聘Python工程师标准>>> 作为一个“宅男”,我常常在网络爬行,到处逛逛,就像是一只“虫子”。所以给自己取了一个“贝特虫子”的名字(也很喜欢《音乐虫子》这歌曲)。 由于工作的关…

20 个高质量响应式的 HTML/CSS 网站模板

来源:oschina 发布时间:2013-08-11 阅读次数:384 BisLite: Free HTML Website Templates Professional Responsive HTML5/CSS3 template Respond Wood working Free HTML Template Andia Wooden Wall Brownie Zeni BookStore Di…

40款非常漂亮的 HTML5 CSS3 免费网站模板【下篇】

HTML5 作为下一代网页语言,加入中众多更具语义的标签,例如video、audio、section、article、header 和 footer 等。而 CSS3 作为 CSS 的下一代版本,同样引入了很多很酷的属性,以前很多需要 JavaScript 才能实现的复杂效果&#xf…

【观点】如何打造网站高性能的核心优势

【CSDN编译】导读:本文根据Jeff Atwood的博文《Performance is a Feature》整理编译而来。作者就如何创建高性能网站分享了一些经验。现整理出来与大家分享。以下是博客内容:很多数据表明,网页打开和下载的速度越慢,用户越不愿使用…

ZenCart开源系统做外贸B2C商城的SEO优化细节建议

2019独角兽企业重金招聘Python工程师标准>>> 众所周知,zencart是最好的外贸B2C商城网站程序。这是因为它非常易于优化,对google友好。但是要做好一个zencart网站的外贸SEO优化,也需要在SEO优化细节下功夫。雷子在这里给大家提供用…

dwz框架在网站群项目中的应用(1)—概述

写在前面的话 作为一个刚刚参加工作的应届毕业生非常荣幸参与到此次项目中来,首先感谢领导和同事的信任与关怀,能给我这样一次参加实战的机会,并且在项目过程中悉心指导我的工作,解答我的疑惑。 我总觉得完成一个项目只是一个开始…

PHP特级课视频教程_第一集 网站大访问量_李强强

2019独角兽企业重金招聘Python工程师标准>>> 教程内容: 1.负载均衡技术 1).Cisco 以太网通道 2).Windows NLB技术 3).Linux LVS技术 4).F5等负载均衡器 2.数据冗余技术 1).Cisco HSRP热备份路由 2).Windows集群技术 …

企业网站如何备案

当前,随着国家工信部对互联网行业管理力度的提升和规范化,在网站制作公司跟客户把网站做完成以后,政策规定网站需要通过备案才能正常访问。今天我们就聊聊网站备案流程和体会以及一些注意事项。 工具/原料域名 主机 备案人 营业执照 联系信息…

模拟浏览器登录网站

2019独角兽企业重金招聘Python工程师标准>>> 本程序采用JAVA所定,举个例子是模拟浏览器登录小米官网,采用的类主要是HttpURLConnection,HttpsURLConnectionURL请求的类别: 分二类,GET与POST请求。二者的区别在于: a:) get请…

github+firebase建站

为什么80%的码农都做不了架构师?>>> #背景介绍# 毕业几个月了,需要更新大家的通讯录,但是google doc有些同学反映总打不开(不是所有的计算机毕业学生都会当程序员),国内的在线DOC我找到的都不支…

设计多选一按钮ChooseOnlyButton

设计多选一按钮ChooseOnlyButton 效果: 源码: ChooseOnlyButton.h 与 ChooseOnlyButton.m // // ChooseOnlyButton.h // ChooseOnlyButton // // Created by YouXianMing on 14/11/4. // Copyright (c) 2014年 YouXianMing. All rights reserved. //#import <UIKit/UIKi…

10个提供免费PHP脚本下载的网站

本文将重点介绍10个PHP脚本的免费资源下载站。之前推荐 《16个下载超酷脚本的热门网站》&#xff0c;这些网站除了PHP脚本&#xff0c;还有JavaScript、Java、Perl、ASP等脚本。如果你已是脚本代码巧匠&#xff0c;不妨把你的出色脚本放到Code Canyon网站上去出售&#xff0c;这…

一些网站的图片只要修改 URL 地址就能得到任何尺寸的图片

2019独角兽企业重金招聘Python工程师标准>>> 时光网: http://img21.mtime.cn/CMS/Gallery/2011/07/02/170837.97014036_160X160.jpg http://img21.mtime.cn/CMS/Gallery/2011/07/02/170837.97014036_362X571.jpg http://img21.mtime.cn/CMS/Gallery/2011/07/02/1708…

Web服务器安全服务,服务器防攻击,服务器防木马,服务器权限配置-网站安全服务...

2019独角兽企业重金招聘Python工程师标准>>> 网站安全服务 QQ: 联系 285691605 网站地址 http://blog.bypat.com Bypat 安全维护服务针对与网站被挂马&#xff0c;网站被挂黑链&#xff0c;首页被篡改&#xff0c;网站被黑客入侵&#xff0c;网站被攻击&#xff0c…

iis7.0上发布mvc4.0网站

步骤如下&#xff1a; 1.右击需要发布的项目&#xff0c;在弹出的菜单中选择“发布...”选项 2.在“发布web”对话框中进行设置&#xff0c;配置文件名称默认为“配置文件1”可以修改为需要的名字&#xff0c;以便识别&#xff0c;也可以不改。发布方法选择“文件系统”&#x…

新手学习在Ubuntu 14.04搭建Javaweb网站(2)--开启SSH服务

2019独角兽企业重金招聘Python工程师标准>>> SSH分客户端openssh-client和openssh-server 我们这里要安装的openssh-server 直接输入命令&#xff1a;sudo apt-get install openssh-server 然后确认sshserver是否启动了&#xff1a;ps -e |grep ssh如果看到sshd那…

从12306网站新验证码看Web验证码设计与破解

2019独角兽企业重金招聘Python工程师标准>>> 铁路官方购票网站12306又出新招&#xff0c;在登录界面推出了全新的验证方式&#xff0c;用户在填写好登录名和密码之后&#xff0c;还要准确的选取图片验证码才能登陆成功。据悉&#xff0c;12306验证码改版后&#xff…

网站服务端开发

2019独角兽企业重金招聘Python工程师标准>>> Memcached vs. Redis?ASP.NET Session State Management With Redis (Local Server Farm Testing) 转载于:https://my.oschina.net/ITELITE/blog/515708