如何让用户的微信号与用户想对应的爱易拍账号关联

(1)我们可以菜单上加个菜单如“账号绑定”,弹出一个连接点,供用户点击进入,去填写所绑定的账户和密码信息;

(2)用户通过微信点击了菜单,我们就可以得到用户的标识(openId),这个标识对当前公众号唯一; 同一个微信号和同一个公众号交互,我们得到的OpenID是不会变的,因此,可以用OpenID作为微信用户的身份标识。

(3)此链接后要加上用OpenID、过期时间再加上一个密钥生成签名,生成签名的方法和微信服务器接口验证时的签名方法类似(密钥最好另选一个只有自己知道的)

(4) 数据库中建立用户OpenID和系统用户的绑定关系表

链接的生成,链接需要带3个url参数:

用户OpenID:因为你需要在绑定页面中取到是哪个微信用户想要绑定系统用户。

时间戳timestamp:这是为了防止链接泄漏出去被恶意利用,具体来说就是一个你指定的过期时间,超过这个时间这个链接就失效了,用户只能再次获取。

签名signature:这是为了保证此验证链接只有你才可能生成,用户及第三方均无法伪造。

(5) 签名的生成需要你有一个只有你知道的token(密钥,不要与设置在公众号里面的token相同),生成签名方法和验证微信服务器消息真实性类似。流程如下:

1. 将token、OpenID、timestamp三个参数进行字典序排序。

2. 将三个参数字符串拼接成一个字符串进行sha1加密,得到链接的signature参数。

用户打开某个绑定链接时,你首先验证链接的有效性,即按上述1和2中描述的同样的步骤得到signature与参数中的sinature对比,如果相同,则再检查链接是否超时,两步验证均通过,你就可以将用户的微信OpenID设置到用户的session中,然后你就可以渲染验证页面,让用户输入其系统用户名和密码以提交给你服务器进行验证。

---------------------------------------------------------------------------------------------------

原创:

最近由于工作需要,接触了微信公众号的开发。业务上要求绑定微信用户和系统用户,以便用户在一次绑定后能够通过系统用户的身份去使用一些功能。我关注的招行信用卡公众号实现了这个功能,所以估计还是可行的,在网上搜索了一下,发现这个问题没什么好的答案,很多都说取不到微信用户名实现不了,甚至有说实现了这个功能的应该是与微信有内部合作的。

搜索无果,遂自己动手实验,后发现其实完全可以的,看来实践才是检验真理的唯一标准,方案上也很简单,我分几点来说。

用OpenID绑定即可

微信接口中虽然没给用户的微信账号,但给了用户的OpenID,这个OpenID对一个公众号是唯一的,测试也证明不会改变,也就是说同一个微信号和同一个公众号交互,我们得到的OpenID是不会变的,因此,可以用OpenID作为微信用户的身份标识。

如何绑定

俗话说,没吃过猪肉还没见过猪跑。看招行信用卡公众号是如何做的,在微信里面给用户一个验证链接,用户点击链接,微信会用内嵌的浏览器打开这个链接,然后就是一般的网页登录验证界面,我们通过HTTP(S)获取用户输入的系统用户名与密码,验证通过后完成绑定。 具体如何生成链接和如何传递OpenID下面详述。

如何生成绑定链接

绑定涉及到用户的身份甚至利益,所以需要注意安全性。我们需要绑定的是OpenID和系统用户,系统用户名是用户直接在链接页面输入后通过HTTP(S)传给我们的,这没有问题。OpenID对用户来说透明,用户不会传给我们,我们也只有在用户在微信中向公众号发消息时才可获得OpenID,所以很明显,OpenID需要包含在生成的链接中,至于需不需要对OpenID作加密就看你自己了,我觉得这不重要,更为重要的是要在链接中带上签名和加上时间戳。因为我们需要确认这个链接是由我们服务端生成的,用户自己或者其他人不能够伪造出这个链接,加上时间戳是为了给这个链接一个过期时间,如果不限制过期时间,假设用户绑定后这个链接通过某种方式被别人知道,那么这个人就可以把自己的账号与用户的微信号绑定。所以我采取的方法是用OpenID、过期时间再加上一个密钥生成签名,生成签名的方法和微信服务器接口验证时的签名方法类似(密钥最好另选一个只有自己知道的)。

