Mandrill ValidationError
Sehr aufgeregt, um zu Fragen, meine erste Frage auf StackOverflow. Ich habe das Vertrauen auf Sie zu unterrichten selbst eine ganze Menge über die Jahre!
Meine Frage ist. Ich erhalte die folgende Fehlermeldung beim Versuch zu senden eine E-mail über Mandrill-API:
{"status":"error","code":-1,"name":"ValidationError","message":"You must specify a key value"}
Code, der folgt, ist das, was ich benutze, um zu versuchen, um die mail zu senden:
<?php
$to = '[email protected]';
$content = '<p>this is the emails html <a href="www.google.co.uk">content</a></p>';
$subject = 'this is the subject';
$from = '[email protected]';
$uri = 'https://mandrillapp.com/api/1.0/messages/send.json';
$content_text = strip_tags($content);
$postString = '{
"key": "RR_3yTMxxxxxxxx_Pa7gQ",
"message": {
"html": "' . $content . '",
"text": "' . $content_text . '",
"subject": "' . $subject . '",
"from_email": "' . $from . '",
"from_name": "' . $from . '",
"to": [
{
"email": "' . $to . '",
"name": "' . $to . '"
}
],
"track_opens": true,
"track_clicks": true,
"auto_text": true,
"url_strip_qs": true,
"preserve_recipients": true
},
"async": false
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
$result = curl_exec($ch);
echo $result;
?>
Was könnte die Ursache der Fehler bei der überprüfung der in der Meldung. Ich liefere mein API-Schlüssel, UND es ist gültig!
Hoffe, jemand wird in der Lage sein, zu helfen, und vielen Dank für die in der Regel GENIAL hier!
Dank!
- Vielen Dank für diese Frage! Ich verbrachte mein ganze Nacht auf der Suche nach der Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht möchten Sie auch nur arrays, und lassen Sie PHP verarbeiten des JSON-Kodierung für Sie. Dieser spezielle Fehler ist üblich, wenn die JSON ist ungültig aus irgendeinem Grund. So, zum Beispiel, können Sie Ihre Parameter wie folgt:
Können Sie auch
json_decode
zum Parsen der Antwort, wenn erforderlich.Bansi Antwort arbeitete für Dan-B, aber wenn jemand anderes mit dem gleichen Problem, ist gut zu prüfen, ob der Inhalt Sonderzeichen (Akzente,Umlaute,cedillas,Apostrophe,etc.). Wenn das der Fall ist, die Lösung könnte sein, die utf8-Kodierung der text:
Ich weiß nicht, über mandrill, aber Ihre
$content
Zeichenfolge doppelte Anführungszeichen"
in Sie und Ihre Trennzeichen in der$postString
ist auch doppelte Anführungszeichen. Dies ist zu brechen, in jeder Sprache. Sie müssen zu entkommen, der doppelten Anführungszeichen in die$content
wie von Welle."html": "' . $content . '",
übersetzen zuVersuchen
Statt
PHP-Mandrill-API-Fehler: "Mandrill_ValidationError - müssen Sie einen Schlüssel-Wert"
Dieser Fehler kann auch darauf hindeuten, dass die Funktionen json_encode() nicht Kodieren und die Rückgabe ein leerer string. Wenn der leere string ist eingereicht Mandrill über curl, es schlägt fehl, um Sie wissen zu lassen, dass es völlig leer, Inhalte zu VERÖFFENTLICHEN, und stattdessen Fragen, die hilfreiche Meldung "geben Sie einen Schlüssel-Wert".
Offensichtlich dieses problem könnte gemildert werden durch eine bessere Erkennung auf mehreren Ebenen:
Keiner von diesen wird an dieser Stelle fertig, also das war unnötig schwer zu Debuggen.
Die einfache Lösung in meinem Fall war, um effektiv code zu ändern führen Sie base64_encode() vor, einschließlich Bild-Inhalt, das ist:
Einen besseren fix ist, wie oben, zu aktualisieren, die Mandrill.php API-Datei, um einen Fehler erkennen zu Kodieren und wirft einen Fehler.
base64_encode()
um mPDF der Zeichenfolge-Wert behoben, mein problem, Danke.Darüber hinaus müssen Sie auch zu entfernen, werden neue Zeilen aus dem html-code:
$content = trim(preg_replace('/\s+/', ' ', $content));
Haben experimentiert mit Dan ' s curl-setup zu posten html, angereichert Nachrichten zu Mandrill, aber dieses mal mit html in der template_content: [] - array der Nachricht/senden-Vorlage.json api.
Was ich bemerkte, war, dass dieses setup (Update Bansi im Lieferumfang enthalten) zu arbeiten schien in Mandrill ' s ausprobieren Seite : https://mandrillapp.com/api/docs/messages.JSON.html#method=send-template
Aber in meinem php-Skript, hielt ich den Erhalt dieser hartnäckige
You must specify a key value
Fehler. Offenbar Dank dieser thread, ich habe das Problem gelöst, durch hinzufügen von utf-8 als Zeichensatz in Kopfzeilen der Anfrage: