циклические значения не работают для замен Sendgrid, но те же самые жестко запрограммированные значения работают

Я пытаюсь протестировать транзакционные шаблоны Sendgrid для работы. Я мог отправлять почту, когда значения были жестко закодированы, но не когда я предоставлял им переменную. Давайте взглянем:

мои заголовки:

$headers = array(
            'Content-Type: application/json',
            'Authorization: Bearer my_actual_api_key',
            );

мой массив $данных:

$resetLink = 'na';
$reset = 'Please, click here to activate your account';
$user = 'MyName';
$data = ['reset'=>$reset, 'user'=>$user, 'resetLink'=>$resetLink];

$subs создается следующим образом:

if($data){
        foreach($data as $k=>$v){
            $subs.= '"{{'.$k.'}}":"'.$v.'"';

            if($last_element != $v){
                $subs .=",";
            }
        }
    }

который выводит:

"{{reset}}": "Please, click here to activate your account.",
"{{user}}": "MyName",
"{{resetLink}}": "na"

Как раз то, что я хочу!

однако, если я это сделаю:

$json = '{
            "personalizations": [{
                "to": [{
                    "email": "'.$to.'",
                    "name": "Example 01"
                }],
                "subject": "'.$subject.'",
                "substitutions": {
                    '.$subs.'
                }
            }],
            "from": {
                "email": "'.$from.'",
                "name": "'.$from.'"
            },
            "reply_to": {
                "email": "'.$from.'",
                "name": "'.$from.'"
            },

            "template_id": "My_actual_temnplate_id"


        }';

Я вернусь:

{"errors":[{"message":"Bad Request","field":null,"help":null}]}

НО, если я это сделаю:

$json = '{
            "personalizations": [{
                "to": [{
                    "email": "'.$to.'",
                    "name": "Example 01"
                }],
                "subject": "'.$subject.'",
                "substitutions": {
                    "{{reset}}": "Please, click here to activate your account.",
                   "{{user}}": "MyName",
                   "{{resetLink}}": "na"
                }
            }],
            "from": {
                "email": "'.$from.'",
                "name": "'.$from.'"
            },
            "reply_to": {
                "email": "'.$from.'",
                "name": "'.$from.'"
            },

            "template_id": "1959ba19-3bc7-455b-a577-7a340f4c5fd9"
        }';

Я могу вывернуть URL и отправить свою почту без ошибок, используя следующее.

Вот cURL, стандартный материал:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.sendgrid.com/v3/mail/send");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

Я также попытался сделать этот json в виде массива, а затем использовать json_encode(), тоже не повезло, та же ошибка без сообщения, что и выше. Это json, который был предоставлен где-то на сайте Sendgrid, просто к вашему сведению.

Как видите, у меня все в виде строки, на которую приходится большинство ответов, которые я нашел. Может ли кто-нибудь пролить свет на то, почему это происходит? Заранее спасибо!


person Oman    schedule 12.12.2017    source источник


Ответы (1)


Пришел сегодня утром, и код сработал, больше не было проблем с этим циклом, генерирующим подстановки. Фреймворк (Yii2) был кеширующий. 1 обновление через несколько часов — это все, что нужно.

person Oman    schedule 13.12.2017