如何传递OpenID

有了绑定链接,用户点了绑定链接,但这只是第一步,第二步我们需要在用户在链接页面提交登录请求后进行验证,OpenID怎么传到第二步中呢?有人说了,这还不简单,在登录表单中加一个隐藏域放用户的OpenID一起提交给验证的Handler不就OK了,那我只能说很遗憾,你前面所做的安全工作都白费了,一旦A用户的OpenID泄漏,B用户就可以把自己的账号与A用户的微信号绑定了。所以永远不要相信客户端提交的东西。我的方法是当用户点击生成链接后,在链接页载入时,将OpenID存到session中,因为这个session是没法伪造的(cookie被盗除外),所以只有点击这个链接的用户的session中才会有链接中包含的OpenID。

关于微信服务器签名多说一句

大家都知道微信公众号消息接口验证时微信会向我们服务器发一个GET请求,在其中带上只有我们和微信服务器知道的签名,我们在请求处理Handler中会验证这个签名,这点大家无异议;消息接口验证通过后,微信就会把用户发的消息以POST的方式发给我们,很多人可能会在这里忽视对签名的检查,从而给恶意者伪造用户请求的机会。在微信以POST方式传递用户的消息时,仍然会将签名信息附在URL参数中,我们在处理每一个POST请求时,第一步还是得像处理消息接口验证时一样,去对URL参数中的签名作验证,只有签名验证通过后才可去取POST的信息。

绑定流程的详细描述

我在上面说了基本方法,但不够详细,导致一些新手朋友还是不清楚具体如何操作,所以我在此尝试更加详细地描述整个过程的每一步:

数据库中建立用户OpenID和系统用户的绑定关系表,初始时为空。

用户和微信交互时,你可以取到用户的OpenID。

检查数据表,如发现该OpenID没有绑定系统用户,则返回一个链接供用户在微信内嵌浏览器中打开,这个链接打开后类似于系统用户登录界面。

关键是链接的生成,链接需要带3个url参数:

1. 用户OpenID:因为你需要在绑定页面中取到是哪个微信用户想要绑定系统用户。

2. 时间戳timestamp:这是为了防止链接泄漏出去被恶意利用,具体来说就是一个你指定的过期时间,超过这个时间这个链接就失效了,用户只能再次获取。

3. 签名signature:这是为了保证此验证链接只有你才可能生成,用户及第三方均无法伪造。
签名的生成需要你有一个只有你知道的token(密钥,不要与设置在公众号里面的token相同),生成签名方法和验证微信服务器消息真实性类似。流程如下:

1. 将token、OpenID、timestamp三个参数进行字典序排序。

2. 将三个参数字符串拼接成一个字符串进行sha1加密,得到链接的signature参数。
用户打开某个绑定链接时,你首先验证链接的有效性,即按上述5.1和5.2中描述的同样的步骤得到signature与参数中的sinature对比,如果相同,则再检查链接是否超时,两步验证均通过,你就可以将用户的微信OpenID设置到用户的session中,然后你就可以渲染验证页面,让用户输入其系统用户名和密码以提交给你服务器进行验证。

在用户提交绑定验证请求后,你只需要检查session中有没有你设置的OpenID,没有自然无效,有的话就是要绑定的OpenID了,此时你可以把这个OpenID从session中删除了。然后你如果验证系统用户名和密码通过后,就把这个OpenID和系统用户绑定起来,加入到第1步中说的绑定关系表中。

完毕。

关于微信公众号用户账号绑定就是这么多,其实很容易实现,我在这里把我的方法和大家分享一下,老鸟可以忽略,主要是希望对新手有一些帮助。欢迎探讨,敬请轻拍。

