|
- class Oauth::WechatController < Oauth::BaseController
- def create
- # user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params)
-
- begin
- code = params['code'].to_s.strip
- tip_exception("code不能为空") if code.blank?
- new_user = false
-
- 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
|