m0pfin
@m0pfin

Как вытянуть данные с JSON?

Доброго дня столкнулся с проблемой, по API tinkoff
При успешной оплате они прислыают JSON массив с данными

Пример:
ТЫК
{
  "TerminalKey":"1510572937960",
  "OrderId":"test2",
  "Success":true,
  "Status":"CONFIRMED",
  "PaymentId":2006896,
  "ErrorCode":"0",
  "Amount":102120,
  "CardId":867911,
  "Pan":"430000**0777",
  "ExpDate":"1122",
  "Token":"d0815e288f121255d5d6b77831fb486cc5e9f91914a3f58a99b6118b54676d84"
}



И говорят что остальные данные кладут в DATA
DATA	String	Дополнительные параметры платежа, переданные при создании заказа


Но не пишут как получить оттуда допустим поле Email

Я так понимаю это должно выглядеть так?
"DATA" : {"Email": "mail@bk.ru", "Another":"Test"}

Или не так, вобщем не могу получить данные об Email

Код скрипта обработчика:
ТЫК
<?php
require '../bot/vendor/autoload.php'; //Подключаем библиотеку
use Telegram\Bot\Api;

$telegram = new Api('API_TOKEN'); //Устанавливаем токен, полученный у BotFather


$result = json_decode(file_get_contents('php://input'));

if($result->Status == CONFIRMED ){

    $Amount = $result->Amount/100;

    echo "OK"; // Отсылаем ответ тинькову что получили нотификацию

    /*
    echo $result->Status.'<br>';
    echo 'Новый платеж: '.$result->OrderId;
    echo '<br>Сумма: '.$Amount;
    echo '<br>Информация : '.$result->DATA;
*/
    if ($result->Success == true) {

        $reply = "
<code>Новый платеж: </code>$result->Status
<code>Сумма: </code> $Amount р.
<code>Номер заказа: </code>$result->OrderId
<code>Информация: </code>$result->DATA";

        $telegram->sendMessage([ 'chat_id' => $chat_id, 'parse_mode' => 'HTML', 'text' => $reply ]);
    }
}

elseif($result->Status == AUTHORIZED ){

    echo "OK"; // Отсылаем ответ тинькову что получили нотификацию
/*
    echo '<br>'.$result->Status.'<br>';
    echo 'Деньги захолдированы на карте клиента. Ожидается подтверждение операции*';
*/
}

elseif($result->Status == REVERSED ){

    echo "OK"; // Отсылаем ответ тинькову что получили нотификацию
/*
    echo $result->Status.'<br>';
    echo 'Операция отменена';
*/
}

elseif($result->Status == REFUNDED ){
   
    echo "OK"; // Отсылаем ответ тинькову что получили нотификацию
 /*
    echo $result->Status.'<br>';
    echo 'Произведён возврат';
  */
}

elseif($result->Status == PARTIAL_REFUNDED ){

    echo "OK"; // Отсылаем ответ тинькову что получили нотификацию
 /*
    echo $result->Status.'<br>';
    echo 'Произведён частичный возврат';
  */
}

elseif($result->Status == REJECTED ){

    echo "OK"; // Отсылаем ответ тинькову что получили нотификацию
    /*
       echo $result->Status.'<br>';
       echo 'Списание денежных средств закончилась ошибкой';
       */
}

?>
Документация

Все остальные данные получаю, кроме тех что содержатся в DATA
  • Вопрос задан
  • 393 просмотра
Решения вопроса 1
@glagolew059
frontend developer
$tmp = $result->DATA;
$email = $tmp[0]->Email;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
В этом JSON вообще нет поля DATA, расходимся.
Ответ написан
m0pfin
@m0pfin Автор вопроса
Тоесть чтобы достать Email нужно указать так?

$result->DATA->Email;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы