/** * 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; }
/** * 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; }