有时候用户没有关注某个公众号,但是有些地方公众号需要获取到这个用户的信息,正常情况下,没有关注是获取不到的,但是微信提供了OAuth2.0来完成网页授权,请看例子,例子使用的是ruby代码
1,首先你要在公众号上设置授权的回调域名,如下:
www.example.com(不需要加http://)
这样设置后,只要在这个域名下面的页面都可调起网页授权,当然有几个不能授权,具体可以官方文档
2,设置好授权回调域名后,接下来就要引导用户进入授权页面,需要注意的是,个人觉得授权一次就够了,只要第一次进来判断当前微信用户信息是否存在,如果不存在可调起授权,如果有的话有不需要了,这样可避免多次调用的问题,至于怎么判断,我是用session来做的,授权后将用户信息保存到session里,第二次进来如果session有值,说明已经用户信息了,我的例子只要获取到用户的open_id就可以,所以用的scope的参数是snsapi_base代码如下
def get_wx_user_info
app_id = "XXXXXXX"
oauth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=# {app_id}&redirect_uri=# {Rack::Utils.escape(request.url)}&response_type=code&scope=snsapi_base#wechat_redirect"
redirect_to oauth_url if session[:wx_user_id].blank?
end
3,通过code来获取用户的open_id
if params[:code].present?
app_id = "XXXXXXXX"
app_secret = "xxxxxxx"
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=# {app_id}&secret=#{app_secret}&code=#{params[:code]}&grant_type=authorization_code"
result = RestClient.get(url)
data = JSON(result)
return redirect_to "#{request.url}"
end
因为我只要获取用户的open_id,所以到这里就算完成了,只要将json数据解析出来就OK了
如果你要拉取用
1,首先你要在公众号上设置授权的回调域名,如下:
www.example.com(不需要加http://)
这样设置后,只要在这个域名下面的页面都可调起网页授权,当然有几个不能授权,具体可以官方文档
2,设置好授权回调域名后,接下来就要引导用户进入授权页面,需要注意的是,个人觉得授权一次就够了,只要第一次进来判断当前微信用户信息是否存在,如果不存在可调起授权,如果有的话有不需要了,这样可避免多次调用的问题,至于怎么判断,我是用session来做的,授权后将用户信息保存到session里,第二次进来如果session有值,说明已经用户信息了,我的例子只要获取到用户的open_id就可以,所以用的scope的参数是snsapi_base代码如下
def get_wx_user_info
app_id = "XXXXXXX"
oauth_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=# {app_id}&redirect_uri=# {Rack::Utils.escape(request.url)}&response_type=code&scope=snsapi_base#wechat_redirect"
redirect_to oauth_url if session[:wx_user_id].blank?
end
3,通过code来获取用户的open_id
if params[:code].present?
app_id = "XXXXXXXX"
app_secret = "xxxxxxx"
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=# {app_id}&secret=#{app_secret}&code=#{params[:code]}&grant_type=authorization_code"
result = RestClient.get(url)
data = JSON(result)
return redirect_to "#{request.url}"
end
因为我只要获取用户的open_id,所以到这里就算完成了,只要将json数据解析出来就OK了
如果你要拉取用