1.3.1. Card mapping API

Create card mapping

Create card mapping

Creates a card mapping. This causes one or more cardholder identifiers (phone, email, twitter name) to be mapped to card data. Card mappings can later be used to transfer funds using Money Transfer from the card or to the card.

Card mapping is given an alias (or name).

Card mapping is created for sending, receiving or both sending and receiving funds.

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/create/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "address": {
    "city": {string},
    "country": {string},
    "postcodeZip": {string},
    "state": {string},
    "street": {string},
    "street2": {string}
  },
  "accountUsage": {enum},
  "defaultMapping": {boolean},
  "phone": {string},
  "email": {string},
  "twitterName": {string},
  "alias": {string},
  "dateOfBirth": {string},
  "customerIpAddress": {string},
  "card": {
    "expiry": {
      "month": {integer},
      "year": {integer}
    },
    "holder":{
      "firstName": {string},
      "middleInitial", {string},
      "lastName": {string}
    },
    "number": {string},
    "securityCode": {string}
  },
  "urls": {
    "redirectUrl": {string},
    "callbackUrl": {string}
  }
}
Property name Value Description
Required properties
address object  
address.city string(1-100)  
address.country string(3) ISO 3166-1 alpha-3 code
address.postcodeZip string(1-10)  
address.street string(1-50)  
accountUsage enum Possible values: SENDING, RECEIVING, SEND_RECV
alias string(1-20) Alias of the created mapping
customerIpAddress string(7-45) Customer IP address
card object  
card.expiry object  
card.expiry.month integer(2)  
card.expiry.year integer(4)  
card.holder object  
card.holder.firstName string(1-50)  
card.holder.lastName string(1-50)  
card.number string(9-19) the card number (PAN)
card.securityCode string(3-4)  
urls object  
urls.redirectUrl string(1-128) URL to which cardholder will be returned after the mapping has been finished
Conditional properties
address.state string(2) State code. Required if country has states
phone string(4-20) Phone number to which to map card number. One of phone, email, twitterName must be specified
email string(4-99) Email address to which to map card number. One of phone, email, twitterName must be specified
twitterName string(1-99) Twitter name to which to map card number. One of phone, email, twitterName must be specified
Optional properties
address.street2 string(1-50)  
defaultMapping boolean Whether created mapping will be made default for the account. False by default
dateOfBirth string(8) The cardholder’s birth day in format “YYYYMMDD”
card.holder.middleInitial string(1)  
urls.callbackUrl string(1-128) Callback URL to which notification will be made on the mapping outcome

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping creation status

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Create card mapping form

Card mapping form template may be configured (see Card Mapping Form Template).

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/create-form/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "address": {
    "city": {string},
    "country": {string},
    "postcodeZip": {string},
    "state": {string},
    "street": {string},
    "street2": {string}
  },
  "accountUsage": {enum},
  "defaultMapping": {boolean},
  "phone": {string},
  "email": {string},
  "twitterName": {string},
  "dateOfBirth": {string},
  "customerIpAddress": {string},
  "urls": {
    "redirectUrl": {string},
    "callbackUrl": {string}
  }
}
Property name Value Description
Required properties
address object  
address.city string(1-100)  
address.country string(3) ISO 3166-1 alpha-3 code
address.postcodeZip string(1-10)  
address.street string(1-50)  
accountUsage enum Possible values: SENDING, RECEIVING, SEND_RECV
customerIpAddress string(7-45) Customer IP address
urls object  
urls.redirectUrl string(1-128) URL to which cardholder will be returned after the mapping has been finished
Conditional properties
address.state string(2) State code. Required if country has states
phone string(4-20) Phone number to which to map card number. One of phone, email, twitterName must be specified
email string(4-99) Email address to which to map card number. One of phone, email, twitterName must be specified
twitterName string(1-99) Twitter name to which to map card number. One of phone, email, twitterName must be specified
Optional properties
billing.phone string(1-20)  
address.street2 string(1-50)  
defaultMapping boolean Whether created mapping will be made default for the account. False by default
dateOfBirth string(8) The cardholder’s birth day in format “YYYYMMDD”
urls.callbackUrl string(1-128) Callback URL to which notification will be made on the mapping outcome

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string},
  "redirectUrl": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping creation status
