$this->load->model('payment/pp_express');
$this->load->language('payment/pp_express');
$json = array();
if (isset($this->request->get['paypal_order_transaction_id'])) {
$transaction = $this->model_payment_pp_express->getFailedTransaction($this->request->get['paypal_order_transaction_id']);
if ($transaction) {
$call_data = unserialize($transaction['call_data']);
$result = $this->model_payment_pp_express->call($call_data);
if ($result) {
$parent_transaction = $this->model_payment_pp_express->getLocalTransaction($transaction['parent_transaction_id']);
if ($parent_transaction['amount'] == abs($transaction['amount'])) {
$this->db->query("UPDATE `" . DB_PREFIX . "paypal_order_transaction` SET `payment_status` = 'Refunded' WHERE `transaction_id` = '" . $this->db->escape($transaction['parent_transaction_id']) . "' LIMIT 1");
} else {
$this->db->query("UPDATE `" . DB_PREFIX . "paypal_order_transaction` SET `payment_status` = 'Partially-Refunded' WHERE `transaction_id` = '" . $this->db->escape($transaction['parent_transaction_id']) . "' LIMIT 1");
}
if (isset($result['REFUNDTRANSACTIONID'])) {
$transaction['transaction_id'] = $result['REFUNDTRANSACTIONID'];
} else {
$transaction['transaction_id'] = $result['TRANSACTIONID'];
}
if (isset($result['PAYMENTTYPE'])) {
$transaction['payment_type'] = $result['PAYMENTTYPE'];
} else {
$transaction['payment_type'] = $result['REFUNDSTATUS'];
}
if (isset($result['PAYMENTSTATUS'])) {
$transaction['payment_status'] = $result['PAYMENTSTATUS'];
} else {
$transaction['payment_status'] = 'Refunded';
}
if (isset($result['AMT'])) {
$transaction['amount'] = $result['AMT'];
} else {
$transaction['amount'] = $transaction['amount'];
}
$transaction['pending_reason'] = (isset($result['PENDINGREASON']) ? $result['PENDINGREASON'] : '');
$this->model_payment_pp_express->updateTransaction($transaction);
$json['success'] = $this->language->get('success_transaction_resent');
} else {
$json['error'] = $this->language->get('error_timeout');
}
} else {
$json['error'] = $this->language->get('error_transaction_missing');
}
} else {
$json['error'] = $this->language->get('error_data');
}
$this->response->setOutput(json_encode($json));