2014-04-20 13 views
5

tôi sử dụng đoạn mã sau để có mã thông báo bearer:Twitter 1.1 OAuth authenticity_token_error (99)

$token = base64_encode($client_id.':'.$client_sec); 

$data = array ('grant_type' => 'client_credentials'); 
$data = http_build_query($data); 

$header = array(
    'Authorization: Basic '.$token, 
    'Content-type: application/x-www-form-urlencoded;charset=UTF-8', 
    'Content-Length: ' . strlen($data) 
); 

$options = array(
    CURLOPT_HTTPHEADER => $header, 
    CURLOPT_HEADER => false, 
    CURLOPT_URL => 'https://api.twitter.com/oauth2/token', 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_POSTFIELDS => $data 
); 

$ch = curl_init(); 
curl_setopt_array($ch, $options); 
$result = curl_exec($ch); 
curl_close($ch); 
print_r($result); 
exit; 

Nhưng đầu ra tất cả các thời gian:

{"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable to verify your credentials"}]}

Những gì tôi làm sai rồi?

+1

Vâng, rất có thể thông tin đăng nhập không đúng và do đó chúng không thể được xác thực? – hakre

+0

Vâng, cảm ơn bạn. –

Trả lời

12

Sau khi chiến đấu với vấn đề này trong một thời gian, tôi phát hiện ra sự cố là tôi đã thực hiện cuộc gọi đến/oauth2/token bằng Trình khách nâng cao từ trình duyệt mà tôi đã đăng nhập vào Twitter bằng. Sau khi đăng xuất khỏi Twitter và thực hiện lại cuộc gọi API, nó hoạt động tốt.

Câu trả lời ngắn: đảm bảo rằng bạn chưa có phiên hoạt động được đăng nhập vào Twitter khi cố yêu cầu mã thông báo Vòng đệm.

+0

Bạn đã cứu mạng tôi. – xiidarkevil

4

Tôi đã vật lộn với điều này một lúc và không có câu trả lời nào tôi tìm thấy có vẻ hữu ích. Các tài liệu cho lỗi cũng là một mơ hồ "một cái gì đó đã đi sai".

Vấn đề của tôi là tôi đã sử dụng một mashup mã tôi tìm thấy, và các tiêu đề đã không được sử dụng một cách chính xác:

$headers = array(
    'Authorization' => 'Basic ' . base64_encode($appid . ':' . $secret), // WRONG!!! 

    'Authorization: Basic ' . base64_encode($appid . ':' . $secret),  // Correct! 
    'Content-Type: application/x-www-form-urlencoded;charset=UTF-8',  // Correct! 
); 

Đối với tôi, vấn đề là tiêu đề ủy quyền đã sử dụng định dạng giá trị khóa , trong khi tiêu đề kiểu nội dung thì không. Điều này đã phá vỡ tiêu đề ủy quyền.

Dưới đây là một số điều khác để kiểm tra cũng liên quan đến lỗi 99:

  1. Xác minh rằng thông tin của bạn là chính xác và mã hóa base64 (xem ở trên)
  2. Hãy chắc chắn rằng yêu cầu được sử dụng POST
  3. Đảm bảo loại nội dung được đặt (xem bên trên)
  4. Đảm bảo bạn đã bao gồm grant_type = client_credentials làm trường bài đăng.
  5. Yêu cầu SSL, đảm bảo rằng bạn đang sử dụng SSL (https: //)
  6. Hãy thử verbose logging để giúp gỡ lỗi. Nó sẽ bao gồm thông tin chứng chỉ SSL, tiêu đề ủy quyền và tiêu đề loại nội dung của bạn. Tuy nhiên, điều này sẽ không hiển thị trường grant_type, chỉ tiêu đề.
  7. Nếu mọi thứ có vẻ OK nhưng vẫn không hoạt động, bạn có thể nhận được tỷ lệ giới hạn. Giới hạn tốc độ được đặt lại sau mỗi 15 phút.

Khi bạn cuối cùng nhận được mã thông báo truy cập, hãy đảm bảo bạn lưu bộ nhớ cache để tránh giới hạn tốc độ. Bạn nhận được 450 yêu cầu mỗi 15 phút, tôi tin. Một nửa số tiền đó sẽ được dùng để nhận mã thông báo truy cập của bạn nếu bạn không lưu vào bộ nhớ cache!

+1

Cá nhân tôi bị thiếu 'Cơ bản' trước khóa + mật mã được mã hóa –

0

Sau khi chiến đấu với vấn đề này, tôi cuối cùng đã đưa ra giải pháp. Twitter không thực sự gửi đúng thông điệp nếu lỗi tồn tại ở bất cứ đâu.

Khi tôi gửi yêu cầu từ curl, nó hoạt động tốt nhưng khi thông qua mã. tôi đã gặp lỗi tương tự {"errors":[{"label":"authenticity_token_error","code":99,"message":"Unable to verify your credentials"}]}

Vì vậy, những gì tôi gặp phải, sự cố đang nằm trong tiêu đề Kiểm soát truy cập.thiết lập những tiêu đề không làm việc cho tôi

 xhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded") 
    xhttp.setRequestHeader('Access-Control-Allow-Headers', '*'); 
    xhttp.setRequestHeader('Access-Control-Allow-Origin', '*') 
    xhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest') 

như một workaround tôi chỉ sử dụng url này để yêu cầu bỏ qua để xử lý CORS

https://cors-anywhere.herokuapp.com/https://api.twitter.com/oauth2/token 

thêm "https://cors-anywhere.herokuapp.com/" trước khi url thực tế và nó bắt đầu làm việc. hy vọng ai đó có thể gặp vấn đề này trong sự cố

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