/**
  * Create a transaction for a subscription
  *
  * @param User_Model_User $user
  * @param Zend_Db_Table_Row_Abstract $subscription
  * @param Zend_Db_Table_Row_Abstract $package
  * @param array $params
  * @return Engine_Payment_Gateway_Transaction
  */
 public function createSubscriptionTransaction(User_Model_User $user, Zend_Db_Table_Row_Abstract $subscription, Payment_Model_Package $package, array $params = array())
 {
     // Do stuff to params
     $params['fixed'] = true;
     $params['skip_landing'] = true;
     // Lookup product id for this subscription
     $productInfo = $this->getService()->detailVendorProduct($package->getGatewayIdentity());
     $params['product_id'] = $productInfo['product_id'];
     $params['quantity'] = 1;
     // Create transaction
     $transaction = $this->createTransaction($params);
     return $transaction;
 }
Example #2
0
 /**
  * Create a transaction for a subscription
  *
  * @param User_Model_User $user
  * @param Zend_Db_Table_Row_Abstract $subscription
  * @param Zend_Db_Table_Row_Abstract $package
  * @param array $params
  * @return Engine_Payment_Gateway_Transaction
  */
 public function createSubscriptionTransaction(User_Model_User $user, Zend_Db_Table_Row_Abstract $subscription, Payment_Model_Package $package, array $params = array())
 {
     // Process description
     $desc = $package->getPackageDescription();
     if (strlen($desc) > 127) {
         $desc = substr($desc, 0, 124) . '...';
     } else {
         if (!$desc || strlen($desc) <= 0) {
             $desc = 'N/A';
         }
     }
     if (function_exists('iconv') && strlen($desc) != iconv_strlen($desc)) {
         // PayPal requires that DESC be single-byte characters
         $desc = @iconv("UTF-8", "ISO-8859-1//TRANSLIT", $desc);
     }
     // This is a one-time fee
     if ($package->isOneTime()) {
         $params['driverSpecificParams']['PayPal'] = array('AMT' => $package->getPrice(), 'DESC' => $desc, 'CUSTOM' => $subscription->subscription_id, 'INVNUM' => $params['vendor_order_id'], 'ITEMAMT' => $package->getPrice(), 'ITEMS' => array(array('NAME' => $package->title, 'DESC' => $desc, 'AMT' => $package->getPrice(), 'NUMBER' => $subscription->subscription_id, 'QTY' => 1)));
         // Should fix some issues with GiroPay
         if (!empty($params['return_url'])) {
             $params['driverSpecificParams']['PayPal']['GIROPAYSUCCESSURL'] = $params['return_url'] . (false === strpos($params['return_url'], '?') ? '?' : '&') . 'giropay=1';
             $params['driverSpecificParams']['PayPal']['BANKTXNPENDINGURL'] = $params['return_url'] . (false === strpos($params['return_url'], '?') ? '?' : '&') . 'giropay=1';
         }
         if (!empty($params['cancel_url'])) {
             $params['driverSpecificParams']['PayPal']['GIROPAYCANCELURL'] = $params['cancel_url'] . (false === strpos($params['return_url'], '?') ? '?' : '&') . 'giropay=1';
         }
     } else {
         $params['driverSpecificParams']['PayPal'] = array('BILLINGTYPE' => 'RecurringPayments', 'BILLINGAGREEMENTDESCRIPTION' => $desc);
     }
     // Create transaction
     $transaction = $this->createTransaction($params);
     return $transaction;
 }