2012-01-29 41 views
5

Tôi đã thử sử dụng thư viện Twitter OAUTH của Matt Harris (https://github.com/themattharris/tmhOAuth) thay thế dữ liệu mặc định bằng các khóa và mã của tôi, nhưng vì một số lý do Tôi không thể nhận được mã phản hồi hợp lệ.Twitter OAUTH - trả về mã phản hồi của "0"

Url tôi đang thử nghiệm với kết thúc bằng cổng (8888), nhưng tôi không chắc chắn liệu đó có phải là do nó hay không. Tôi đang tailing bản ghi PHP và không có lỗi.

$tweet_text = 'Hello world!'; 
print "Posting...\n"; 
$result = post_tweet($tweet_text); 
print "Response code: " . $result . "\n"; 

function post_tweet($tweet_text) { 

    require_once('tmhOAuth.php'); 

    $connection = new tmhOAuth(array(
    'consumer_key' => '(hidden)', 
    'consumer_secret' => '(hidden)', 
    'user_token'  => '(hidden)', 
    'user_secret'  => '(hidden)', 
)); 

    $connection->request('POST', 
    $connection->url('1/statuses/update'), 
    array('status' => $tweet_text)); 

    return $connection->response['code']; 
} 

Có ai có ý tưởng nào không?

Rất cám ơn.

Trả lời

1

Nếu bạn so sánh với https://github.com/themattharris/tmhOAuth/blob/master/examples/tweet.php mã của bạn có thể cần phải thay đổi để trông giống như:

$code=$connection->request('POST', ...); 
return $code; 

Tuy nhiên, nhìn vào mã nguồn, cho thấy hai điều. Đầu tiên, mã của bạn phải tốt như vậy, bởi vì $this->response['code'] được đặt thành giá trị được trả lại. Thứ hai là chức năng đó (thực tế là curlit()) cũng có thể trả về void. Khi đó, response['code'] không được xác định. (Điều này trông giống như một thư viện twitter đầy hứa hẹn cho đến khi tôi thấy lỗi thiết kế đó.)

Thậm chí còn hơn nữa, nó sẽ chỉ trả lại khi cótồn tại và đúng. Bạn không làm điều đó, và chúng tôi đã đi vòng tròn đầy đủ để không thể giải thích hành vi bạn thấy.

Vì vậy, bước khắc phục sự cố tiếp theo của tôi là đặt error_reporting(E_ALL|E_NOTICE) ở trên cùng, sau đó kiểm tra nhật ký lỗi để biết thêm manh mối. Ngoài ra, hãy gọi số print_r($connection->response) sau khi gọi tới số request() để xem bạn có gì khác trong đó.

14

Tôi có vấn đề này và đó là do sự thay đổi gần đây trong tháng 12 2011:

"defaulted CURLOPT_SSL_VERIFYPEER true"

Nếu bạn đổ $ connection-> phản ứng như Darren khuyên, bạn có thể thấy lỗi như thế này: Tôi đã có:

chuỗi (165) "chứng chỉ thiết lập lỗi xác minh vị trí:"

Hoặc đảm bảo rằng tệp chứng chỉ cacert.pem được đặt đúng chỗ hoặc tắt SSL_VERIFYPEER.

tôi sẵn sàng đặt cược rằng điều này sẽ khắc phục vấn đề của bạn (mặc dù nó có thể không phải là giải pháp an toàn nhất):

$connection = new tmhOAuth(array(
    'consumer_key'   => '(hidden)', 
    'consumer_secret'  => '(hidden)', 
    'user_token'   => '(hidden)', 
    'user_secret'   => '(hidden)', 
    'curl_ssl_verifypeer' => false 
)); 

Cập nhật tháng 2 năm 2015

Nhìn lại về câu trả lời này ngày hôm nay , Tôi nhận ra rằng tư vấn cho mọi người đặt curl_ssl_verifypeer thành false không phải là một câu trả lời rất hay (lúc này bạn không còn có thể chắc chắn mình đang nói chuyện với Twitter nữa, nên thực ra đó là một câu trả lời khủng khiếp). Thay vào đó, hãy thực hiện các lời khuyên khác mà tôi đã đưa ra và đảm bảo tệp Chứng chỉ Gốc CA thích hợp (cacert.pem) được đặt ra.

+0

Cảm ơn mike, dòng đơn mà tôi bị thiếu trong tệp của tôi và cuối cùng là hoạt động của nó :) –

1

Có vẻ như bạn cần đảm bảo bạn có chứng chỉ hiện tại.

According to TMH's git repo:

Version 0.60 cứng an ninh của thư viện và mặc định curl_ssl_verifypeer là true. Vì một số nhà cung cấp dịch vụ lưu trữ không cung cấp tệp gốc chứng chỉ mới nhất, nó hiện được bao gồm trong kho lưu trữ của TMH. Nếu phiên bản đã lỗi thời HOẶC bạn muốn tải xuống bản thân chứng chỉ, bạn có thể tải chúng xuống từ: http://curl.haxx.se/ca/cacert.pem

Trước khi nâng cấp phiên bản tmhOAuth mà bạn sử dụng, hãy đảm bảo xác minh xử lý SSL hoạt động trên máy chủ của bạn bằng cách chạy tập lệnh mẫu/verify_ssl.php.

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