-
Notifications
You must be signed in to change notification settings - Fork 116
get openid
lanrion edited this page May 3, 2016
·
2 revisions
微信获取openid,主要是授权:oauth2。 场景是任何进入mobile页面,都获取openid,在使用 weixin_authorize 的基础下,我是这么干的:
class ApplicationController < ActionController::Base
before_action :invoke_wx_auth
before_action :get_wechat_sns, if: :is_wechat_brower?
private
# 调用微信授权获取openid
def invoke_wx_auth
if params[:state].present? || !is_wechat_brower? \
|| session['openid'].present? || session[:user_id].present?
return # 防止进入死循环授权
end
# 生成授权url,再进行跳转
sns_url = $wechat_client.authorize_url(request.url)
redirect_to sns_url and return
end
# 在invoke_wx_auth中做了跳转之后,此方法截取
def get_wechat_sns
# params[:state] 这个参数是微信特定参数,所以可以以此来判断授权成功后微信回调。
if session[:openid].blank? && params[:state].present?
sns_info = $wechat_client.get_oauth_access_token(params[:code])
Rails.logger.debug("Weixin oauth2 response: #{sns_info.result}")
# 重复使用相同一个code调用时:
if sns_info.result["errcode"] != "40029"
session[:openid] = sns_info.result["openid"]
end
end
end
end
这里只负责获取微信的openid,跟用户绑定,我的建议是用户在登录成功、注册功能后,都进行绑定。