公司需要微信这个平台和用户交流,于是开始研究微信公众平台。微信公众平台分为两种模式,其一是编辑模式,比如用户发什么内容,你可以响应什么内容。另外一种便是开发模式,这个模式功能丰富,不仅仅可以获取到用户的基本信息,还能获取用户的地理位置以及其他功能。

本来准备自己来开发一套微信公众号后台,后来发现已经有相关的开源产品,使用过三四种,发现最好用的还是”微擎“,咱们运维生存时间也不是替他打广告,确实比较好用,界面美观而且可以自己开发插件。不过呢,功能还是有些不足。

最近想研究微信怎么绑定网站的用户账号,类似招商银行那种,其实招商和微信是有深度合作,提供的接口也是很丰富,甚至他们网络都走专线。这不是我们这次要讲的重点,以下是来自网上的内容,有些道理。

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

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

用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的信息。

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

参考资料

微擎:http://www.we7.cc
微信公众平台:http://mp.weixin.qq.com
转自:abyssly.com/2013/09/20/wx_bind/(打不开,内容是从百度快照抠出来的)

微信公众号开发模式之用户账号绑定相关推荐

  1. 什么是php微信开发,php微信公众号开发模式详解

    这篇文章主要介绍了php微信公众号开发者模式,通过后台服务器与微信关注用户实现更多的交互作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 学习步骤:分四章来讲述这部分内容,下面是每章的大致内容. ...

  2. 微信公众号--开发模式之用户关注后自动回复(Java实现)

    访问我的个人博客 秋码个人博客 微信公众号开发–关注后自动回复(Java记录篇) 最终效果如下:

  3. php微信公众号开发难吗,PHP微信公众号开发的两种模式

    微信现在已经深入到每个家庭,每个人至少人手一个账号是确定的,所以开发公众号也是很普遍的,今天爱站技术频道小编为大家带来的是PHP微信公众号开发的两种模式,感兴趣的小伙伴们可以参考下面的介绍. 学习步骤 ...

  4. 微信公众号开发(一)--开发模式与编辑模式

    学习步骤:分四章来讲述这部分内容,下面是每章的大致内容. 1.了解开发模式与编辑模式,开发前的一些准备. 2.开发模式用户.微信服务器.个人服务器是如何交互的.什么是接口. 3.各种接口功能的调用与实 ...

  5. 微信公众号 用户绑定 php,微信公众号开发——网页授权实现简化用户绑定

    本教程的学习条件: 了解微信公众号开发的基本知识.已经申请了微信公众号并设置了开发模式等.如果不了解,请先到微信官方平台学习 需要服务器端开发的基本技能,本文主要讲解流程,基本不涉及具体开发语言. 首 ...

  6. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定,Java微信公众号开发消息推送公众号用户绑定问题 的解决办法

    问题概述 在进行微信公众号开发的时候遇到的这个问题,通过Web开发公众号的模板消息推送,在调试的过程中,需要进行开发者接口联调&调试,在调试之前需要将当前的公众号与用户的微信号进行绑定, 绑定 ...

  7. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  8. 微信公众号开发C#系列-5、用户和用户组管理-支持同步

    微信公众号开发C#系列-5.用户和用户组管理-支持同步 1.概述 眼前时下流行的经济有个叫粉丝经济,粉丝带动收益.一个好运营良好的公众号肯定会有一大批的粉丝团,如何挖掘粉丝来产生效益,是微信营销的关键 ...

  9. Java微信公众号开发梳理

    Java微信公众号开发梳理 现在微信公众平台的开发已经越来越普遍,这次开发需要用到微信公众平台.因此做一个简单的记录,也算是给那些没踩过坑的童鞋一些启示吧.我将分几块来简单的描述一下,之后会做详细的说 ...

最新文章

  1. WIN2008系统的IIS7.0配置REWRITE伪静态环境
  2. javascript体系-DOM原理
  3. wso2_使用WSO2 ESB进行邮件内容过滤
  4. 在VSCode中编写Kotlin/Java
  5. Hyperledger Fabric 交易流程
  6. k8s ubuntu cni_手把手教你使用RKE快速部署K8S集群并部署Rancher HA
  7. redis笔记2 限流、GeoHash和Scan
  8. vmware Horizon View 5.2初体验(三)——composer安装
  9. python分析每月销售数据_利用Python进行某单品销售数据分析
  10. 用K2设计一个工作流程
  11. mysql集群 自增_为什么我们要从MySQL迁移到TiDB?
  12. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作...
  13. VirtualXposed 免ROOT使用Xposed模块
  14. 【人工智能】马尔可夫链模型是什么?
  15. deepin驱动精灵_Deepin 20 Beta X64官方正式版(64位)
  16. 链家混三个月底薪_链家面试感想
  17. 云安全,到底是怎么一回事?
  18. iphone 4 微信版本过低
  19. phpstudy mysql恢复数据_MySQL_详解MySQL误操作后怎样进行数据恢复,一、开启binlog。 首先查看binlo - phpStudy...
  20. SpringBoot+JPA 项目启动失败,无法扫描到Repository

热门文章

  1. python 怎么输入字符上的横线_字符上方的横线怎么用MathType编辑
  2. 【数据库】mysql删库恢复
  3. 富文本 —— wangEditor
  4. i9x系列是服务器CPU吗,虽是i9入门款 但却已在众山巅_Intel 酷睿i9 7900X_CPUCPU评测-中关村在线...
  5. 软件工程实践作业----软件评测
  6. 四川企立方:如何写拼多多推广方案
  7. 手写一个http容器【上】决策树与路由表
  8. 树莓派4B gpio readall 出现Oops - unable to determine board type
  9. 别人的研究生宿舍男女混住,而我没地方住?
  10. Vue 创建粒子效果插件