2016-05-09 11 views
1

Ich verwende Laravel 5 Rahmen mit dem Hersteller zu kommunizieren, und ich kämpfen, um den Rückruf in Empfang:Laravel Serverexception in RequestException.php beim Empfang einfach JSON Anfrage

Hier sind die Routen (Set sie beide, nur zu testen):

Route::post('/callback', '[email protected]'); 
Route::get('/callback', '[email protected]'); 

und die einfache Methode in der Steuerung:

public function callback(Request $request) 
{ 
    var_dump($request); 
    //Storage::put('request.txt', $request); 
} 

es funktioniert gut, wenn ich die Seite manuell (Bedeutung öffnen, die Anfrage Dump und später Erstellen Sie die Anforderungsdatei), aber wenn Aufruf wie wie folgt aus:

/** 
* Test callback option 
*/ 
public function testCallback() 
{ 
    $callback_url = 'http://project.dev/callback'; 

    // Prepare response 
    $response = array(
     'time' => -microtime(true), 
    ); 

    $data = [ 
     "id" => 907, 
     "current_state" => "Shipped", 
     "merchant_sku" => "BST123", 
     "ordered_on_date" => "2015-08-16T00:00:00+0200", 
     "ship_by_date" => "2015-08-21T00:00:00+0200", 
     "shipping_carrier" => "USPS", 
     "shipping_tracking" => "9499907123456123456781", 
    ]; 

    try { 
     $result = Guzzle::post($callback_url, [ 
      'verify' => false, 
      'headers' => [ 
       'Content-Type' => 'application/json', 
      ], 
      'json' => $data, 
     ]); 
     $body = json_decode($result->getBody(), true); 

     // Fill response 
     if ($body['success'] == true) { 
      $response['success'] = true; 
      $response['order_id'] = $body['work_order_id']; 
     } else { 
      $response['success'] = false; 
     } 
    } catch (Exception $e) { 
     // Set error 
     $response['success'] = false; 
     $response['message'] = $e->getMessage(); 
    } 

    // Save execution time 
    $response['time'] += microtime(true); 
    $response['time'] = round(abs($response['time']), 4); 

    return $response; 
} 

erhalte ich diese Fehlermeldung:

ServerException in RequestException.php line 107: 
Server error: `POST http://project.dev/callback` resulted in a `500 Internal Server Error` response: 
<!DOCTYPE html> 
<html> 
<head> 
<meta name="robots" content="noindex,nofollow" /> 
<style> 
(truncated...) 

Edit: Die einzige errorlike Botschaft, die ich in php_error.log bekommen ist:

[09-May-2016 12:24:20 UTC] PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0 

Irgendwelche Ideen, was ich falsch mache und/oder wie zu debuggen und zu beheben?

Übrigens: Die Kommunikation findet zwischen zwei Laravel-Frameworks in der Sicherungsmaschine statt, das heißt, es ist site.dev Sendeanforderung an project.dev.

EDIT: Gefunden in Laravel Fehlerprotokoll beim Empfangen von POST. Es funktioniert mit GET zu finden.

[2016-05-09 15:21:25] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in D:\project.dev\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:67 

Warum Laravel auch diese interessieren, da ich Anfrage zu senden bin mit 'verify' => false?

+0

können Sie den Fehler mit Postman zum Beispiel reproduzieren? Setze env auf local und debug auf true und laravel wird dir höchstwahrscheinlich sagen, was falsch ist. –

+0

@FrankProvost Entschuldigung für verspätete Antwort. Ich habe bereits debuggen an und ich kann nichts sehen, was zu dem richtigen Fehler führt, * aber * es funktioniert gut, wenn ich eine Anfrage senden. – Peon

Antwort

0

Ich löste es. Ich zog die Routen außerhalb Middleware, so dass es nicht die Token-Validierung erfordern:

Route::post('/callback', '[email protected]'); 
Route::get('/callback', '[email protected]'); 

Route::group(['middleware' => ['web']], function() { 
    ... 
} 

Für den Fall, jemand anderes hat das gleiche Problem: Middleware ist nicht hier erforderlich, da der Hersteller nicht der Fall ist Verwenden Sie dieselbe Sitzung und können Sie das erforderliche Token nicht bereitstellen.

Verwandte Themen