Я получаю подтверждение платежной транзакции платежного шлюза с использованием следующего API. Но я не могу получить ответ и вставить его в базу данных.
Мой контроллер:
$transaction_id= filter_input(INPUT_POST, 'pay_id');
$api = new Api('ID', 'key');
//getting object of transation
$payment = $api->payment->fetch($transaction_id);
//passing payment details to database
$this->Payment_model->set_payment($transaction_id,true);
Текущая структура массива $payment:
pay\Api\Payment Object ( [attributes:protected] => Array ( [id] => pay_BVzDNK3vsp4Owl [entity] => payment [amount] => 35400 [currency] => INR [status] => authorized [order_id] => ) )
Мой pay_model.php:
public function set_payment($payment,$first)
{
$data = array(
'id' => $id,
'entity' => $entity,
'amount' => $amount,
'currency' => $currency,
'status' => $status,
'order_id' => $order_id,
'updated_at' => date('Y-m-d H:i:s')
);
if ($first == TRUE) {
//print_r($data);
// echo "breakpoint--i am in set user model id 0";
return $this->db->insert('payments', $data);
} else {
//echo "breakpoint--i am in set user model id not 0";
$this->db->where('id', $id);
return $this->db->update('payments', $data);
}
}
Проблема: Мой массив $ data всегда принимает значения NULL. Как использовать данные, которые я получаю, и передать модели для операций вставки / обновления.






Значение массива $data не определено в области действия функции (что дает вам значение NULL).
У вас 2 ошибки. Сначала отправляем правильные данные в функцию set_payment:
$payment = $api->payment->fetch($transaction_id);
$this->Payment_model->set_payment($transaction_id,true);
Я думаю, что вторая строка должна быть:
$this->Payment_model->set_payment($payment,true);
Как отправка $payment, а не $transaction_id.
Вторая ошибка - при использовании данных в функции set_payment. При создании $data вы должны использовать его как:
'id' => $payment['id'], //and no just $id
'entity' => $payment['entity'],//and no just $entity as those var not exist in this scope
// and so on...
в set_payment():
ваш массив данных должен выглядеть так:
$data = array(
'id' => $payment['id'],
'entity' => $payment['entity'],
'amount' => $payment['amount'],
'currency' => $payment['currency'],
'status' => $payment['status'],
'order_id' => $payment['order_id'],
'updated_at' => date('Y-m-d H:i:s'));
Спасибо решено. Передача идентификатора транзакции была опечаткой, но основное предположение заключалось в том, что я думал, что эти переменные будут в пределах области видимости, как мы передаем массив $ data в представление из контроллера. Спасибо.