private void appendPeriodicPurchaseInfo(StringBuilder req, PeriodicPurchaseInfo periodicPurchaseInfo)
 {
     if (periodicPurchaseInfo.getPerPaymentAmount() >= 0) {
         this.appendAmount(req,periodicPurchaseInfo.getPerPaymentAmount());
     }
     if (periodicPurchaseInfo.getState() != null) {
         this.appendPeriodicPurchaseState(req, periodicPurchaseInfo.getState());
     }
     if (periodicPurchaseInfo.getSchedule() != null) {
         this.appendPeriodicPurchaseSchedule(req, periodicPurchaseInfo.getSchedule());
     }
     if (periodicPurchaseInfo.getOrderId() != null) {
         this.appendOrderId(req, periodicPurchaseInfo.getOrderId());
     }
     if (periodicPurchaseInfo.getCustomerId() != null) {
         this.appendParam(req, "customerId", periodicPurchaseInfo.getCustomerId());
     }
     if (periodicPurchaseInfo.getStartDate() != DateTime.MinValue) {
         this.appendStartDate(req, periodicPurchaseInfo.getStartDate());
     }
     if (periodicPurchaseInfo.getEndDate() != DateTime.MinValue) {
         this.appendEndDate(req, periodicPurchaseInfo.getEndDate());
     }
     if (periodicPurchaseInfo.getNextPaymentDate() != DateTime.MinValue) {
         this.appendNextPaymentDate(req, periodicPurchaseInfo.getNextPaymentDate());
     }
     if (periodicPurchaseInfo.getExecutionType() != null)
     {
         this.appendParam(req, "periodicPurchaseExecutionType", periodicPurchaseInfo.getExecutionType());
     }
 }
        public CreditCardReceipt recurringPurchaseHelper(PeriodicPurchaseInfo periodicPurchaseInfo, Object creditCardSpecifier, VerificationRequest verificationRequest, bool isActualCreditCard)
        {
            if (periodicPurchaseInfo.getOrderId() == null)
            {
                return new CreditCardReceipt(REQ_INVALID_REQUEST, "orderId is required", null);
            }

            // create the request string
            StringBuilder req = new StringBuilder();
            try {
                this.appendHeader(req, "recurringPurchase");
                this.appendOperationType(req, "create");
                if (isActualCreditCard) {
                    this.appendCreditCard(req, (CreditCard) creditCardSpecifier);
                } else {
                    this.appendStorageTokenId(req, creditCardSpecifier.ToString());
                }
                this.appendPeriodicPurchaseInfo(req, periodicPurchaseInfo);
                this.appendVerificationRequest(req, verificationRequest);
            } catch (Exception e) {
                return new CreditCardReceipt(REQ_INVALID_REQUEST, e.ToString(), null);
            }
            return this.send(req);
        }