redirectUrl string URL to which cardholder needs to be redirected to fill card mapping form

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Card mapping creation status

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/create-status/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "sessionToken": {string}
}
Property name Value Description
Required properties
sessionToken string(16-36) the session token of card mapping transaction

Response

If successful, this method returns the following response body:

{
  "bankOrderId": {string},
  "clientOrderId": {string},
  "redirectUrl": {string},
  "state": {enum},
  "errorCode": {integer}
  "errorMessage": {string},
  "phoneMappingId": {long},
  "emailMappingId": {long},
  "twitterNameMappingId": {long}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
state enum possible values: PROCESSING, REDIRECT_REQUEST, APPROVED, DECLINED,
    FILTERED, ERROR, UNKNOWN
Conditional properties
bankOrderId string(128) required if state is APPROVED or DECLINED
redirectUrl string(128) required if state is REDIRECT_REQUEST
Optional properties
errorCode int error code (in case of error)
errorMessage string(256) error message (in case of error)
phoneMappingId long ID of a phone mapping
emailMappingId long ID of an email mapping
twitterNameMappingId long ID of a twitter name mapping

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Retrieve card mapping

Retrieve card mappings

Allows to retrieve card mappings.

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/retrieve/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "subscriberId": {string},
  "subscriberType": {enum},
  "alias": {string},
  "accountUsage": {enum}
}
Property name Value Description
Required properties
subscriberId string(1-99) Cardholder identifier (phone number, email address or twitter name, depending on subscriberType
subscriberType enum Possible values: PHONE_NUMBER, EMAIL_ADDRESS, TWITTER
Optional properties
alias string(1-20) Alias of the mapping to retrieve
accountUsage enum Possible values: SENDING, RECEIVING, SEND_RECV

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping retrieval status

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Card mapping retrieval status

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/retrieve-status/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "sessionToken": {string}
}
Property name Value Description
Required properties
sessionToken string(16-36) the session token of card mapping transaction

Response

If successful, this method returns the following response body:

{
  "bankOrderId": {string},
  "clientOrderId": {string},
  "redirectUrl": {string},
  "state": {enum},
  "errorCode": {integer}
  "errorMessage": {string},
  "mappings": [
    "mappingId": {long},
    "subscriberId": {string},
    "subscriberType": {enum},
    "accountUsage": {enum},
    "defaultMapping": {boolean},
    "alias": {string},
    "address": {
      "city": {string},
      "country": {string},
      "postcodeZip": {string},
      "state": {string},
      "street": {string},
      "street2": {string}
    },
    "card": {
      "expiry": {
        "month": {integer},
        "year": {integer}
      },
      "holder":{
        "firstName": {string},
        "middleInitial", {string},
        "lastName": {string}
      },
      "number": {string}
    },
    "dateOfBirth": {string},
    "receivingEligibility": {
      "eligible": {boolean},
      "currencyCode": {string},
      "countryCode": {string},
      "acceptanceBrandCode": {string},
      "acceptanceBrandName": {string},
      "productBrandCode": {string},
      "productBrandName": {string}
    }
  ]
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
state enum possible values: PROCESSING, REDIRECT_REQUEST, APPROVED, DECLINED,
    FILTERED, ERROR, UNKNOWN
Conditional properties
bankOrderId string(128) required if state is APPROVED or DECLINED
redirectUrl string(128) required if state is REDIRECT_REQUEST
Optional properties
errorCode int error code (in case of error)
errorMessage string(256) error message (in case of error)
mappings object filled when data is ready

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Update card mapping

Update card mapping

Updates a card mapping, changing its attributes.

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/update/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "address": {
    "city": {string},
    "country": {string},
    "postcodeZip": {string},
    "state": {string},
    "street": {string},
    "street2": {string}
  },
  "accountUsage": {enum},
  "defaultMapping": {boolean},
  "mappingId": {long},
  "alias": {string},
  "dateOfBirth": {string},
  "customerIpAddress": {string},
  "card": {
    "expiry": {
      "month": {integer},
      "year": {integer}
    },
    "holder":{
      "firstName": {string},
      "middleInitial", {string},
      "lastName": {string}
    },
    "number": {string},
    "securityCode": {string}
  },
  "urls": {
    "redirectUrl": {string},
    "callbackUrl": {string}
  }
}
Property name Value Description
Required properties
address object  
address.city string(1-100)  
address.country string(3) ISO 3166-1 alpha-3 code
address.postcodeZip string(1-10)  
address.street string(1-50)  
accountUsage enum Possible values: SENDING, RECEIVING, SEND_RECV
alias string(1-20) New alias for the mapping
customerIpAddress string(7-45) Customer IP address
card object  
card.expiry object  
card.expiry.month integer(2)  
card.expiry.year integer(4)  
card.holder object  
card.holder.firstName string(1-50)  
card.holder.lastName string(1-50)  
card.number string(9-19) the card number (PAN)
card.securityCode string(3-4)  
mappingId long ID of the mapping to be updated
urls object  
urls.redirectUrl string(1-128) URL to which cardholder will be returned after the mapping has been finished
Optional properties
address.street2 string(1-50)  
defaultMapping boolean Whether update mapping will be made default for the account. False by default
dateOfBirth string(8) The cardholder’s birth day in format “YYYYMMDD”
card.holder.middleInitial string(1)  
urls.callbackUrl string(1-128) Callback URL to which notification will be made on the mapping outcome

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping updating status

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Update card mapping form

