Yes here is the PHP to process the code returned which used to return refresh_token an now returns just the client_id and client_secret. I am using the right paramenters, access_type=offline and tried adding prompt=consent.
$user = new AdWordsUser();
$user->LogAll();
$handler = $user->GetOAuth2Handler();
$oauth2Info = $handler->GetorRefreshAccessToken($user->GetOAuth2Info(), $code, $redirectUri);
// I also tried this version just in case which returns the same thing
//$oauth2Info = $handler->GetAccessToken($user->GetOAuth2Info(), $code, $redirectUri);
$user->SetOAuth2Info($oauth2Info);
if(isset($oauth2Info['refresh_token'])){
$refreshtoken=$oauth2Info['refresh_token'];
$accesstoken=$oauth2Info['access_token'];
$timestamp = isset($oauth2Info["timestamp"]) ? $oauth2Info["timestamp"] : 0;
$expiresIn = isset($oauth2Info["expires_in"]) ? $oauth2Info["expires_in"] : 0;
//do the rest of the processing to save token
}
Does that make more sense?