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
?
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. –
@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