com.nibss.util.CentralPayMerchant.java Source code

Java tutorial

Introduction

Here is the source code for com.nibss.util.CentralPayMerchant.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nibss.util;

import com.nibss.web.CentralPayOperations;
import com.nibss.web.CentralPayOperations_Service;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

/**
 *
 * @author Famodun Gbolaga
 */
public class CentralPayMerchant {
    //final String MERCHANT_ID ="00000001";
    public Request req = new Request();
    private String MERCHANT_ID;
    private String SECRET_KEY;
    private InputStream input = null;
    public static int PRETTY_PRINT_INDENT_FACTOR = 4;
    private String logURL;
    com.nibss.web.CentralPayOperations_Service service = new com.nibss.web.CentralPayOperations_Service();
    com.nibss.web.CentralPayOperations port = service.getCentralPayOperationsPort();

    static {
        javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {

            public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
                if (hostname.equals("staging.nibss-plc.com.ng")) {
                    return true;
                }
                return false;
            }
        });
    }

    public CentralPayMerchant() {
        XTrustProvider fgc = new XTrustProvider();
        fgc.install();
        this.MERCHANT_ID = Constants.MERCHANT_ID;
        this.SECRET_KEY = Constants.SECRET_KEY;
    }

    public void setLogURL(String url) {
        this.logURL = url;
    }

    public String listActiveBanks(String id) {
        String responseXML = this.port.listActiveBanks(id);

        return XmltoJson(responseXML);
    }

    private void logTransaction(String transactionID, String request, String response) {
        List nvps = new ArrayList();
        nvps.add(new BasicNameValuePair("trans_id", transactionID));
        nvps.add(new BasicNameValuePair("req", request));
        nvps.add(new BasicNameValuePair("res", response));
        try {
            this.req.post(this.logURL, nvps);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String generateOTPRequest(String mandateCode, String bankCode, String billerID, String billerName,
            String amt) {
        String tid = getTransactionID();
        String endXML = "</GenerateOTPRequest>";

        String startXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><GenerateOTPRequest><MandateCode>"
                + mandateCode + "</MandateCode>" + "<TransType>" + Constants.PAYMENT + "</TransType>" + "<BankCode>"
                + bankCode + "</BankCode>" + "<BillerID>" + billerID + "</BillerID>" + "<BillerName>" + billerName
                + "</BillerName>" + "<Amount>" + amt + "</Amount>" + "<BillerTransId>" + tid + "</BillerTransId>";

        String hashXML = startXML + endXML;

        String hashValue = getHashValue(hashXML);
        startXML = startXML + "<HashValue>" + hashValue + "</HashValue>" + endXML;
        String responseXML = this.port.generateOTPRequest(startXML);

        logTransaction(tid, startXML, responseXML);
        return XmltoJson(responseXML);
    }

    public String createMandateRequest(String accountNumber, String accountName, String bankCode, String billerID,
            String billerName) {
        String tid = getTransactionID();
        String endXML = "</CreateMandateRequest>";

        String startXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><CreateMandateRequest><AcctNumber>"
                + accountNumber + "</AcctNumber>" + "<AcctName>" + accountName + "</AcctName>" + "<TransType>"
                + Constants.REGISTRATION + "</TransType>" + "<BankCode>" + bankCode + "</BankCode>" + "<BillerID>"
                + billerID + "</BillerID>" + "<BillerName>" + billerName + "</BillerName>" + "<BillerTransId>" + tid
                + "</BillerTransId>";

        String hashXML = startXML + endXML;

        String hashValue = getHashValue(hashXML);
        startXML = startXML + "<HashValue>" + hashValue + "</HashValue>" + endXML;

        String responseXML = this.port.createMandateRequest(startXML);

        logTransaction(tid, startXML, responseXML);
        return XmltoJson(responseXML);
    }

    public String validateOTP(String mandateCode, String bankCode, String otp, String billerID, String billerName,
            String amt, String transType) {
        String endXML = "</ValidateOTPRequest>";
        String tid = getTransactionID();

        String startXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><ValidateOTPRequest><MandateCode>"
                + mandateCode + "</MandateCode>" + "<TransType>" + transType + "</TransType>" + "<OTP>" + otp
                + "</OTP>" + "<BankCode>" + bankCode + "</BankCode>" + "<BillerID>" + billerID + "</BillerID>"
                + "<BillerName>" + billerName + "</BillerName>" + "<Amount>" + amt + "</Amount>" + "<BillerTransId>"
                + tid + "</BillerTransId>";

        String hashXML = startXML + endXML;

        String hashValue = getHashValue(hashXML);
        startXML = startXML + "<HashValue>" + hashValue + "</HashValue>" + endXML;
        String responseXML = this.port.validateOTPRequest(startXML);
        logTransaction(tid, startXML, responseXML);
        return XmltoJson(responseXML);
    }

    public String cancelMandate(String mandateCode, String bankCode, String billerID, String billerName) {
        String endXML = "</CancelMandateRequest>";
        String tId = getTransactionID();
        String startXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><CancelMandateRequest><MandateCode>"
                + mandateCode + "</MandateCode>" + "<TransType>" + Constants.CANCELLATION_OF_MANDATE
                + "</TransType>" + "<BankCode>" + bankCode + "</BankCode>" + "<BillerID>" + billerID + "</BillerID>"
                + "<BillerName>" + billerName + "</BillerName>" + "<BillerTransId>" + tId + "</BillerTransId>";

        String hashXML = startXML + endXML;

        String hashValue = getHashValue(hashXML);
        startXML = startXML + "<HashValue>" + hashValue + "</HashValue>" + endXML;
        String responseXML = this.port.cancelMandate(startXML);

        logTransaction(tId, startXML, responseXML);
        return XmltoJson(responseXML);
    }

    public String requeryMandate(String mandateCode, String billerID) {
        String endXML = "</RequeryMandateRequest>";

        String startXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><RequeryMandateRequest><MandateCode>"
                + mandateCode + "</MandateCode>" + "<BillerID>" + billerID + "</BillerID>";

        String hashXML = startXML + endXML;

        String hashValue = getHashValue(hashXML);
        startXML = startXML + "<HashValue>" + hashValue + "</HashValue>" + endXML;
        String responseXML = this.port.requeryMandate(startXML);
        logTransaction(getTransactionID(), startXML, responseXML);
        return XmltoJson(responseXML);
    }

    private String XmltoJson(String xml) {
        try {
            JSONObject xmlJSONObj = XML.toJSONObject(xml);
            String jsonPrettyPrintString = xmlJSONObj.toString(PRETTY_PRINT_INDENT_FACTOR);

            return jsonPrettyPrintString;
        } catch (JSONException je) {
            System.out.println(je.toString());
        }
        return null;
    }

    private void createMandateRequest() {
        String xmlRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><CreateMandateRequest><AcctNumber>1020021006</AcctNumber><AcctName>AYOWOLE R AFOLABI</AcctName><TransType>1</TransType><BankCode>057</BankCode><BillerID>NIBSS0000000033</BillerID><BillerName>VAS2NETTEST</BillerName><BillerTransId>1045621</BillerTransId><HashValue>c9e5573af83b3bb487274df43c675294aa2f0ac9e1a27c1cd2672f066b12897f</HashValue></CreateMandateRequest>";

        String responseXML = this.port.createMandateRequest(xmlRequest);
        System.out.println("Response::" + responseXML);
    }

    private String getHashValue(String stringText) {
        String sha256hex = DigestUtils.sha256Hex(stringText + this.SECRET_KEY);
        return sha256hex;
    }

    private String getTransactionID() {
        return Long.toString(new Date().getTime());
    }
    /**
     * @param args the command line arguments
     */

    /*
        
    private void listActiveBanks(){
    String responseXML = port.listActiveBanks(MERCHANT_ID);
    System.out.println("Response:: "+responseXML);
    }
        
    private void createMandateRequest(){
    String xmlRequest="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
                        "<CreateMandateRequest>\n" +
                        "<AcctNumber>1020021006</ AcctNumber >\n" +
                        "<AcctName>AYOWOLE R AFOLABI</AcctName>\n" +
                        "<TransType>1</TransType>\n" +
                        "<BankCode>057</BankCode>\n" +
                        "<BillerID>00000001</BillerID >\n" +
                        "<BillerName>TESTBILER</BillerName>\n" +
                        "<BillerTransId>1045621</BillerTransId>\n" +
                        "<HashValue>your hash value</HashValue>\n" +
                        "</CreateMandateRequest>";
    String responseXML = port.createMandateRequest(xmlRequest);
    System.out.println("Response::"+responseXML);
    }
        
    public void ValidateOTPRequest()    {
    String xmlRequest="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
            "<ValidateOTPRequest>\n" +
            "<MandateCode>0000000001</MandateCode >\n" +
            "<TransType>1</TransType>\n" +
            "<BankCode> XXX</BankCode>\n" +
            "<OTP>123321</OTP>\n" +
            "<BillerID>123</BillerID>\n" +
            "<BillerName>Konga</BillerName>\n" +
            "<Amount></Amount >\n" +
            "<BillerTransId>1045621</ BillerTransId >\n" +
            "<HashValue>XXXXXXX</HashValue>\n"+
            "</ValidateOTPRequest>";
    String responseXML = port.validateOTPRequest(xmlRequest);
    System.out.println("Response::"+responseXML);
    }
    public static void main(String[] args) {
    // TODO code application logic here
    CentralPayMerchant cpm = new CentralPayMerchant();
    //cpm.listActiveBanks();
    //cpm.createMandateRequest();
    } */
}