Manual Card Data Entry

Manual Card Entry enables a merchant to enter the card number and expiration date on a terminal and allowing the terminal to encrypt the card data.

important

The iCMP, iSC250 or iPP320 terminal must be certified.

Code Samples

CWS

Request

PropertyDescription
parameters
JSONObject | required
All relevant parameters for manually-entered card data processing.
cardEntryTypes
array | optional
Card Entry Types Indicator
Used to indicate the type of card entry on card reader.
Valid values: MANUALLY_ENTERED

Example

Request
{
  "method" : "startPaymentTransaction",
  "requestId" : "861693916",
  "targetType" : "paymentGatewayConverge",
  "version" : "1.0",
  "parameters" : {
    "paymentGatewayId" : "79f139c4-3bb0-4bdb-b587-6cbcce02acf7",
    "transactionType" : "SALE",
    "tenderType" : "CARD",
  .....
    "cardEntryTypes" : ["MANUALLY_ENTERED"],
  .....
  }
}

This will request CardPresent, which is a boolean to indicate if the credit card is actually present. To which you should reply:

{
  "method" : "continuePaymentTransaction",
  "requestId" : "861693918",
  "targetType" : "paymentGatewayConverge",
  "version" : "1.0",
  "parameters" : {
    "paymentGatewayId" : "79f139c4-3bb0-4bdb-b587-6cbcce02acf7",
    "chanId" : "710d97d2-4dcc-453a-a3fa-6983a4411cc5",
    "CardPresent" : "true"
  }
}
Response
{
  "requestId" : "861693917",
  "statusDetails" : "REQUEST_ACCEPTED",
  "data" : {
    "paymentGatewayCommand" : {
      "completed" : false,
      "eventQueue" : [ ],
      "chanId" : "710d97d2-4dcc-453a-a3fa-6983a4411cc5",
      "requiredInformation" : [ "CardPresent" ]
    }
  }
}

Java

ECLCardTenderInterface cardTenderInterface = account.getTransactionProcessor().createCardTender();
cardTenderInterface.setAllowedCardEntryTypes(EnumSet.of(ECLCardEntryType.MANUALLY_ENTERED));
account.getTransactionProcessor().processTransaction(transaction, cardTenderInterface, transactionListener);
                    

Objective-C

Using the same code from the Sale transaction with a card tender, the only addition we need to do before processing the transaction is:

tender.allowedCardEntryTypes = ECLCardEntryType_ManuallyEntered;
//optional - for tracking first and last name of manually entered transaction
[cardTender setAVSField:ECLAVS_CardholderFirstName withValue:_firstName.text];
[cardTender setAVSField:ECLAVS_CardholderLastName withValue:_lastName.text];

C#

PaymentArgs bea = new PaymentArgs(); 
... 
bea.cardEntryTypes = new string[1];
bea.cardEntryTypes[0] = “MANUALLY_ENTERED”;

... 
m_CWS.StartPaymentTransaction(bea, MyNotifyCWSEvent, MyPaymentComplete);

Request

Respond to card present request.

Dictionary<string, string> info = new Dictionary<string, string>();
info["CardPresent"] = "true";   /* Note:  string not boolean. Set to 'true' if card is present. 'false' if it is not present */

PaymentTransactionResults tr = m_CWS.ContinuePaymentTransaction(m_PaymentGatewayId, chanId, info, MyNotifyCWSEvent);

Response

public void MyPaymentComplete(PaymentResults ber)
{
    String[] req = ber.getRequiredInformation();
    if (null != req)                                 /* expect "CardPresent" */
}