2015-05-27 20 views
10

Tôi đã từng sử dụng Thư viện lớp PHP để kết nối với Google Voice để gửi tin nhắn văn bản SMS. Các cuộc gọi sẽ làm việc một cái gì đó như thế này:Google voice PHP OAuth 2.0

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

Nó làm việc hoàn hảo cho đến gần đây, tính đến 2015/04/20, Google ngừng hỗ trợ các phương pháp cũ của đăng nhập vào tài khoản Google. Vì vậy, kịch bản của tôi ngừng làm việc cho 500 lỗi. Google nói rằng bạn phải sử dụng OAuth 2.0 để xác thực tuy nhiên tôi chưa tìm thấy bất kỳ ví dụ trực tuyến nào về cách thực hiện điều này với Google Voice. Mã dưới đây, tôi chưa viết điều này, vui lòng cho tôi biết cách điều chỉnh mã để sử dụng Hệ thống OAuth của Google.

/* 
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; 
} 
} 
+0

chuyển sang Oauth2, xóa nội dung đăng nhập và mật khẩu. – DaImTo

+0

Không xuất hiện đơn giản như chuyển sang Oauth2. Không thể tìm thấy API cho Googlevoice (được yêu cầu bởi biến "phạm vi" khi sử dụng Oath2). Lời khuyên bổ sung được chào đón –

Trả lời

5

tôi sẽ gửi cho bạn câu trả lời tiếp theo: https://stackoverflow.com/a/4131915/2992810

đáng tiếc giọng nói google đã thay đổi API của họ, do đó bạn không thể sử dụng nó nữa. https://github.com/aaronpk/Google-Voice-PHP-API (xem các nhận xét trong phần đầu)

Google Voice không phải là API mở, do đó chúng không duy trì được. Xin lỗi đã nói với bạn, nhưng theo kinh nghiệm của riêng tôi, dịch vụ SMS của bạn rẻ đến nỗi bạn sẽ mất ít chi phí để mua giấy phép dịch vụ hơn là chiến đấu với Google và thay đổi API liên tục, trang web của bạn luôn có thể bị thay đổi. Hãy suy nghĩ về thời gian của bạn như một nguồn lực, chi tiêu thời gian của bạn sẽ chi phí bạn nhiều hơn nữa!

0

GV4J là thư viện Java có thể đăng nhập vào Google Voice, vì vậy đây có thể là tài liệu tham khảo tốt để cập nhật mã PHP của bạn để có thể xác thực.

Các vấn đề liên quan