Download for payment response code
testUrl = "https://transact.nab.com.au/test/xmlapi/payment"; liveUrl = "https://transact.nab.com.au/xmlapi/payment"; NAB Transact XML API – Public Test Account Details Merchant ID: XYZ0010 Transaction Password: abcd1234
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package xmlparser; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; /** * * @author Pritom K Mondal */ public class NabTokenPayment { public static void main(String[] args) throws Exception { NabTokenPayment nabTokenPayment = new NabTokenPayment(); nabTokenPayment.pay(); } private void pay() throws Exception { String testURL = "https://transact.nab.com.au/xmlapidemo/periodic"; String liveURL = "https://transact.nab.com.au/xmlapi/periodic"; String xml = getTokenPaymentXml(); URL url = new URL(testURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "text/xml"); connection.setRequestProperty("charset", "utf-8"); connection.setRequestProperty("Content-Length", "" + Integer.toString(xml.getBytes().length)); connection.setUseCaches (false); DataOutputStream wr = new DataOutputStream(connection.getOutputStream ()); wr.writeBytes(xml); wr.flush(); wr.close(); System.out.println("Response code from nab: " + connection.getResponseCode()); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line, responseText = ""; while ((line = br.readLine()) != null) { responseText += line; } br.close(); System.out.println("Response: \n" + responseText); } private String getTokenPaymentXml() throws Exception { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssZ"); String messageTimestamp = dateFormat.format(new Date()); String messageID = MD5(messageTimestamp); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<NABTransactMessage>\n" + "<MessageInfo>\n" + "<messageID>" + messageID + "</messageID>\n" + "<messageTimestamp>" + messageTimestamp + "</messageTimestamp>\n" + "<timeoutValue>60</timeoutValue>\n" + "<apiVersion>spxml-4.2</apiVersion>\n" + "</MessageInfo>\n" + "<MerchantInfo>\n" + "<merchantID>XYZ0010</merchantID>\n" + "<password>abcd1234</password>\n" + "</MerchantInfo>\n" + "<RequestType>Periodic</RequestType>\n" + "<Periodic>\n" + "<PeriodicList count=\"1\">\n" + "<PeriodicItem ID=\"1\">\n" + "<actionType>trigger</actionType>\n" + "<periodicType>8</periodicType>\n" + "<crn>47e8cb6ddc6ba08890d4</crn>\n" + "<transactionReference>Test Trigger CC Payment</transactionReference>\n" + "<amount>1200</amount>\n" + "<currency>AUD</currency>\n" + "</PeriodicItem>\n" + "</PeriodicList>\n" + "</Periodic>\n" + "</NABTransactMessage>"; return xml; } private String convertedToHex(byte[] data) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < data.length; i++) { int halfOfByte = (data[i] >>> 4) & 0x0F; int twoHalfBytes = 0; do { if ((0 <= halfOfByte) && (halfOfByte <= 9)) { buf.append( (char) ('0' + halfOfByte) ); } else { buf.append( (char) ('a' + (halfOfByte - 10)) ); } halfOfByte = data[i] & 0x0F; } while(twoHalfBytes++ < 1); } return buf.toString(); } public String MD5(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException { MessageDigest md; md = MessageDigest.getInstance("MD5"); byte[] md5 = new byte[64]; md.update(text.getBytes("iso-8859-1"), 0, text.length()); md5 = md.digest(); return convertedToHex(md5); } }
Successful response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <NABTransactMessage> <MessageInfo> <messageID>af7296fcab496a96cf54aef73ff66960</messageID> <messageTimestamp>20131911003610525000+660</messageTimestamp> <apiVersion>spxml-4.2</apiVersion> </MessageInfo> <MerchantInfo> <merchantID>XYZ0010</merchantID> </MerchantInfo> <Status> <statusCode>0</statusCode> <statusDescription>Normal</statusDescription> </Status> <RequestType>Periodic</RequestType> <Periodic> <PeriodicList count="1"> <PeriodicItem ID="1"> <actionType>trigger</actionType> <crn>47e8cb6ddc6ba08890d4</crn> <responseCode>00</responseCode> <responseText>Approved</responseText> <successful>yes</successful> <periodicType>8</periodicType> <amount>1200</amount> <currency>AUD</currency> <txnID>983211</txnID> <transactionReference>Test Trigger CC Payment</transactionReference> <settlementDate>20131119</settlementDate> <CreditCardInfo> <pan>444433...111</pan> <expiryDate>09/15</expiryDate> <cardType>6</cardType> <cardDescription>Visa</cardDescription> </CreditCardInfo> </PeriodicItem> </PeriodicList> </Periodic> </NABTransactMessage>
Error response:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <NABTransactMessage> <MessageInfo> <messageID>f8c4385e4beb4a7c177e8b8aaa124e15</messageID> <messageTimestamp>20131911004348303000+660</messageTimestamp> <apiVersion>spxml-4.2</apiVersion> </MessageInfo> <MerchantInfo> <merchantID>XYZ0010</merchantID> </MerchantInfo> <Status> <statusCode>0</statusCode> <statusDescription>Normal</statusDescription> </Status> <RequestType>Periodic</RequestType> <Periodic> <PeriodicList count="1"> <PeriodicItem ID="1"> <actionType>trigger</actionType> <crn>47e8cb6ddc6ba08890d4</crn> <responseCode>04</responseCode> <responseText>Pick Up Card</responseText> <successful>no</successful> <periodicType>8</periodicType> <amount>304</amount> <currency>AUD</currency> <txnID>983222</txnID> <transactionReference>Test Trigger CC Payment</transactionReference> <settlementDate>20131119</settlementDate> <CreditCardInfo> <pan>444433...111</pan> <expiryDate>09/15</expiryDate> <cardType>6</cardType> <cardDescription>Visa</cardDescription> </CreditCardInfo> </PeriodicItem> </PeriodicList> </Periodic> </NABTransactMessage>