2016-09-02 14 views
0

У меня есть скрипт vxml, который ловит параметр post, чтобы отправить текстовое сообщение пользователю, чтобы собрать его электронную почту.Захват переменных Json данных из json_decode

Вот сценарий

 <?php 
header("Content-type: text/xml"); 
echo "<?xml version=\"1.0\"?>\n"; 

$PIN = $_GET['pin']; 
$CALLER = 1 . $_GET['callID']; 
$params['to'] = $CALLER; 
$params['from'] = "16172075679"; 
$params['body'] = "Please Respond To This Text Message With Your Email Address So We Can Better Serve You."; 
$params['result_url'] = "http://hubenterprises.com.mx/ParseSMSresponse.php"; 

//initialize curl 
$ch = curl_init(); 

// set necessary curl options 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); 
curl_setopt($ch, CURLOPT_URL, "http://hosting.plumgroup.com/ws/sms/queue.json"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERPWD, "[email protected]:Huba5474"); 

$result = curl_exec($ch); 
// process the json result body 
$json = (json_decode($result, true) !== null) ? json_decode($result, true) : false; 
$success = false; 
if ($json['status'] == 'success') { 
    $success = true; 
    $message_reference = $json['result']['sms_message']['sms_message_id'];//UPLOAD SMS MESSAGE ID 
    //INSERT HERE 


    // TODO: insert this value into your database with a pin or what have you for the user 
} 

curl_close($ch); 
?> 
<vxml version="2.0"> 
<form> 
    <block> 
     <log><? print_r($params) ?></log> 
     hello <value expr="'<? echo($CALLER) ?>'"/> 
     <? 
     var_dump($json); 
     var_dump($message_reference); 
     ?> 
    <return namelist=""/> 
    </block> 
</form> 
</vxml> 

Когда я var_dump ($ JSON) он выводит это и текстовое сообщение отсылается.

<?xml version="1.0"?> 
<vxml version="2.0"> 
<form> 
    <block> 
     <log>Array 
(
    [to] => 18159856396 
    [from] => 16172075679 
    [body] => Please Respond To This Text Message With Your Email Address So We Can Better Serve You. 
    [result_url] => http://hubenterprises.com.mx/ParseSMSresponse.php 
) 
</log> 
     hello <value expr="'18159856396'"/> 
     array(3) { 
    ["status"]=> 
    string(7) "success" 
    ["error"]=> 
    string(0) "" 
    ["result"]=> 
    array(1) { 
    ["sms_messages"]=> 
    array(1) { 
     [0]=> 
     array(7) { 
     ["sms_message_id"]=> 
     string(32) "5a6c5c7114a74679861209c27a083542" 
     ["to"]=> 
     string(11) "18159856396" 
     ["from"]=> 
     string(10) "6172075679" 
     ["body"]=> 
     string(87) "Please Respond To This Text Message With Your Email Address So We Can Better Serve You." 
     ["result_url"]=> 
     string(49) "http://hubenterprises.com.mx/ParseSMSresponse.php" 
     ["request_timestamp"]=> 
     int(1472838803) 
     ["status"]=> 
     string(6) "queued" 
     } 
    } 
    } 
} 
NULL 
    <return namelist=""/> 
    </block> 
</form> 
</vxml> 

Я не очень хорошо знаком с json_decode. как я могу поймать параметры, которые он выводит в переменных, чтобы я мог загрузить эту информацию в мою базу данных? Я попытался поймать их в $ message_reference (когда я var_dump ($ message_reference), он возвращает null).

Любые предложения?

ответ

1

$ message_reference возвращает null, потому что вы пытаетесь получить доступ к свойству, которого не существует. Выходной массив показывает ключ sms_messages, а не sms_message.

В дополнение к этому, sms_messages представляет собой массив. Поэтому для доступа к сообщению это будет $ json ['result'] ['sms_messages'] [0] - Это даст вам массив значений сообщений.

Так что я полагаю, вы могли бы сделать что-то вроде этого:

$message_array = $json['result']['sms_messages'][0]; 
$message_id = $message_array['sms_message_id']; 

И так далее для других значений в массиве.

Если вы ожидаете, что этот запрос на кружок будет возвращен сразу нескольким сообщениям, что, как представляется, вы получили, учитывая структуру ответа, вам придется поместить это в цикл foreach. Что бы что-то больше, как это ..

$messages = $json['result']['sms_messages']; 
foreach($messages as $message) 
{ 
    $message_id = $message['sms_message_id']; 
    // assign additional keys to variables and do something with the data 
    // for each message in the array. 
} 
+0

спасибо за комментарий, я дам ему бежать – Krunkmaster

+0

Изменено ответ включать случай использования для нескольких сообщений смс в одном ответе. Удачи. – Lynne

+0

Этот скрипт отправляет только один текст за звонок. Так что все, что мне нужно сделать, это захватить идентификатор сообщения sms в var. вся остальная информация не имеет значения – Krunkmaster

 Смежные вопросы

  • Нет связанных вопросов^_^