|
|
|
@ -150,11 +150,20 @@ class WechatsController < ActionController::Base
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### controller method
|
|
|
|
|
include Controllers
|
|
|
|
|
|
|
|
|
|
module Controllers
|
|
|
|
|
def get_open_id
|
|
|
|
|
begin
|
|
|
|
|
raise "非法操作, code不存在" unless params[:code]
|
|
|
|
|
openid = get_openid_from_code(params[:code])
|
|
|
|
|
raise "无法获取到openid" unless openid
|
|
|
|
|
|
|
|
|
|
code = params[:code] || session[:wechat_code]
|
|
|
|
|
openid = get_openid_from_code(code)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
raise "无法获取到微信openid" unless openid
|
|
|
|
|
render :json => {status:0, openid: openid}
|
|
|
|
|
rescue Exception=>e
|
|
|
|
|
render :json => {status: -1, msg: e.message}
|
|
|
|
@ -163,8 +172,10 @@ class WechatsController < ActionController::Base
|
|
|
|
|
|
|
|
|
|
def bind
|
|
|
|
|
begin
|
|
|
|
|
raise "非法操作, code不存在" unless params[:code]
|
|
|
|
|
openid = get_openid_from_code(params[:code])
|
|
|
|
|
|
|
|
|
|
code = params[:code] || session[:wechat_code]
|
|
|
|
|
openid = get_openid_from_code(code)
|
|
|
|
|
|
|
|
|
|
raise "无法获取到openid" unless openid
|
|
|
|
|
raise "此微信号已绑定用户, 不能重复绑定" if user_binded?(openid)
|
|
|
|
|
|
|
|
|
@ -172,7 +183,7 @@ class WechatsController < ActionController::Base
|
|
|
|
|
raise "用户名或密码错误,请重新登录" unless user
|
|
|
|
|
#补全用户信息
|
|
|
|
|
|
|
|
|
|
raise "此用户已经绑定了公众号" if user.user_wechat
|
|
|
|
|
raise "此用户已经绑定过公众号, 请换一个帐户试试" if user.user_wechat
|
|
|
|
|
|
|
|
|
|
UserWechat.create!(
|
|
|
|
|
openid: openid,
|
|
|
|
@ -185,17 +196,25 @@ class WechatsController < ActionController::Base
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def login
|
|
|
|
|
@code = params[:code] #TODO 安全性
|
|
|
|
|
session[:wechat_code] = params[:code] if params[:code]
|
|
|
|
|
render 'wechats/login', layout: 'base_wechat'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
def get_openid_from_code(code)
|
|
|
|
|
url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=#{Wechat.config.appid}&secret=#{Wechat.config.secret}&code=#{code}&grant_type=authorization_code"
|
|
|
|
|
logger.debug url
|
|
|
|
|
body = URI.parse(url).read
|
|
|
|
|
logger.debug body
|
|
|
|
|
JSON.parse(body)["openid"]
|
|
|
|
|
openid = session[:wechat_openid]
|
|
|
|
|
|
|
|
|
|
unless openid
|
|
|
|
|
if code
|
|
|
|
|
openid = wechat.web_access_token(code)["openid"]
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if openid
|
|
|
|
|
session[:wechat_openid] = openid
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return openid
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def user_binded?(openid)
|
|
|
|
@ -233,4 +252,6 @@ class WechatsController < ActionController::Base
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|