Rails 微信扫一扫功能如何实现?有没有大神分享一下心得?

torvaldsdb · 发布于 2016年6月27日 · 最后由 zlx_star 回复于 2016年6月30日 · 1662 次阅读
19780
已经拥有二维码, RC上有没有大神做过类似微信扫一扫的功能.
共收到 14 条回复
15915

你的这个二维码是什么二维码?

19780

@ice_7 普通的二维码, 用来存储事件信息.

15915

@torvaldsdb 我是说你这个二维码要实现的功能是什么,是用微信接口生成的二维码?

15915

@torvaldsdb 也可以自己定义一个路由,然后比如你有一个参数code,这个code在你数据库是一个唯一的值,生成类似localhost:3000/controller/action?code=xxx,然后你可以用js插件把这个链接生成二维码,然后用微信扫一扫的功能的时候,你就可以根据这个code参数,然后去做你的逻辑了,不知道这样说能不能符合你的要求

1553

我最近搞定了绑定微信和扫码登录的功能,我这是用公众平台的二维码功能做的山寨版。正版请用 开放平台的 OAuth

  1. user 表加 wechat_id 字段
  2. 添加 user_scene 表, 二个字段: user_id 和 scene_id (unique)字段
  3. 用户登录后打开绑定微信页面,用 unix时间 作参数,生成小于232 的随机数作 scene_id,生成二维码,并加上 user_id 存入表 user_scene
  4. 用户扫描二维码,推送到我的服务器,得到 scene_id, 和微信 open id,根据 user_scene 表中的数据,把 微信 id 存入 user 表的 wechat_id 字段
  5. 生成二维码之前,删除 user_scene表中有关当前用户的记录,绑定后也删除记录

扫码登录功能也类似,因为只有一个 scene_id 可用,所以要扩展一下 user_scene 表, 加个 typ,如果为 0 是绑定, 如果为1是登录。还要加一个 wechat_id 字段。

  1. 生成 scene_id,产成二维码,并加上 typ=1 存入表 user_scene
  2. 用户扫码,推送到我的服务器,得到 scene_id, 和微信 open id,根据 scene_id 找到记录,然后把推送过来的微信 open id 存入 user_scene 表的 wechat_id 字段。
  3. 登录页面用 scene_id 轮询,如果发现 wechat_id 被填充,就 Post 到当前页面,用 scene_id 为参数,找到 wechat_id ,然后用 wechat_id 在 User 表搜索,如果有匹配用户,就设置该用户登录。

还有一些细节就不多说了,比如说清理user_scene表, 登录页面上把 scene_id 加盐 md5 一下 之类的。

微信提供了其它的扫一扫功能,如果自己想实现一些 与 wechat_id 相关的扫一扫的功能,用 scene_id 和一个 user_scene 表就可以了, typ 字段可以再多加定义。

2385

推荐:wechat gem

19780

@ice_7 很高兴看到你认真的回帖,你提到的那种思路,其实有个叫做"草料二维码"直接可以实现,我想做的是扫一扫的功能,就是读取二维码中的隐藏的东西.

6878

最近做了一个扫二维码加好友的功能,使用weixin_authorize ,基本思路是生成的二维码带有随机数生成的scene_id,scene_id绑定用户,用户扫码后会获取scene_id和open_id进行处理

19780

@peter 灰常感谢,从你的字里行间得到很多帮助.

19780

@zqalyc 可以更具体点么.核心代码与思路分享一下.

6878

weixin_authorize 会生成weixin_controller_decorator.rb,自带handle_scan_event方法

重写此方法

# 扫描带参数二维码事件: 2. 用户已关注时的事件推送
    def handle_scan_event
      # reply_text_message("扫描带参数二维码事件: 2. 用户已关注时的事件推送, keyword: #{@keyword}")
      scene_id = @keyword
      openid = @weixin_message.FromUserName
      message = User.bind_user openid,scene_id
      reply_text_message(message)
    end
2456

目前的二维码主要是 QR 二维码, 原理:http://www.ams.org/samplings/feature-column/fc-2013-02 在线读取:https://zxing.org/w/decode.jspx JS 读取库:https://github.com/LazarSoft/jsqrcode

19780 torvaldsdb 关闭了讨论 1月09日 17:23
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册