7 Data Security Features
7.2 Jetpay Account Safe tokens
JetPay Account Safe tokens are data that can be used in the place of card information when performing transactions. Because the tokens are not card holder information, merchants using them do not have to protect them in the same way they have to protect card holder information. The token takes the place of the card number and the expiration date. No other card holder information is associated with the token.
The first step to using the tokens is getting a token that maps to card number. This can be done in two ways. The first way is to use the TOKENIZE message. This message looks like:
<JetPay> <TransactionID>TOKENTEST000000002</TransactionID> <TransactionType>TOKENIZE</TransactionType> <CardNum>4000300020001000</CardNum> <CardExpMonth>12</CardExpMonth> <CardExpYear>15</CardExpYear> <TerminalID>TESTTERMINAL</TerminalID> </JetPay>
And its response looks like:
<JetPayResponse> <TransactionID>TOKENTEST000000002</TransactionID> <ActionCode>000</ActionCode> <Approval>TOKEN0</Approval> <ResponseText>TOKENIZED</ResponseText> <Token>KKHKOIIBJBJBKNKMNBJJJKJK</Token> </JetPayResponse>
The TOKENIZE message does not send the card to the associations to be validated. So a successful tokenization does not mean that the card is valid.
The second way is to use the Tokenize attribute of the CardNum field to return a token as part of another transaction such as an AUTHONLY or a SALE. To enable this set the Tokenize attribute in the CardNum field to "true": <JetPay> <TransactionID>TOKENTEST000000003</TransactionID> <TransactionType>SALE</TransactionType> <CardNum Tokenize="true">4000300020001000</CardNum> <CardExpMonth>12</CardExpMonth> <CardExpYear>15</CardExpYear> <TotalAmount>100</TotalAmount> <TerminalID>TESTTERMINAL</TerminalID> </JetPay>
The response will look like:
<JetPayResponse> <TransactionID>TOKENTEST000000003</TransactionID> <ActionCode>000</ActionCode> <Approval>TEST47</Approval> <ResponseText>APPROVED</ResponseText> <Token>KKHKOIIBJBJBKNKMNBJJJKJK</Token> </JetPayResponse>
Once you have a token then it can be used in place of the CardNumber, CardExpMonth, and CardExpYear
fields: <JetPay> <TransactionID>TOKENTEST000000003</TransactionID> <TransactionType>AUTHONLY</TransactionType> <Token>KKHKOIIBJBJBKNKMNBJJJKJK</Token> <TotalAmount>100</TotalAmount> <TerminalID>TESTTERMINAL</TerminalID> </JetPay>
And the response will be as normal:
<JetPayResponse> <TransactionID>TOKENTEST000000003</TransactionID> <ActionCode>000</ActionCode> <Approval>TEST47</Approval> <ResponseText>APPROVED</ResponseText> </JetPayResponse>
If the token is not present in our system, an ActionCode of 912 is returned.
Tokens are also available for ACH transactions. In an ACH transaction they take the place of the both the ABA (routing code) and DDA (account number). To request a token with an ACH transaction set the Tokenize
attribute of the AccountNumber tag to true as in the following example:
<JetPay>
<TransactionID>RTST00001301336246</TransactionID> <TransactionType> CHECK </TransactionType>
<Origin> INTERNET </Origin>
<TotalAmount> 599500 </TotalAmount> <CardName> Fred Furtz </CardName> <ACH>
<AccountNumber Tokenize='true'> 1982597 </AccountNumber> <ABA > 061120767 </ABA>
<CheckNumber > 1234 </CheckNumber> </ACH>
</JetPay>
And the response for this transaction will look like:
<JetPayResponse> <TransactionID>RTST00001301336246</TransactionID> <ActionCode>000</ActionCode> <Approval>000000</Approval> <ResponseText>CHECK ACCEPTED</ResponseText> <Token>KKHIHCOIKJJHHCKCKLHMJKJK</Token> </JetPayResponse>
And the token can then be used in a later transaction like so:
<JetPay>
<TransactionID>RTST00001301336260</TransactionID> <TransactionType> CHECK </TransactionType>
<TerminalID> TESTTERMINAL </TerminalID> <Origin> INTERNET </Origin>
<TotalAmount> 599500 </TotalAmount> <CardName> Fred Furtz </CardName>
<Token> KKHIHCOIKJJHHCKCKLHMJKJK </Token> <ACH>
<CheckNumber > 1234 </CheckNumber> </ACH>
</JetPay>
Please notice that the Token tag does not go in the ACH block and that the CheckNumber is still required.
If you only want to tokenize an ABA/AccountNumber pair without doing an actual transaction the TOKENIZE
transaction type can be used:
<JetPay>
<TransactionID>RTST00021301516309</TransactionID> <TransactionType> TOKENIZE </TransactionType> <TerminalID> TESTTERMINAL </TerminalID> <CardName> Fred Furtz </CardName> <ACH> <AccountNumber> 1772105 </AccountNumber> <ABA > 061120767 </ABA> <CheckNumber > 1234 </CheckNumber> </ACH> </JetPay>
And the response will be
<JetPayResponse>
<TransactionID>RTST00021301516309</TransactionID> <ActionCode>000</ActionCode>
<Approval>TOKEN0</Approval>
<Token>KKHJMMIMKJJHIKHKKCHBJKJI</Token> </JetPayResponse>