2013-07-17 15 views
7

Bardzo podekscytowany, że zadaję moje pierwsze pytanie dotyczące StackOverflow. Od lat polegam na tym, aby nauczyć się całkiem sporo!Mandrill ValidationError

Moje pytanie jest takie. Otrzymuję następujący błąd podczas próby wysłania poczty przez Mandrill API:

{"status":"error","code":-1,"name":"ValidationError","message":"You must specify a key value"} 

Kod, który następuje to co używam, aby spróbować wysłać mail:

<?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; 

?> 

Co może być przyczyną błąd sprawdzania poprawności w komunikacie. Dostarczam klucz API, ORAZ jest ważny!

Mam nadzieję, że ktoś będzie w stanie Ci pomóc, a dzięki za ogólne jest NIESAMOWITE!

Dzięki!

+0

Dziękuję za pytanie! Całą noc spędziłem szukając odpowiedzi. – Ankit

Odpowiedz

11

Można też po prostu użyć tablice, i niech PHP obsługiwać kodowanie JSON dla Ciebie . Ten konkretny błąd jest powszechny, jeśli JSON jest z jakiegoś powodu nieważny. Tak więc, na przykład, można ustawić parametry tak:

$params = array(
    "key" => "keyhere", 
    "message" => array(
     "html" => $content, 
     "text" => $content_text, 
     "to" => array(
      array("name" => $to, "email" => $to) 
     ), 
     "from_email" => $from, 
     "from_name" => $from, 
     "subject" => $subject, 
     "track_opens" => true, 
     "track_clicks" => true 
    ), 
    "async" => false 
); 

$postString = json_encode($params); 

Można również użyć json_decode do analizowania odpowiedzi w razie potrzeby.

+0

Wow, dziękuję! Świetna wskazówka tutaj! – Dan

+0

Dzięki! Zadziałało. Ale dlaczego?? Mam na myśli to, co było nie tak z samym JSON. Jestem teraz zdezorientowany. Proszę odpowiedz. – Ankit

2

Nie wiem o mandrill, ale Twój ciąg znaków ma podwójne cudzysłowy ", a ogranicznik w $postString jest również podwójnym cudzysłowem. To będzie się łamać w dowolnym języku. Musisz uciec z podwójnych cytatów z $content zgodnie z wymogami mandril.

"html": "' . $content . '", przełoży się

"html": "<p>this is the emails html <a href="www.google.co.uk">content</a></p>", 
              ^   ^

Spróbuj

"html": "' . str_replace('"','\\"',$content) . '", 
"text": "' . str_replace('"','\\"',$content_text) . '", 

Zamiast

"html": "' . $content . '", 
"text": "' . $content_text . '", 
+0

Pracował świetnie! Dzięki wielkie! Myślę, że moje oczy musiały być rozmyte i nie zauważone! – Dan

0

Również trzeba być usunięcie nowe linie z kodu HTML:

$content = trim(preg_replace('/\s+/', ' ', $content));

9

odpowiedź Bansi pracował Dan B, ale jeśli ktoś inny ma ten sam problem, dobrze jest sprawdzić, czy zawartość mieć specjalny znaki (akcenty, umlauty, cedile, apostrofy, itp.). Jeśli tak jest w przypadku rozwiązaniem mogłoby być utf8 zakodować tekst:

$content = utf8_encode('<p>Greetings from Bogotá, Colombia. Att:François</p>'); 
+0

To zadziałało dla mnie - dziękuje Jorge :) – Phil

0

eksperymentują z konfiguracji curl Dana comment html wzbogaconych wiadomości do Mandrill, ale tym razem przy użyciu html w template_content: [] tablica z message/send-template.json api.

Co zauważyłem, że ta konfiguracja (fix przez Bansi zestawie) wydawało się do pracy w wypróbowania stronie Mandrill za: https://mandrillapp.com/api/docs/messages.JSON.html#method=send-template

Ale w moim skrypt php, trzymałem otrzymaniu tego upartego You must specify a key value błąd.Apparantly dzięki this thread, rozwiązałem problem, dodając do zestawu nagłówków żądanie utf8: charset:

$ch = curl_init(); 
$headers = array("Content-type: application/json;charset=\"utf-8\""); 
curl_setopt($ch, CURLOPT_URL, $uri); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); 

$result = curl_exec($ch); 
Powiązane problemy