2013-07-17 13 views
7

StackOverflow'ta ilk sorumu sorduğum için çok heyecanlıyım. Yıllar boyunca kendime çok şey öğretmek için ona güveniyorum!Mandrill ValidationError

Sorum şu ki. Ben Mandrill en API üzerinden bir posta göndermeye çalışırken aşağıdaki hatayı alıyorum:

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

aşağıdaki kod ben posta göndermek için denemek için kullanıyorum budur: Ne neden olabilecek

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

?> 

iletideki doğrulama hatası. API anahtarımı sağlıyorum VE geçerli!

Birisi size yardım edebilecek ve umarım burada olduğunuzu umarız!

Teşekkürler!

+0

Teşekkür Bu soruyu sorduğunuz için! Bütün gecemi cevap aramak için harcadım. – Ankit

cevap

11

Ayrıca sadece diziler kullanmak ve PHP sizin için JSON kodlamasını halledeyim isteyebilirsiniz . JSON herhangi bir nedenle geçersiz ise, bu belirli hata yaygındır. Yani, örneğin, bu gibi parametreleri ayarlayabilirsiniz: Ayrıca gerekirse yanıtı ayrıştırmak için json_decode kullanabilirsiniz

$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); 

.

+0

Vay teşekkürler! Burada büyük ipucu! – Dan

+0

Teşekkürler! İşe yaradı. Ama neden?? Sadece JSON ile neyin yanlış gittiğini kastediyorum. Şuan şaşkınım. Lütfen cevapla. – Ankit

2

Mandrill hakkında bilmiyorum, ancak $content dizesinin içinde " çift tırnak işareti var ve $postString da sınırlayıcınız da çift tırnak işaretleri içeriyor. Bu herhangi bir dilde kırılacak. Mandril'in gerektirdiği gibi $content'daki çift tırnaklardan kurtulmanız gerekir.

"html": "' . $content . '", deneyin

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

çevirmek olacaktır

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

yerine

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

Harika çalıştı! Çok teşekkürler! Gözlerimin bulanıklaşmış ve fark edilmemiş olduğunu düşün! – Dan

0

Ayrıca html kodundan yeni satırlar kaldırmak gerekir:

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

9

Bansi cevabı Dan B için çalıştı, ama başkasının aynı sorunu yaşıyorsa içeriği özel olup olmadığını kontrol etmek iyidir karakterler (aksan, umla, cedillas, kesme, vb). Eğer durum buysa çözüm metni kodlamak utf8 olabilir:

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

Bu benim için çalıştı - teşekkürler Jorge :) – Phil

0

Mandrill html zenginleştirilmiş ileti göndermesine Dan bukle kurulumu denemeler oldu mu, ama bu sefer template_content içinde html kullanarak: of [] dizi ileti/gönder-template.json api. i fark nedir

bu kurulum (Bansi tarafından düzeltme dahil) olmasıydı Mandrill en denemek sayfasında çalışmak gibiydi:

Ama benim php komut https://mandrillapp.com/api/docs/messages.JSON.html#method=send-template, ben bu inatçı You must specify a key value hatayı almaya devam etti.Anlaşılan this thread sayesinde ben istek başlıklarına charset utf8 ekleyerek sorunu çözüldü:

$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);