package org.wikiwebserver.util;

import javax.xml.namespace.QName;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class SECPaySoapHelper {
       
    static String endPointAddress = "https://www.secpay.com/java-bin/services/SECCardService?wsdl";
        // "https://www.secpay.com/java-bin/soap";   
    
    public static String validateCardFull(String username, String password, String transid,
                                   String ip, String cardHolderName, String cardNumber,
                                   String amount, String expiryDate, String issueNumber,
                                   String startDate, String order, String shipping,
                                   String billing, String options) throws Exception {
        
        Object[] methodParams = {
                username, password, transid, ip, cardHolderName, cardNumber, amount,
                expiryDate,  issueNumber, startDate, order, shipping, billing, options
        };   

        return secCardServiceSoapCall("validateCardFull", methodParams);
    }
    
    public static String threeDSecureEnrolmentRequest(String username, String password, String transid,
                                               String ip, String cardHolderName, String cardNumber,
                                               String amount, String expiryDate, String issueNumber,
                                               String startDate, String order, String shipping,
                                               String billing, String options, 
                                               // 3D Secure stuff
                                               String deviceCategory, String acceptHeaders, 
                                               String userAgent, String mpiMerchantName, 
                                               String mpiMerchantUrl, String mpiDescription, 
                                               String purchaseRecurringFrequency) throws Exception {
        
        options += ",device_category=" + deviceCategory
                 + ",accept_headers=" + acceptHeaders
                 + ",user_agent=" + userAgent
                 + ",mpi_merchant_name=" + mpiMerchantName
                 + ",mpi_merchant_url=" + mpiMerchantUrl
                 + ",mpi_description=" + mpiDescription
                 + ",purchaseRecurringFrequency=" + purchaseRecurringFrequency;
        
        Object[] methodParams = {
                username, password, transid, ip, cardHolderName, cardNumber, amount,
                expiryDate,  issueNumber, startDate, order, shipping, billing, options
        };          
        
        return secCardServiceSoapCall("threeDSecureEnrolmentRequest", methodParams);
    }
    
    private static String secCardServiceSoapCall(String operation, Object[] params) throws Exception {
        
        Service service = new Service();
        Call call = (Call) service.createCall();
        call.setTargetEndpointAddress( endPointAddress );
        call.setOperationName(new QName("SECCardService", operation));

        return (String) call.invoke(params);
    }    
    
    public static void main(String[] args) {
        String response = null;
        try {
            response = validateCardFull("secpay", 
                    "secpay",
                    ""+Math.random(),
                    "here",
                    "Mikey",
                    "4444333322221111",
                    "20",
                    "09/09",
                    "",
                    "",
                    "",
                    "",
                    "",
                    "test_status=true");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
        System.out.println(response);
    }
}

