public static function deleteContract($contract_id, $user_sid = false) { $contract = new SJB_Contract(array('contract_id' => $contract_id, 'user_sid' => $user_sid)); SJB_ContractManager::deleteContractIDFromNotificationSended($contract_id); if ($contract->isFeaturedProfile()) { $allContracts = self::getAllContractsInfoByUserSID($user_sid); $featured = 0; foreach ($allContracts as $userContract) { if ($userContract['id'] != $contract_id) { $userContract = new SJB_Contract(array('contract_id' => $userContract['id'], 'user_sid' => $user_sid)); if ($userContract->isFeaturedProfile()) { $featured = 1; break; } } } if ($featured == 0) { SJB_UserManager::removeFromFeaturedBySID($user_sid); } } if ($contract->product_type == 'banners') { $banner = new SJB_Banners(); $contractBannerID = $banner->getBannerIDByContract($contract_id); if ($contractBannerID) { $banner->deleteBanner($contractBannerID); } } $permissions = SJB_Acl::getInstance(); $permissions->clearPermissions('contract', $contract_id); return $contract->delete(); }
public function createContract($userSID, $invoiceID, $reactivation, $status = 'active') { $listingNumber = !empty($this->product['qty']) ? $this->product['qty'] : null; if ($this->recurringID) { $contract = new SJB_Contract(array('product_sid' => $this->product['sid'], 'recurring_id' => $this->recurringID, 'gateway_id' => $this->gatewayID, 'invoice_id' => $invoiceID, 'numberOfListings' => $listingNumber)); $contractSID = SJB_ContractManager::getContractSIDByRecurringId($this->recurringID); SJB_ContractManager::deleteAllContractsByRecurringId($this->recurringID); } else { $contract = new SJB_Contract(array('product_sid' => $this->product['sid'], 'gateway_id' => $this->gatewayID, 'invoice_id' => $invoiceID, 'numberOfListings' => $listingNumber)); if ($invoiceID) { SJB_ContractManager::deletePendingContractByInvoiceID($invoiceID, $userSID, $this->product['sid']); } } $contract->setUserSID($userSID); $contract->setPrice($this->product['amount']); $contract->setStatus($status); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($this->product['shoppingCartRecord'], $userSID); $bannerInfo = $this->product['banner_info']; if ($this->product['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); if (isset($contractSID)) { $bannerID = $bannersObj->getBannerIDByContract($contractSID); if ($bannerID) { $bannersObj->updateBannerContract($contract->getID(), $bannerID); } } else { $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $userSID, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($userSID, $bannerGroup); } } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($userSID); } SJB_Statistics::addStatistics('payment', 'product', $this->product['sid'], false, 0, 0, $userSID, $this->product['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($userSID)) { SJB_Notifications::sendSubscriptionActivationLetter($userSID, $this->product, $reactivation); } } }
/** * Recurring notification handlign function * @param array|null $callback_data Notification data */ function handleRecurringNotification($callback_data) { if (SJB_Array::get($callback_data, 'txn_type') == 'subscr_cancel' || SJB_Array::get($callback_data, 'txn_type') == 'subscr_eot') { SJB_ContractManager::removeSubscriptionId(SJB_Array::get($callback_data, 'subscr_id')); return; } if (SJB_Array::get($callback_data, 'txn_type') != 'subscr_payment') { return; } $invoice_sid = isset($callback_data['item_number']) ? $callback_data['item_number'] : null; if (is_null($invoice_sid)) { return; } $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (is_null($invoice)) { return null; } $reactivation = false; $status = $invoice->getStatus(); if ($invoice->getStatus() == SJB_Invoice::INVOICE_STATUS_PAID) { // Пришёл рекьюринг платёж $invoice->setSID(null); $invoice->setDate(null); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); $reactivation = true; } $invoice->setCallbackData($callback_data); if ($this->isPaymentVerified($invoice) && in_array($callback_data['payment_status'], array('Completed', 'Processed'))) { $items = $invoice->getPropertyValue('items'); $user_sid = $invoice->getUserSID(); $subscriptionSID = $callback_data['custom']; if (!empty($items['products'])) { $recurringProductsInfo = array(); foreach ($items['products'] as $key => $product) { if ($product != -1) { $productInfo = $invoice->getItemValue($key); if ($status == SJB_Invoice::INVOICE_STATUS_PAID && $subscriptionSID == $product) { $listingNumber = $productInfo['qty']; $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $callback_data['subscr_id'], 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); $contract->setUserSID($user_sid); $contractSID = SJB_ContractManager::getContractSIDByRecurringId($callback_data['subscr_id']); SJB_ContractManager::deleteAllContractsByRecurringId($callback_data['subscr_id']); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo)) { $bannersObj = new SJB_Banners(); if (isset($contractSID)) { $bannerID = $bannersObj->getBannerIDByContract($contractSID); if ($bannerID) { $bannersObj->updateBannerContract($contract->getID(), $bannerID); } } else { $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo, $reactivation); } } $recurringProductsInfo[$key] = $productInfo; } elseif ($status != SJB_Invoice::INVOICE_STATUS_PAID) { $listingNumber = $productInfo['qty']; if ($subscriptionSID == $product) { $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $callback_data['subscr_id'], 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); } else { $contract = new SJB_Contract(array('product_sid' => $product, 'gateway_id' => 'paypal_standard', 'numberOfListings' => $listingNumber)); } $contract->setUserSID($user_sid); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo) && $contractSID) { $bannersObj = new SJB_Banners(); $bannersObj->addBanner($bannerInfo['title'], $bannerInfo['link'], $bannerInfo['bannerFilePath'], $bannerInfo['sx'], $bannerInfo['sy'], $bannerInfo['type'], 0, $bannerInfo['banner_group_sid'], $bannerInfo, $user_sid, $contract->getID()); $bannerGroup = $bannersObj->getBannerGroupBySID($bannerInfo['banner_group_sid']); SJB_AdminNotifications::sendAdminBannerAddedLetter($user_sid, $bannerGroup); } if ($contract->isFeaturedProfile()) { SJB_UserManager::makeFeaturedBySID($user_sid); } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo); } } } } } if ($reactivation) { $invoice->setNewPropertiesToInvoice($recurringProductsInfo); } $price = isset($callback_data['payment_gross']) ? $callback_data['payment_gross'] : $invoice->getPropertyValue('total'); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); $id = $this->details->getProperty('id'); $invoice->setPropertyValue('payment_method', $id->getValue()); SJB_InvoiceManager::saveInvoice($invoice); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); $transactionID = $callback_data['txn_id']; $transactionInfo = array('transaction_id' => $transactionID, 'invoice_sid' => $invoice->getSID(), 'amount' => $price, 'payment_method' => $invoice->getPropertyValue('payment_method'), 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } } else { $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); SJB_InvoiceManager::saveInvoice($invoice); } }
function handleRecurringNotification($notification_data) { //набор полей такой же как и при callback с Authorize.NET //плюс два поля x_subscription_id и x_subscription_paynum if (!$this->isNotificationFromGateway($notification_data)) { return; //уведомление не от Authorize.NET } else { if ($this->isNotificationSuccessfull($notification_data)) { $invoice_sid = null; if (isset($notification_data['x_invoice_num'])) { $invoice_sid = $notification_data['x_invoice_num']; } if (is_null($invoice_sid)) { return; } $invoice = SJB_InvoiceManager::getObjectBySID($invoice_sid); if (is_null($invoice)) { return null; } $reactivation = false; if ($invoice->getStatus() == SJB_Invoice::INVOICE_STATUS_PAID) { // Пришёл рекьюринг платёж $invoice->setSID(null); $invoice->setDate(null); $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_UNPAID); $reactivation = true; } $invoice->setCallbackData($notification_data); if (!$this->checkPaymentAmount($invoice)) { return null; } $invoice->setStatus(SJB_Invoice::INVOICE_STATUS_PAID); SJB_PromotionsManager::markPromotionAsPaidByInvoiceSID($invoice->getSID()); $user_sid = $invoice->getPropertyValue('user_sid'); $items = $invoice->getPropertyValue('items'); if (!empty($items['products'])) { $recurringProductsInfo = array(); foreach ($items['products'] as $key => $product) { if ($product != -1) { $productInfo = $invoice->getItemValue($key); $listingNumber = $productInfo['qty']; $contract = new SJB_Contract(array('product_sid' => $product, 'recurring_id' => $notification_data['x_subscription_id'], 'gateway_id' => 'authnet_sim', 'numberOfListings' => $listingNumber)); if (isset($contract)) { $contract->setUserSID($user_sid); $contractSID = SJB_ContractManager::getContractSIDByRecurringId($notification_data['x_subscription_id']); SJB_ContractManager::deleteAllContractsByRecurringId($notification_data['x_subscription_id']); $contract->setPrice($productInfo['amount']); if ($contract->saveInDB()) { SJB_ShoppingCart::deleteItemFromCartBySID($productInfo['shoppingCartRecord'], $user_sid); $bannerInfo = $productInfo['banner_info']; if ($productInfo['product_type'] == 'banners' && !empty($bannerInfo) && $contractSID) { $bannersObj = new SJB_Banners(); $bannerID = $bannersObj->getBannerIDByContract($contractSID); if ($bannerID) { $bannersObj->updateBannerContract($contract->getID(), $bannerID); } } SJB_Statistics::addStatistics('payment', 'product', $product, false, 0, 0, $user_sid, $productInfo['amount']); if (SJB_UserNotificationsManager::isUserNotifiedOnSubscriptionActivation($user_sid)) { SJB_Notifications::sendSubscriptionActivationLetter($user_sid, $productInfo, $reactivation); } } } if (isset($productInfo['recurring'])) { $recurringProductsInfo[$key] = $productInfo; } } } if ($reactivation) { $invoice->setNewPropertiesToInvoice($recurringProductsInfo); } SJB_InvoiceManager::saveInvoice($invoice); if (isset($notification_data['x_trans_id'])) { $transactionId = $notification_data['x_trans_id']; $transactionInfo = array('transaction_id' => $transactionId, 'invoice_sid' => $invoice->getSID(), 'amount' => $invoice->getPropertyValue('total'), 'payment_method' => $invoice->getPropertyValue('payment_method'), 'user_sid' => $invoice->getPropertyValue('user_sid')); $transaction = new SJB_Transaction($transactionInfo); SJB_TransactionManager::saveTransaction($transaction); } } } else { //уведомление о неуспешном платеже } } }