Card mapping form template may be configured (see Card Mapping Form Template).

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/update-form/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "address": {
    "city": {string},
    "country": {string},
    "postcodeZip": {string},
    "state": {string},
    "street": {string},
    "street2": {string}
  },
  "accountUsage": {enum},
  "defaultMapping": {boolean},
  "mappingId": {long},
  "dateOfBirth": {string},
  "customerIpAddress": {string},
  "urls": {
    "redirectUrl": {string},
    "callbackUrl": {string}
  }
}
Property name Value Description
Required properties
address object  
address.city string(1-100)  
address.country string(3) ISO 3166-1 alpha-3 code
address.postcodeZip string(1-10)  
address.street string(1-50)  
accountUsage enum Possible values: SENDING, RECEIVING, SEND_RECV
customerIpAddress string(7-45) Customer IP address
mappingId long ID of the mapping to be updated
urls object  
urls.redirectUrl string(1-128) URL to which cardholder will be returned after the mapping has been finished
Optional properties
billing.phone string(1-20)  
address.street2 string(1-50)  
defaultMapping boolean Whether updated mapping will be made default for the account. False by default
dateOfBirth string(8) The cardholder’s birth day in format “YYYYMMDD”
urls.callbackUrl string(1-128) Callback URL to which notification will be made on the mapping outcome

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string},
  "redirectUrl": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping updating status
redirectUrl string URL to which cardholder needs to be redirected to fill card mapping form

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Card mapping updating status

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/update-status/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "sessionToken": {string}
}
Property name Value Description
Required properties
sessionToken string(16-36) the session token of card mapping transaction

Response

If successful, this method returns the following response body:

{
  "bankOrderId": {string},
  "clientOrderId": {string},
  "redirectUrl": {string},
  "state": {enum},
  "errorCode": {integer}
  "errorMessage": {string},
  "phoneMappingId": {long},
  "emailMappingId": {long},
  "twitterNameMappingId": {long}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
state enum possible values: PROCESSING, REDIRECT_REQUEST, APPROVED, DECLINED,
    FILTERED, ERROR, UNKNOWN
Conditional properties
bankOrderId string(128) required if state is APPROVED or DECLINED
redirectUrl string(128) required if state is REDIRECT_REQUEST
Optional properties
errorCode int error code (in case of error)
errorMessage string(256) error message (in case of error)
phoneMappingId long ID of a phone mapping
emailMappingId long ID of an email mapping
twitterNameMappingId long ID of a twitter name mapping

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Delete card mapping

Delete card mapping

Deletes a card mapping created earlier. This causes card to not be mapped to cardholder identifier (phone number, email address, twitter account) used when that mapping was created.

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/delete/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "mappingId": {long}
}
Property name Value Description
Required properties
mappingId long ID of the mapping to be deleted

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping deletion status

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Delete card mappings by the user identifier

