def exchange_auth_code_for_token(opts={})
      unless (opts[:params] && opts[:params][:code])
        raise ArgumentError.new("You must include an authorization code as a parameter")
      end
      opts[:authenticate] ||= :body
      code = opts[:params].delete(:code)
      authorization_code.get_token(code, opts)
    end
def exchange_auth_code_for_token(opts={})
      unless (opts[:params] && opts[:params][:code])
        raise ArgumentError.new("You must include an authorization code as a parameter")
      end
      opts[:authenticate] ||= :body
      code = opts[:params].delete(:code)
      authorization_code.get_token(code, opts)
    end
Makes a request to Plangrade server that will swap your authorization code for an access
 token

 @see http://docs.plangrade.com/#finish-authorization

 @opts [Hash] may include redirect uri and other query parameters

 >> client = PlangradeClient.new(config)
 >> client.exchange_auth_code_for_token({
      :code => '123456789'
      :redirect_uri => 'http://localhost:3000/auth/plangrade/callback',
    })

 POST /oauth/token HTTP/1.1
 Host: www.plangrade.com
 Content-Type: application/x-www-form-urlencoded
  client_id={client_id}&code=G3Y6jU3a&grant_type=authorization_code&
  redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fplangrade%2Fcallback&client_secret={client_secret}