diff --git a/app/api/mobile/apis/new_comment.rb b/app/api/mobile/apis/new_comment.rb index 8d713d784..dbc471f0e 100644 --- a/app/api/mobile/apis/new_comment.rb +++ b/app/api/mobile/apis/new_comment.rb @@ -19,9 +19,29 @@ module Mobile raise "无法获取到openid,请在微信中打开本页面" unless openid us = UsersService.new - user = us.register ({:login=>openid, :mail=>"#{openid}@163.com", + access_token = session[:access_token] + refresh_token = session[:refresh_token] + + if access_token.present? && refresh_token.present? + refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) + access_token = refreshinfo["access_token"] + refresh_token = refreshinfo["refresh_token"] + session[:access_token] = access_token + session[:refresh_token] = refresh_token + + #获取用户信息 + userinfo = Wechat.api.web_userinfo(access_token,openid) + Rails.logger.info "userinfo!!!!!!!!!" + Rails.logger.info userinfo + name = userinfo["nickname"] + else + name = openid[0..3]+"***"+openid.last + end + + user = us.register ({:login=>login, :mail=>login+"@163.com", :password=>"12345678", :password_confirmation=>"12345678", :should_confirmation_password => true}) + user.update_attributes(:lastname=>name) raise user.errors.full_messages.first if user.new_record? UserWechat.create!( diff --git a/lib/wechat/lib/wechat/api.rb b/lib/wechat/lib/wechat/api.rb index 7b754a07c..f267f8b69 100644 --- a/lib/wechat/lib/wechat/api.rb +++ b/lib/wechat/lib/wechat/api.rb @@ -122,33 +122,22 @@ module Wechat get 'access_token', params: params, base: OAUTH2_BASE end - def web_refresh_access_token(refresh_token) + def web_auth_access_token(web_access_token, openid) + get 'auth', params: { access_token: web_access_token, openid: openid }, base: OAUTH2_BASE + end + + def web_refresh_access_token(user_refresh_token) params = { - appid: access_token.appid, - grant_type: 'refresh_token', - refresh_token: refresh_token + appid: access_token.appid, + grant_type: 'refresh_token', + refresh_token: user_refresh_token } get 'refresh_token', params: params, base: OAUTH2_BASE end - def web_userinfo(access_token,openid) - # params = { - # access_token: access_token, - # openid: openid, - # lang: "zh_CN" - # } - # - # # get 'https://api.weixin.qq.com/sns/userinfo',params: params - # get 'userinfo', params: params, base: OAUTH2_USERINFO - - require "open-uri" - #如果有GET请求参数直接写在URI地址中 - uri = 'https://api.weixin.qq.com/sns/userinfo?access_token='+access_token+'&openid='+openid+'&lang=zh_CN' - userinfo = nil - open(uri) do |http| - userinfo = JSON.parse(http.read) - end - userinfo + def web_userinfo(web_access_token, openid, lang = 'zh_CN') + get 'userinfo', params: { access_token: web_access_token, openid: openid, lang: lang }, base: OAUTH2_USERINFO end + end end diff --git a/lib/wechat/lib/wechat/api_base.rb b/lib/wechat/lib/wechat/api_base.rb index b873251f7..72b169829 100644 --- a/lib/wechat/lib/wechat/api_base.rb +++ b/lib/wechat/lib/wechat/api_base.rb @@ -1,6 +1,6 @@ module Wechat class ApiBase - attr_reader :access_token, :client, :jsapi_ticket + attr_reader :access_token, :client, :jsapi_ticket, :auth_access_token MP_BASE = 'https://mp.weixin.qq.com/cgi-bin/' diff --git a/lib/wechat/lib/wechat/token/auth_access_token.rb b/lib/wechat/lib/wechat/token/auth_access_token.rb new file mode 100644 index 000000000..5b58e261c --- /dev/null +++ b/lib/wechat/lib/wechat/token/auth_access_token.rb @@ -0,0 +1,21 @@ +require 'wechat/token/access_token_base' + +module Wechat + module Token + class AuthAccessToken < AccessTokenBase + + # def refresh + # params = { + # appid: access_token.appid, + # grant_type: 'refresh_token', + # refresh_token: user_refresh_token + # } + # data = client.get 'oauth2/refresh_token', params: params, base: OAUTH2_BASE + # write_token_to_file(data) + # read_token_from_file + # end + + end + end +end + diff --git a/public/javascripts/wechat/others/factory.js b/public/javascripts/wechat/others/factory.js index 3d66a649c..229c08a63 100644 --- a/public/javascripts/wechat/others/factory.js +++ b/public/javascripts/wechat/others/factory.js @@ -268,12 +268,12 @@ app.factory('common', ['$http', 'auth', '$routeParams','rms','config','wx','$loc var urlName = response.data.type_name + "_discussion"; link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+window.g_appid + "&redirect_uri="+window.g_localhost+"/wechat/user_activities?id="+response.data.data.act_id+ - "&response_type=code&scope=snsapi_base&state="+urlName+"&connect_redirect=1#wechat_redirect"; + "&response_type=code&scope=snsapi_userinfo&state="+urlName+"&connect_redirect=1#wechat_redirect"; } else{ link = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+window.g_appid + "&redirect_uri="+window.g_localhost+"/wechat/user_activities?id="+response.data.data.act_id+ - "&response_type=code&scope=snsapi_base&state="+args.urlName+"&connect_redirect=1#wechat_redirect"; + "&response_type=code&scope=snsapi_userinfo&state="+args.urlName+"&connect_redirect=1#wechat_redirect"; } // if(args.urlName == "discussion"){