public function recurrentPayment(Payment_Invoice $invoice)
 {
     $recurrenceInfo = $invoice->getSubscription();
     $amount = $invoice->getCurrency() . ' ' . $invoice->getTotalWithTax();
     $description = $invoice->getTitle();
     $promotionAmount = 0;
     $processImmediate = true;
     $immediateReturn = true;
     $referenceId = $invoice->getId();
     $recurringStartDate = "";
     $recurringFrequency = $this->_getRecurringFrequency($recurrenceInfo);
     // '1 month'
     $subscriptionPeriod = "";
     //'12 months';
     $formHiddenInputs['accessKey'] = $this->getParam('AWSAccessKeyId');
     $formHiddenInputs['amount'] = $amount;
     $formHiddenInputs['description'] = $description;
     $formHiddenInputs['recurringFrequency'] = $recurringFrequency;
     $formHiddenInputs['subscriptionPeriod'] = $subscriptionPeriod;
     $formHiddenInputs['recurringStartDate'] = $recurringStartDate;
     $formHiddenInputs['promotionAmount'] = $promotionAmount;
     $formHiddenInputs['referenceId'] = $referenceId;
     $formHiddenInputs['immediateReturn'] = true;
     $formHiddenInputs['ipnUrl'] = $this->getParam('notify_url');
     $formHiddenInputs['returnUrl'] = $this->getParam('return_url');
     $formHiddenInputs['abandonUrl'] = $this->getParam('cancel_url');
     $formHiddenInputs['processImmediate'] = $processImmediate;
     uksort($formHiddenInputs, "strnatcasecmp");
     $stringToSign = "";
     foreach ($formHiddenInputs as $formHiddenInputName => $formHiddenInputValue) {
         $stringToSign = $stringToSign . $formHiddenInputName . $formHiddenInputValue;
     }
     $formHiddenInputs['signature'] = $this->_getSignature($stringToSign);
     //throw new Exception(print_r($formHiddenInputs, 1));
     return $formHiddenInputs;
 }
 /**
  * Perform recurent payment
  * @param Payment_Invoice $invoice
  * @see http://www.2checkout.com/blog/knowledge-base/merchants/tech-support/3rd-party-carts/parameter-sets/pass-through-product-parameter-set/
  */
 public function recurrentPayment(Payment_Invoice $invoice)
 {
     $subs = $invoice->getSubscription();
     $buyer = $invoice->getBuyer();
     $data['sid'] = $this->getParam('vendor_nr');
     $data['mode'] = '2CO';
     foreach ($invoice->getItems() as $i => $item) {
         $data['li_' . $i . '_type'] = 'product';
         $data['li_' . $i . '_name'] = $item->getTitle();
         $data['li_' . $i . '_quantity'] = $item->getQuantity();
         $data['li_' . $i . '_tangible'] = 'N';
         $data['li_' . $i . '_description'] = $item->getDescription();
         $data['li_' . $i . '_recurrence'] = $subs->getCycle() . ' ' . ucfirst($subs->getUnit());
         $data['li_' . $i . '_price'] = $item->getTotalWithTax();
     }
     $data['merchant_order_id'] = $invoice->getId();
     $data['invoice_hash'] = $invoice->getId();
     $data['invoice_id'] = $invoice->getId();
     $data['fixed'] = 1;
     $data['lang'] = 'en';
     $data['skip_landing'] = 0;
     $data['id_type'] = 1;
     $data['x_receipt_link_URL'] = $this->getParam('return_url');
     $data['card_holder_name'] = $buyer->getFirstName() . ' ' . $buyer->getLastName();
     $data['phone'] = $buyer->getPhone();
     $data['phone_extension'] = '';
     $data['email'] = $buyer->getEmail();
     $data['street_address'] = $buyer->getAddress();
     $data['city'] = $buyer->getCity();
     $data['state'] = $buyer->getState();
     $data['zip'] = $buyer->getZip();
     $data['country'] = $buyer->getCountry();
     $data['subscription'] = 1;
     if ($this->testMode) {
         $data['demo'] = 'Y';
     }
     return $data;
 }