Голос Google PHP OAuth 2.0

Я однажды использовал библиотеку классов PHP для подключения к Google Voice для отправки текстовых сообщений SMS. Вызов будет работать примерно так:

$gv = new GoogleVoice("GmailAccount", "GmailPassword");
$gv->sms("PhoneNumber", "TextMsg");

Он работал безупречно до недавнего времени, по состоянию на 04/20/2015, Google прекратил поддерживать старые методы входа в учетную запись Google. Поэтому мой script перестает работать, давая 500 ошибок. Google говорит, что вы должны использовать OAuth 2.0 для аутентификации, однако я не нашел примеров онлайн о том, как это сделать с помощью Google Voice. Код ниже, я не написал это, пожалуйста, дайте мне знать, как настроить код для использования системы Google OAuth.

/*
Version     0.2
License     This code is released under the MIT Open Source License. Feel     free to do whatever you want with it.
Author      [email protected], http://www.lostleon.com/
LastUpdate  05/28/2010


Usage:


*/

class GoogleVoice
{
    public $username;
    public $password;
    public $status;
    private $lastURL;
    private $login_auth;
    private $inboxURL = 'https://www.google.com/voice/m/';
    private $loginURL = 'https://www.google.com/accounts/ClientLogin';
    private $smsURL = 'https://www.google.com/voice/m/sendsms';

public function __construct($username, $password)
{
    $this->username = $username;
    $this->password = $password;
}

public function getLoginAuth()
{
    $login_param = "accountType=GOOGLE&Email={$this->username}&Passwd={$this->password}&service=grandcentral&source=com.lostleon.GoogleVoiceTool";
    $ch = curl_init($this->loginURL);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20");
    curl_setopt($ch, CURLOPT_REFERER, $this->lastURL);
    curl_setopt($ch, CURLOPT_POST, "application/x-www-form-urlencoded");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $login_param);
    $html = curl_exec($ch);
    $this->lastURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);
    $this->login_auth = $this->match('/Auth=([A-z0-9_-]+)/', $html, 1);
    return $this->login_auth;
}

public function get_rnr_se()
{
    $this->getLoginAuth();
    $ch = curl_init($this->inboxURL);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $headers = array("Authorization: GoogleLogin auth=".$this->login_auth, 'User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $html = curl_exec($ch);
    $this->lastURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);
    $_rnr_se = $this->match('!<input.*?name="_rnr_se".*?value="(.*?)"!ms', $html, 1);
    return $_rnr_se;
}

public function sms($to_phonenumber, $smstxt)
{
    $_rnr_se = $this->get_rnr_se();
    $sms_param = "id=&c=&number=".urlencode($to_phonenumber)."&smstext=".urlencode($smstxt)."&_rnr_se=".urlencode($_rnr_se);
    $ch = curl_init($this->smsURL);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $headers = array("Authorization: GoogleLogin auth=".$this->login_auth, 'User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_REFERER, $this->lastURL);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $sms_param);      
    $this->status = curl_exec($ch);
    $this->lastURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    curl_close($ch);
    return $this->status;
}

private function match($regex, $str, $out_ary = 0)
{
    return preg_match($regex, $str, $match) == 1 ? $match[$out_ary] : false;
}
}

Ответ 1

Я пришлю вам следующий ответ: fooobar.com/questions/552652/...

неудачный голос Google изменил их API, поэтому вы больше не можете его использовать. https://github.com/aaronpk/Google-Voice-PHP-API (посмотрите комментарии в голове)

Google Voice не является открытым API, поэтому они не поддерживают его. Извините, что рассказываете вам, но по моему собственному опыту сегодня службы SMS настолько дешевы, что вам будет стоить меньше, чтобы фактически купить лицензию на обслуживание, чем бороться с Google и их постоянными изменениями API, ваш сайт всегда может отказаться от таких изменений. Думает о вашем времени как ресурсе, потратив ваше время, будет стоить больше!

Ответ 2

GV4J - это библиотека Java, которая может войти в Google Voice, поэтому это может быть хорошей ссылкой для обновления вашего PHP-кода чтобы иметь возможность аутентифицироваться.