Ross Beer Ross Beer - 9 days ago 6
PHP Question

OpenCart PHP Callback Array Trouble

I am trying to write a Netbanx API extension and accessing the array is failing.
I get PHP errors for Undifined index on interrogation.

Array dump is:


Array (
[transaction_status] => success
[transaction_merchantRefNum] => 476
[id] => 271ZH271ZH271Z
[transaction_amount] => 4200 )


my Callback function is:

public function callback() {
$this->language->load('payment/netbanx_payments');
$this->load->model('checkout/order');
$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
$this->log->write(print_r($_POST, 1)); //FOR DEBUGGING
if(isset($_POST['transaction_merchantRefNum'])){
$orderId = $_POST['transaction_merchantRefNum'];
if(in_array($orderId, $_POST)){
$message = '';

if (isset($_POST[1])) {
$message .= 'transaction_merchantRefNum: ' . $_POST[1] . "\n";
}

if (isset($_POST[3])) {
$message .= 'transaction_amount: ' . $_POST[3] . "\n";
}

if (isset($_POST[2])) {
$message .= 'id: ' . $_POST[2] . "\n";
}

if ($_POST[0] == 'success') {
$this->model_checkout_order->update($this->request->get['order_id'], $this->config->get('netbanx_payments_order_status_id'), $message, false);
} else {
$this->model_checkout_order->update($this->request->get['order_id'], $this->config->get('config_order_status_id'), $message, false);
}

$this->redirect($this->url->link('checkout/success'));
unset($myarray);
}

Answer

You are getting those warnings very correctly!

In your code you are accessing the $_POST indexes as they were numbers but they are not.

Thus you cannot do

$_POST[1]

If your POST array has only string indexes, instead of this you have to do

$_POST['transaction_merchantRefNum']

And in OpenCart I recommend to use the libraries you have at hand, thus instead of accessing the $_POST directly, access it via system library, i.e. $this->request->post.