diff --git a/app/controllers/oauth/wechat_controller.rb b/app/controllers/oauth/wechat_controller.rb index f95116535..47dc53ccc 100644 --- a/app/controllers/oauth/wechat_controller.rb +++ b/app/controllers/oauth/wechat_controller.rb @@ -1,11 +1,32 @@ class Oauth::WechatController < Oauth::BaseController def create - user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params) + # user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params) - successful_authentication(user) if !new_user + begin + code = params['code'].to_s.strip + tip_exception("code不能为空") if code.blank? + new_user = false - render_ok(new_user: new_user) - rescue Oauth::CreateOrFindWechatAccountService::Error => ex - render_error(ex.message) + result = WechatOauth::Service.access_token(code) + result = WechatOauth::Service.user_info(result['access_token'], result['openid']) + + # 存在该用户 + open_user = OpenUsers::Wechat.find_by(uid: result['unionid']) + if open_user.present? && open_user.user.present? + successful_authentication(open_user.user) + else + if current_user.blank? || !current_user.logged? + new_user = true + set_session_openid(result['openid']) + set_session_unionid(result['unionid']) + else + OpenUsers::Wechat.create!(user: current_user, uid: result['unionid']) + end + end + + render_ok(new_user: new_user) + rescue WechatOauth::Error => ex + render_error(ex.message) + end end end \ No newline at end of file