Deletes all card mappings mapped to the given cardholder identifier (phone number, email number, or twitter name).

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/delete-subscriber-id/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "subscriberId": {string},
  "subscriberType": {enum}
}
Property name Value Description
Required properties
subscriberId string(1-99) Cardholder identifier (phone number, email address or twitter name, depending on subscriberType
subscriberType enum Possible values: PHONE_NUMBER, EMAIL_ADDRESS, TWITTER

Response

If successful, this method returns the following response body:

{
  "clientOrderId": {string},
  "paynetOrderId": {long},
  "sessionToken": {string},
  "requestSerialNumber": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
paynetOrderId string order identifier assigned by the server
sessionToken string the session token which is to be used when calling Card mapping deletion status

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Card mapping deletion status

Request

HTTP Request

POST https://${hostname}/paynet/api/v3/card-mapping/delete-status/{endpointId}/{clientOrderId}

Request body

In the request body, supply data with the following structure:

{
  "sessionToken": {string}
}
Property name Value Description
Required properties
sessionToken string(16-36) the session token of card mapping transaction

Response

If successful, this method returns the following response body:

{
  "bankOrderId": {string},
  "clientOrderId": {string},
  "redirectUrl": {string},
  "state": {enum},
  "errorCode": {integer}
  "errorMessage": {string}
}
Property name Value Description
clientOrderId string order identifier assigned by the caller
state enum possible values: PROCESSING, REDIRECT_REQUEST, APPROVED, DECLINED,
    FILTERED, ERROR, UNKNOWN
Conditional properties
bankOrderId string(128) required if state is APPROVED or DECLINED
redirectUrl string(128) required if state is REDIRECT_REQUEST
Optional properties
errorCode int error code (in case of error)
errorMessage string(256) error message (in case of error)

In case of a failure, this method returns the following response body:

{
  "error": {
    "code": {string},
    "message": {string}
  },
  "clientOrderId": {string}
}
Property name Value Description
error object  
error.code string the error code
error.message string the description of the error
clientOrderId string order identifier assigned by the caller

Card Mapping Form Template

When a card mapping is created (Create card mapping form) or updated (Update card mapping form) using a Form, that form is being generated using a Form Template. There exists a default Form Template which is used when Form Template is not customized.

Form template is a Velocity template containing the following placeholders:

Placeholder Description
ACTION This placeholder must be put into action attribute of the <form> tag
CARDNO Name of the field in which card number will be entered
EXPMONTH Name of the field in which expiration month will be entered
EXPYEAR Name of the field in which expiration year will be entered
CARDHOLDER_FIRSTNAME Name of the field in which cardholder first name will be entered
CARDHOLDER_MIDDLE_INITIAL Name of the field in which cardholder middle initial will be entered
CARDHOLDER_LASTNAME Name of the field in which cardholder last name will be entered
CARDHOLDER_FIRSTNAME_VALUE Cardholder first name (entered on previous attempt to submit the form)
CARDHOLDER_MIDDLE_INITIAL_VALUE Cardholder middle initial (entered on previous attempt to submit the form)
CARDHOLDER_LASTNAME_VALUE Cardholder last name (entered on previous attempt to submit the form)
CVV2 Name of the field in which security code will be entered
ALIAS Name of the field in which card mapping alias will be entered
EXPIRE_YEARS <select> tag with expiration years
SKIN_VERSION Version of the Paynet CSS Skin
PAYNET_ORDER_ID Order ID assigned to this order by Paynet
MERCHANT_ORDER_ID Order ID assigned to this order by the Merchant
REQUEST_REMOTE_HOST Remote host from which the request is made
MERCHANT Either endpoint’s Payment Form Header (if defined), or endpoint’s Display Name
USER_IDENTIFIERS List of user identifiers; see User identifiers
INTERNAL_SECTION Internal section which must be inserted into the form so that it functions properly

User identifiers

A list of user identifiers, each of them contains the following properties:

Property name Description
subscriberType Type of the user identifier: this can be EMAIL_ADDRESS, PHONE_NUMBER, TWITTER
subscriberId Identifier of the corresponding type, i.e. email, phone number, or Twitter user name

Default form template

Default form template follows. It can also be used as a basis for extension and customization.

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Pay securely with credit card</title>
    <link rel="stylesheet" type="text/css" href="/paynet-ui-skin/${SKIN_VERSION}/d/css/processing-form.css"/>
</head>

<body>
    <div class="container">

        <!-- HEADER -->
        <div class="header">
            <div class="header-logo"></div>
            <div class="header-merchant-label">Merchant:</div>
            <div class="header-merchant-name as-title" >$MERCHANT</div>
        </div>

        <div class="main">
            <!-- Order Summary -->
            <div class="summary">
                <h2 class="summary-title as-title">Order summary</h2>
                <div class="summary-description">$!ORDERDESCRIPTION</div>

                <div class="summary-total">
                    <span class="summary-total-label">Total:</span>
                    <span class="summary-total-value">$!AMOUNT $!CURRENCY</span>
                </div>
            </div>

            <!-- Pay form -->
            <form class="form" action="${ACTION}" method="post">

                <h2 class="form-title as-title">Pay secure with credit card</h2>

                <ul class="form-ul">
                    <!-- Card Number -->
                    <li class="form-li">
                        <label class="form-label" for="${CARDNO}">Credit or Debit card number:</label>
                        <input class="form-number-field" id="${CARDNO}" name="${CARDNO}" type="text" maxlength="19" autocomplete="off"  />
                    </li>

                    <!-- Valid thru -->
                    <li class="form-li">
                        <label class="form-label" for="${EXPMONTH}">Card expiration date:</label>

                        <select class="form-expire-month" id="${EXPMONTH}" name="${EXPMONTH}" size="1" >
                            <option value="01">01 / January</option>
                            <option value="02">02 / February</option>
                            <option value="03">03 / March</option>
                            <option value="04">04 / April</option>
                            <option value="05">05 / May</option>
                            <option value="06">06 / June</option>
                            <option value="07">07 / July</option>
                            <option value="08">08 / August</option>
                            <option value="09">09 / September</option>
                            <option value="10">10 / October</option>
                            <option value="11">11 / November</option>
                            <option value="12">12 / December</option>
                        </select>

                        <!--suppress HtmlFormInputWithoutLabel -->
                        <select class="form-expire-year" name="${EXPYEAR}" id="${EXPYEAR}" size="1">
                            ${EXPIRE_YEARS}
                        </select>
                    </li>

                    <!-- Card printed name -->
                    <li class="form-li">
                        <label class="form-label" for="${CARDHOLDER}">Card printed name:</label>
                        <input class="form-name-field" id="${CARDHOLDER}" name="${CARDHOLDER}" type="text" maxlength="50" autocomplete="off" value="${CARDHOLDER_VALUE}" />
                    </li>

                    <!-- CVV -->
                    <li class="form-li">
                        <label class="form-label" for="${CVV2}">Card security code (CVV2/CVC2):</label>
                        <input class="form-cvv-field" name="${CVV2}" id="${CVV2}" type="password" maxlength="4" autocomplete="off" />
                    </li>


                    <!-- Destination Card Number -->
                    #if($!DESTINATIONCARDNO)
                    <li class="form-li">
                        <label class="form-label" for="${DESTINATIONCARDNO}">Destination card number:</label>
                        <input class="form-number-field" id="${DESTINATIONCARDNO}" name="${DESTINATIONCARDNO}" type="text" maxlength="19" autocomplete="off"  />
                    </li>
                    #end


                    $!{INTERNAL_SECTION}

                    #if($!card_error)
                    <div class="form-error">
                        $!card_error
                    </div>
                    #end


                    <li class="form-li-buttons">

                        <span class="form-secure-connection">SECURE CONNECTION</span>

                        <!--suppress HtmlFormInputWithoutLabel -->
                        <input name="submit" type="submit" class="form-button form-button-ok"     value="Process payment" />
                        <!--suppress HtmlFormInputWithoutLabel -->
                        <input name="cancel" type="submit" class="form-button form-button-cancel" value="Cancel" />
                    </li>

                </ul>

                <div class="form-card-info"></div>

            </form>
        </div>
    </div>
</body>

</html>