// helper method for all update + change state recurring methods
        private CreditCardReceipt updateRecurringPurchaseHelper(PeriodicPurchaseInfo periodicPurchaseInfo, Object creditCardSpecifier, VerificationRequest verificationRequest, bool isActualCreditCard)
        {
            if (periodicPurchaseInfo.getPeriodicTransactionId() < 0) {
                return new CreditCardReceipt(REQ_INVALID_REQUEST, "recurringPurchaseId is required", null);
            }

            // create the request string
            StringBuilder req = new StringBuilder();
            try {
                this.appendHeader(req, "recurringPurchase");
                this.appendOperationType(req, "update");
                this.appendTransactionId(req, periodicPurchaseInfo.getPeriodicTransactionId());
                if (creditCardSpecifier != null) {
                    if (isActualCreditCard) {
                        this.appendCreditCard(req, (CreditCard) creditCardSpecifier);
                    } else {
                        this.appendStorageTokenId(req, creditCardSpecifier.ToString());
                    }
                }
                if (periodicPurchaseInfo.getPerPaymentAmount() > 0) {
                    this.appendAmount(req, periodicPurchaseInfo.getPerPaymentAmount());
                }
                if (verificationRequest != null) {
                    this.appendVerificationRequest(req, verificationRequest);
                }
                if (periodicPurchaseInfo.getState() != PeriodicPurchaseInfo.State.NULL) {
                    this.appendPeriodicPurchaseState(req, periodicPurchaseInfo.getState());
                }
            } catch (Exception e) {
                return new CreditCardReceipt(REQ_INVALID_REQUEST, e.ToString(), null);
            }
            return this.send(req);
        }