示例#1
0
 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'))));
 }
示例#2
0
 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)));
     }
 }
示例#3
0
 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;
 }
示例#4
0
 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')));
         }
     }
 }
示例#5
0
 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);
 }
示例#6
0
 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);
 }
示例#7
0
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);
示例#8
0
 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';
         }
     }
 }