function uc_recurring_charge in Ubercart 5
2 calls to uc_recurring_charge()
- uc_recurring_admin_charge_form_submit in payment/uc_recurring/uc_recurring.module
- uc_recurring_cron in payment/uc_recurring/uc_recurring.module
- Implementation of hook_cron().
File
- payment/uc_recurring/uc_recurring.module, line 1056
- Allows you to add a recurring fee to a product/SKU to handle subscription
type services.
Code
function uc_recurring_charge($fee) {
static $show = TRUE;
$func = $fee['data']['charge_callback'];
if (!function_exists($func)) {
if ($show) {
watchdog('uc_recurring', t('Recurring payments failed to process due to invalid credit card gateway.'), WATCHDOG_ERROR);
$show = FALSE;
}
return FALSE;
}
$data = array(
'txn_type' => UC_CREDIT_REFERENCE_TXN,
'ref_id' => $fee['data']['ref_id'],
);
$result = $func($fee['order_id'], $fee['fee_amount'], $data);
if ($result['success'] === TRUE) {
uc_payment_enter($fee['order_id'], 'credit', $fee['fee_amount'], 0, $result['data'], t('Recurring fee payment.') . '<br />' . $result['comment']);
uc_order_comment_save($fee['order_id'], 0, t('!amount recurring fee collected for @model. (ID: <a href="!url">!fee</a>)', array(
'!url' => url('admin/store/orders/recurring/view/fee/' . $fee['rfid']),
'!fee' => $fee['rfid'],
'!amount' => uc_currency_format($fee['fee_amount']),
'@model' => $fee['data']['model'],
)));
module_invoke_all('recurring_api', 'charge', $fee);
workflow_ng_invoke_event('fee_charge_successful', uc_order_load($fee['order_id']));
if ($fee['remaining_intervals'] == 1) {
workflow_ng_invoke_event('fee_expires', uc_order_load($fee['order_id']));
}
}
else {
uc_order_comment_save($fee['order_id'], 0, t('Error: Recurring fee <a href="!url">!fee</a> for product @model failed.', array(
'!url' => url('admin/store/orders/recurring/view/fee/' . $fee['rfid']),
'!fee' => $fee['rfid'],
'@model' => $fee['data']['model'],
)));
watchdog('uc_recurring', t('Failed to capture recurring fee of !amount for product @model on order !order_id.', array(
'!amount' => $fee['fee_amount'],
'@model' => $fee['data']['model'],
'!order_id' => $fee['order_id'],
)), WATCHDOG_ERROR, l(t('order !order_id', array(
'!order_id' => $fee['order_id'],
)), 'admin/store/orders/' . $fee['order_id']));
module_invoke_all('recurring_api', 'fail', $fee);
workflow_ng_invoke_event('fee_charge_fails', uc_order_load($fee['order_id']));
}
return $result['success'];
}