public function generateHtmlRecurrence($days, $amount, $currency, $comment, array $data, XenForo_View $view) { $data[] = utf8_strtolower($currency); $data[] = $amount; $processorModel = $this->_getProcessorModel(); $itemId = $processorModel->generateItemId('bdshop', XenForo_Visitor::getInstance(), $data); $processorNames = $processorModel->getProcessorNames(); $processors = array(); foreach ($processorNames as $processorId => $processorClass) { $processors[$processorId] = bdPaygate_Processor_Abstract::create($processorClass); } $recurringInterval = false; $recurringUnit = false; if ($days > 0) { if ($days % 360 == 0) { $recurringInterval = $days / 365; $recurringUnit = bdPaygate_Processor_Abstract::RECURRING_UNIT_YEAR; } elseif ($days % 30 == 0) { $recurringInterval = $days / 30; $recurringUnit = bdPaygate_Processor_Abstract::RECURRING_UNIT_MONTH; } else { $recurringInterval = $days; $recurringUnit = bdPaygate_Processor_Abstract::RECURRING_UNIT_DAY; } } return implode('', bdPaygate_Processor_Abstract::prepareForms($processors, $amount, $currency, $comment, $itemId, $recurringInterval, $recurringUnit, array(bdPaygate_Processor_Abstract::EXTRA_RETURN_URL => XenForo_Link::buildPublicLink('full:shop/thanks')))); }
public function renderHtml() { $processors =& $this->_params['processors']; if (!empty($processors)) { $resource =& $this->_params['resource']; $visitor = XenForo_Visitor::getInstance(); $processor = reset($processors); $this->_params['forms'] = bdPaygate_Processor_Abstract::prepareForms($processors, $resource['price'], $resource['currency'], sprintf('%s: %s (%s)', new XenForo_Phrase('bdpaygate_purchase_resource'), $resource['title'], $visitor['username']), $processor->getModelFromCache('bdPaygate_Model_Processor')->generateItemId('resource_purchase', $visitor, array($resource['resource_id'])), false, false, array(bdPaygate_Processor_Abstract::EXTRA_RETURN_URL => XenForo_Link::buildPublicLink('full:resources/purchase-complete', $resource))); } }
public function actionUpgrades() { $response = parent::actionUpgrades(); if ($response instanceof XenForo_ControllerResponse_View and $response->subView != null and $response->subView->templateName == 'account_upgrades') { $viewParams =& $response->subView->params; // prepare all available processors /* @var $processorModel bdPaygate_Model_Processor */ $processorModel = $this->getModelFromCache('bdPaygate_Model_Processor'); $processorNames = $processorModel->getProcessorNames(); $processors = array(); foreach ($processorNames as $processorId => $processorClass) { $processors[$processorId] = bdPaygate_Processor_Abstract::create($processorClass); } $viewParams['processors'] = $processors; } return $response; }
public function renderHtml() { if ($this->_bdPaygate_parentHasMethod('renderHtml')) { parent::renderHtml(); } $processors =& $this->_params['processors']; if (!empty($processors)) { $available =& $this->_params['available']; $visitor = XenForo_Visitor::getInstance(); $itemId = false; $itemName = false; foreach ($available as &$upgrade) { $processor = reset($processors); $itemId = $processor->getModelFromCache('bdPaygate_Model_Processor')->generateItemId('user_upgrade', $visitor, array($upgrade['user_upgrade_id'])); $itemName = strval(new XenForo_Phrase('account_upgrade') . ': ' . $upgrade['title'] . ' (' . $visitor['username'] . ')'); $upgrade['paymentForms'] = bdPaygate_Processor_Abstract::prepareForms($processors, $upgrade['cost_amount'], $upgrade['cost_currency'], $itemName, $itemId, $upgrade['recurring'] ? $upgrade['length_amount'] : false, $upgrade['recurring'] ? $upgrade['length_unit'] : false, array(bdPaygate_Processor_Abstract::EXTRA_RETURN_URL => XenForo_Link::buildPublicLink('full:account/upgrade-purchase'))); } } }
public function actionPurchase() { list($resource, $category) = $this->_getResourceViewInfo(); /** @var bdPaygate_XenResource_Model_Resource_Base $resourceModel */ $resourceModel = $this->_getResourceModel(); if (!$resourceModel->bdPaygate_mustPurchaseToDownload($resource)) { return $this->responseNoPermission(); } if (!$resourceModel->bdPaygate_canPurchaseResource($resource, $category, $errorPhraseKey)) { throw $this->getErrorOrNoPermissionResponseException($errorPhraseKey); } /* @var $processorModel bdPaygate_Model_Processor */ $processorModel = $this->getModelFromCache('bdPaygate_Model_Processor'); $processorNames = $processorModel->getProcessorNames(); $processors = array(); foreach ($processorNames as $processorId => $processorClass) { $processors[$processorId] = bdPaygate_Processor_Abstract::create($processorClass); } $viewParams = array('resource' => $this->_getResourceModel()->prepareResource($resource), 'category' => $category, 'processors' => $processors); return $this->responseView('bdPaygate_ViewPublic_Resource_Purchase', 'bdpaygate_resource_purchase', $viewParams); }
public static function getSubscriptionLink($subscriptionId) { $processor = bdPaygate_Processor_Abstract::create(__CLASS__); $payPalUrl = $processor->_sandboxMode() ? 'https://www.sandbox.paypal.com' : 'https://www.paypal.com'; return sprintf('%s/customerprofileweb?cmd=_manage-paylist', $payPalUrl); }
XenForo_Autoloader::getInstance()->setupAutoloader($fileDir . '/library'); XenForo_Application::initialize($fileDir . '/library', $fileDir); XenForo_Application::set('page_start_time', $startTime); $dependencies = new XenForo_Dependencies_Public(); $dependencies->preLoadData(); // requires to get registered event listeners if (!isset($_GET['p'])) { die('Invalid callback request'); } $processorId = $_GET['p']; $processorModel = XenForo_Model::create('bdPaygate_Model_Processor'); $names = $processorModel->getProcessorNames(); if (!isset($names[$processorId])) { die('Invalid processor specified'); } $processor = bdPaygate_Processor_Abstract::create($names[$processorId]); $request = new Zend_Controller_Request_Http(); $response = new Zend_Controller_Response_Http(); $logMessage = ''; $logDetails = array(); $transactionId = false; $paymentStatus = false; $itemId = false; $amount = false; $currency = false; try { $validateResult = false; try { // try to use the validateCallback method version 2 with support for amount and // currency extraction $validateResult = $processor->validateCallback2($request, $transactionId, $paymentStatus, $logDetails, $itemId, $amount, $currency);
protected function _processUserUpgrade($isAccepted, $user, $data, bdPaygate_Processor_Abstract $processor, $amount, $currency) { /** @var XenForo_Model_UserUpgrade $upgradeModel */ $upgradeModel = $this->getModelFromCache('XenForo_Model_UserUpgrade'); $upgrade = $upgradeModel->getUserUpgradeById($data[0]); if (empty($upgrade)) { return '[ERROR] Could not find specified upgrade'; } $upgradeRecord = $upgradeModel->getActiveUserUpgradeRecord($user['user_id'], $upgrade['user_upgrade_id']); if (!$upgradeRecord and $processor->getLastSubscriptionId()) { $parentLogs = $upgradeModel->getLogsBySubscriberId($processor->getLastSubscriptionId()); foreach (array_reverse($parentLogs) as $parentLog) { if ($parentLog['user_upgrade_record_id']) { $upgradeRecord = $upgradeModel->getExpiredUserUpgradeRecordById($parentLog['user_upgrade_record_id']); if ($upgradeRecord) { break; } } } } if (!$upgradeRecord and $processor->getLastParentTransactionId()) { $parentLogs = $upgradeModel->getLogsByTransactionId($processor->getLastParentTransactionId()); foreach (array_reverse($parentLogs) as $parentLog) { if ($parentLog['user_upgrade_record_id']) { $upgradeRecord = $upgradeModel->getExpiredUserUpgradeRecordById($parentLog['user_upgrade_record_id']); if ($upgradeRecord) { break; } } } } if ($isAccepted) { $messages = array(); if ($amount !== false and $currency !== false) { if ($upgradeRecord) { // verify payment amount with an existing upgrade record $extra = unserialize($upgradeRecord['extra']); $upgradeCost = $extra['cost_amount']; $upgradeCurrency = $extra['cost_currency']; } else { // verify payment amount with the upgrade itself $upgradeCost = $upgrade['cost_amount']; $upgradeCurrency = $upgrade['cost_currency']; } if (!$this->_verifyPaymentAmount($processor, $amount, $currency, $upgradeCost, $upgradeCurrency)) { return '[ERROR] Invalid payment amount'; } } if ($processor->getLastParentTransactionId() and $upgradeRecord) { // for PayPal, this is a Canceled_Reversal transaction $endDate = isset($upgradeRecord['original_end_date']) ? $upgradeRecord['original_end_date'] : $upgradeRecord['end_date']; $upgradeRecordId = $upgradeModel->upgradeUser($user['user_id'], $upgrade, true, $endDate); $messages[] = sprintf('Restored user upgrade for user %s (end date %s, upgrade record #%d)', $user['username'], $endDate, $upgradeRecordId); } else { $upgradeRecordId = $upgradeModel->upgradeUser($user['user_id'], $upgrade); $messages[] = sprintf('Upgraded user %s (upgrade record #%d)', $user['username'], $upgradeRecordId); } $subscriptionId = $processor->getLastSubscriptionId(); if (!empty($upgradeRecordId) and !empty($subscriptionId)) { // try to associate user upgrade with a subscription $newUpgradeRecord = $upgradeModel->getActiveUserUpgradeRecordById($upgradeRecordId); $messages[] = $this->_updateSubscriptionForUserUpgradeRecord($newUpgradeRecord, $processor, $subscriptionId); } $messages = implode(".\n", $messages); $upgradeModel->logProcessorCallback(intval($upgradeRecordId), 'bdpaygate', $processor->getLastTransactionId(), 'payment', $messages, $processor->getLastTransactionDetails(), $processor->getLastSubscriptionId()); return $messages; } else { if (!empty($upgradeRecord)) { $upgradeModel->downgradeUserUpgrade($upgradeRecord); return sprintf('Downgraded user %s (upgrade record #%d)', $user['username'], $upgradeRecord['user_upgrade_record_id']); } else { return '[ERROR] Could not find active upgrade record to downgrade'; } } }