function capture_payment($payment, $order_id = '', $total = '', $final = true)
{
global $insert_id;
if ($order_id == '') {
$order_id = $insert_id;
}
// auth
$apiContext = $this->apiContext();
try {
// get transaction
$transactions = $payment->getTransactions();
$transaction = $transactions[0];
$relatedResources = $transaction->getRelatedResources();
for ($i = 0, $n = count($relatedResources); $i < $n; $i++) {
$relatedResource = $relatedResources[$i];
if ($relatedResource->__isset('sale')) {
$resource = $relatedResource->getSale($relatedResource);
break;
}
if ($relatedResource->__isset('order')) {
$resource = $relatedResource->getOrder($relatedResource);
break;
}
if ($relatedResource->__isset('authorization')) {
$resource = $relatedResource->getAuthorization($relatedResource);
break;
}
}
if (is_object($resource)) {
$this->amount = $resource->getAmount();
$this->amount->__unset('details');
if ($total != '' && $total > 0) {
$this->amount->setTotal($total);
}
// set capture
$capture = new Capture();
$capture->setIsFinalCapture($final);
$capture->setAmount($this->amount);
try {
// capture
$resource->capture($capture, $apiContext);
$success = true;
} catch (Exception $ex) {
$this->LoggingManager->log(print_r($ex, true), 'DEBUG');
$success = false;
if (defined('RUN_MODE_ADMIN') && $ex instanceof \PayPal\Exception\PayPalConnectionException) {
$error_json = $ex->getData();
$error = json_decode($error_json, true);
$_SESSION['pp_error'] = $error['message'];
}
}
if ($success === true) {
if ($this->order_status_capture < 0) {
$check_query = xtc_db_query("SELECT orders_status\n FROM " . TABLE_ORDERS . " \n WHERE orders_id = '" . (int) $order_id . "'");
$check = xtc_db_fetch_array($check_query);
$this->order_status_capture = $check['orders_status'];
}
$this->update_order(TEXT_PAYPAL_CAPTURED, $this->order_status_capture, $order_id);
}
}
} catch (Exception $ex) {
$this->LoggingManager->log(print_r($ex, true), 'DEBUG');
}
}