Rails (微信) 通过 PC 端扫码登录,同步已关注公众号的信息,求高手解答

qiao2818 · 2015年10月09日 · 最后由 jun1st 回复于 2016年06月23日 · 8169 次阅读

1.已有通过认证的公众号一个。

2.现在需要做一个 PC 版的网页,这里需要能通过扫码登录,并且登录后的相关信息需要和公众号的一致(主要是读取,几乎没有写入,所以这里不需要将 PC 的东西同步到公众号内)。

3.公众平台貌似没有相关的 api,又看了开放平台,但是没有搞懂。

4.应该是使用图中的那一部分的东西。

有做过的朋友请指点一下,谢谢!

这里补充一下 1.是否需要在开放平台创建一个网页应用? 2.开放平台的管理中心的公众帐号已绑定了通过认证的公众号。

接写来,问题来了 1.如何获得 code? 2.如何通过 code 换 access_token? 3.如何拿到登录者的 openid (公众号) ?

或者说用户 A 关注公众号后,可以获取到的 openid 为 AAA。 那么用户 A 通过 PC 端网页扫码登录后,如何才能使获取到的 openid 为 AAA?

公众号关注后的 openid 和 pc 端网页扫码登录后的 openid 是不一样的。你要看一下 微信提供的 unionid

#3 楼 @jun1st 好的,我再研究下,如果有其他的资料或者相关 gem 也请提供一下,谢谢

@jun1st 这里已经使用 unionid,非常感谢。不知道绑定两个公众号以后会是什么样。。。

#4 楼 @qiao2818 相关 Gem,可以看下 weixin_authorize 和 wechat_menus, 这两个基本够用了

其实就是一个 OAuth 2 嘛,官方文档还是写得挺具体的 https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

简单来说就是:

  1. 引导用户跳转到授权页面 https://open.weixin.qq.com/connect/oauth2/authorize?appid=#{APP_ID}&redirect_uri=#{CALLBACK_URL}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

  2. 用户授权后,微信就是自动跳转回去 CALLBACK_URL 并附带上 code 和 state 参数

  3. 通过 code 换 access_token,再通过 access_token 获取用户信息(这个具体做法微信文档已经写了吧)

除了参考人家的 gem 码,其实免不了要花力气搞懂官方文档的。

github 有开源的项目:weixin_authorize

@jun1st 微信浏览器,在 IOS 设备中,左上角有返回按钮,这个按钮是否可以隐藏?或者自定义链接地址呢? 由于页面的所有链接必须用过微信,所有点击这个返回按钮后,链接不能走我的 before_filter。

#11 楼 @qiao2818 貌似不行,

#11 楼 @qiao2818 返回按钮不能行……不走 before_action 没办法,但用到 before_action 的那部分渲染应该可以放到 js 里来处理

@jun1st 请问一下我的网站是响应式的,用户在微信内置浏览器通过公众号获取用户信息的方式可以登录网站,在 PC 端可以通过开放平台的扫码登录网站,但是同一用户通过两种手段会生成两个账号,这两个账号怎么合并?

#14 楼 @bimott 授权返回的数据里,有个 unionid 的,

开发者可通过 OpenID 来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的 unionid 来区分用户的唯一 性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的 unionid 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid 是相同的。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册