diff --git a/app/libs/omniauth/strategies/qq.rb b/app/libs/omniauth/strategies/qq.rb
index 7940b9cee..169524e23 100644
--- a/app/libs/omniauth/strategies/qq.rb
+++ b/app/libs/omniauth/strategies/qq.rb
@@ -22,7 +22,17 @@ module OmniAuth
         end
       end
 
-      uid { raw_info['openid'].to_s }
+      uid do
+        @uid ||= begin
+          access_token.options[:mode] = :query
+          access_token.options[:param_name] = :access_token
+          # Response Example: "callback( {\"client_id\":\"11111\",\"openid\":\"000000FFFF\"} );\n"
+          response = access_token.get('/oauth2.0/me')
+
+          matched = response.body.match(/"openid":"(?<openid>\w+)"/)
+          matched[:openid]
+        end
+      end
 
       info do
         {
@@ -36,17 +46,9 @@ module OmniAuth
         { raw_info: user_info }
       end
 
-      def raw_info
-        access_token.options[:mode] = :query
-        @raw_info ||= begin
-          res = access_token.get('/oauth2.0/me', parse: :text).parsed
-          JSON.parse(res.to_s[10..-4])
-        end
-      end
-
       def user_info
         access_token.options[:mode] = :query
-        params = { oauth_consumer_key: options.client_id, openid: raw_info['openid'], format: 'json' }
+        params = { oauth_consumer_key: options.client_id, openid: uid, format: 'json', parse: :json }
         @user_info ||= access_token.get('/user/get_user_info', params: params).parsed
       end
     end