关于微信的账户绑定问题相关推荐

  1. 微信为什么要绑定银行卡?

    微信一定要绑定银行卡吗?如果你不知道其中的原理,那么你就吃大亏了. 很多人对微信绑定银行卡呈现一种无所谓的态度,殊不知微信绑定银行卡的好处很多. 下面我从五个方面来回答这个问题问得有不完善之处还请大家 ...

  2. 微信支付账户更换实名认证微信钱包零钱余额还在吗?怎么更换微信钱包实名认证?

    原文来源:https://www.caochai.com/article-4119.html 微信支付账户更换实名认证微信钱包零钱余额还在吗? 微信支付账户更换实名认证微信钱包的零钱余额将清空,因为更 ...

  3. 微信公众账户模拟登陆后的一系列操作

    <?php header("content-type:text/html;charset=utf-8");/*** wx_mass* * 完成微信公众账户模拟登陆后的一系列操 ...

  4. 【仿59store校园o2o系统 v6.8】夜猫店+校园超市+学生街+微信公众号绑定+校园跑腿插件

    简介: 仿59store校园o2o系统是一个以php+MySQL进行开发的主要针对校园市场开发的O2O系统. 1.夜猫店:校园每栋楼可以开设一个夜猫店 2.校园超市:每个学校拥有一个校园超市 3.学生 ...

  5. 对于微信二维码相关官方文档的一些注解(微信登录和绑定微信、关注公众号)

    转载自:https://www.jianshu.com/p/d533c69be034 由于微信官方文档对此的描述虽然还可以,但是还是有一些让人疑惑的地方,所以笔者做了一些注解,希望对大家有所帮助 为什 ...

  6. 【微信小程序控制硬件④】 深度剖析微信公众号配网 Airkiss 原理与过程,esp8266如何自定义回调参数给微信,实现绑定设备第一步!(附带源码)

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  7. 微信开放平台绑定各移动应用、网站应用、公众号、小程序、第三方的个数

    微信开放平台绑定各移动应用.网站应用.公众号.小程序.第三方的个数 目前没有在微信的文档中找到过具体的数字,只能真正的登录到后台,并且已经认证了的才能看的到.认证需要300元/年. 很多人都不知道具体 ...

  8. 腾讯音乐 知乎 微信公众账户 搜狗

    腾讯音乐的评论里面有了知乎 微信公众账户搜索是搜狗 微信公众账户能搜出 知乎内容 知乎的指数 知乎的流量来源 转载于:https://www.cnblogs.com/freedommovie/p/64 ...

  9. 【功能业务篇】APP授权微信登录、绑定账号测试思考

    参考https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify ...

最新文章

  1. 19 python正则表达式及相关函数
  2. 数据挖掘 —— 有监督学习(回归)
  3. 1746: 多项式系数(杨辉三角的应用)
  4. java从键盘上录入任何整数,输出该整数的阶乘
  5. (一)KitJs瀑布流组件特点
  6. iOS build Version 作用
  7. 构图之法——9条构图小贴士
  8. react 界面渲染完成 立即执行_React原理解析fiber、diff
  9. BZOJ4817 [SDOI2017]树点涂色
  10. 哈夫曼树Huffman
  11. 蓝牙HC05主从设置连接说明
  12. 缠中说禅:缠非缠、禅非禅,枯木龙吟照大千(整理版)
  13. Java根据isbn查询图书信息_图书ISBN查询
  14. android 音量调节不起作用,Android音量控制
  15. 手机访问电脑的静态文件(html...)(anywhere)
  16. 用html5看板娘,记在nuxt.js中引入一个萌哒哒的看板娘(Live2d模型)
  17. QT——可视化界面ui
  18. java中的抽象到底是个啥?
  19. 再谈目前QQ空间主流的赚钱方法
  20. CICD使用阿里云 云效实现自动发布代码

热门文章

  1. .htaccess文件RewriteRule语法规则
  2. Swim Transformer代码环境配置纪录
  3. python新闻评论分析_今日头条新闻评论获取
  4. Redis实战和核心原理详解(4)Redis存储Key的一种设计实现方式:模式匹配
  5. 从0到1,云服务助力全民直播快速构建大数据平台
  6. 没有WIFI让你的IPHONE通过USB连接电脑上网
  7. 参考 | 辨别真假笔记本三星内存条 (ddr4)
  8. Deep Grasp部署调试
  9. elementUI表格包含固定列且按需显示时,切换标签,表格固定列样式错位问题
  10. 在Linux系统下XAMPP安装与配置