/**
* Authorize.net plugin for Android Phonegap
* Luis Balam 2013
* @version 0.0.1
*
*/
package org.opencorebanking.plugins;
import java.math.BigDecimal;
import net.authorize.Environment;
import net.authorize.Merchant;
import net.authorize.TransactionType;
import net.authorize.aim.cardpresent.Result;
import net.authorize.aim.Transaction;
import net.authorize.data.*;
import net.authorize.data.creditcard.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
//import org.apache.cordova.api.PluginResult.Status;
public class AuthorizeNet extends Plugin {
public String callback;
/**
* Constructor.
*/
public AuthorizeNet() {
}
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
this.callback = callbackId;
if (action.equals("request")) {
JSONObject rec = new JSONObject();
try{
JSONObject jo = args.getJSONObject(0); //getJSONObject(0);
if (jo != null) {
//obj.has("resources")
String apiLoginID = jo.has("APILoginID") ? jo.getString("APILoginID") : "";
String transactionKey = jo.has("TransactionKey") ? jo.getString("TransactionKey") : "";
String MD5Value = jo.has("APILoginID") ? jo.getString("APILoginID") : "";
String CType = jo.has("CreditCardType") ? jo.getString("CreditCardType") : ""; //MasterCard Visa AmericanExpress Discover DinersClub JCB eCheck ""
String CCNumber = jo.has("CreditCardNumber") ? jo.getString("CreditCardNumber") :"";
String CCExpM = jo.has("CreditCardExpirationMonth") ? jo.getString("CreditCardExpirationMonth") : "";
String CCExpY = jo.has("CreditCardExpirationYear") ? jo.getString("CreditCardExpirationYear") : "";
String CCCode = jo.has("CreditCardCode") ? jo.getString("CreditCardCode") : "";
Double TMount = jo.has("Amount") ? jo.getDouble("Amount") : 0.00;
String CCode = jo.has("CurrencyCode") ? jo.getString("CurrencyCode") : "";
Merchant merchant = Merchant.createMerchant(Environment.SANDBOX, apiLoginID, transactionKey);
merchant.setDeviceType(net.authorize.DeviceType.VIRTUAL_TERMINAL);
merchant.setMarketType(net.authorize.MarketType.RETAIL);
merchant.setMD5Value(MD5Value);
/*
VISA("Visa"),
MASTER_CARD("MasterCard"),
AMERICAN_EXPRESS("American Express"),
DISCOVER("Discover"),
DINERS_CLUB("Diners Club"),
JCB("JCB"),
ECHECK("eCheck"), // added for the reporting API
UNKNOWN("");
*/
//creditCard.setTrack1("%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?");
// creditCard.setTrack2(";4111111111111111=1803101000020000831?");
// create transaction
// create credit card
CreditCard creditCard = CreditCard.createCreditCard();
creditCard.setCreditCardNumber(CCNumber);
creditCard.setExpirationMonth(CCExpM);
creditCard.setExpirationYear(CCExpY);
creditCard.setCardCode(CCCode);
creditCard.setCardPresent(true);
//MasterCard Visa AmericanExpress Discover DinersClub JCB eCheck ""
if(CType.equals("Visa") ){
creditCard.setCardType(CardType.VISA);
} else if (CType.equals("MasterCard") ){
creditCard.setCardType(CardType.MASTER_CARD);
} else if (CType.equals("AmericanExpress") ){
creditCard.setCardType(CardType.AMERICAN_EXPRESS);
} else if (CType.equals("Discover") ){
creditCard.setCardType(CardType.DISCOVER);
} else if (CType.equals("DinersClub") ){
creditCard.setCardType(CardType.DINERS_CLUB);
} else if (CType.equals("JCB") ){
creditCard.setCardType(CardType.JCB);
} else if (CType.equals("eCheck") ){
creditCard.setCardType(CardType.ECHECK);
} else {
creditCard.setCardType(CardType.UNKNOWN);
}
Transaction authCaptureTransaction = merchant.createAIMTransaction(TransactionType.AUTH_CAPTURE, new BigDecimal(TMount));
authCaptureTransaction.setCurrencyCode(CCode);
authCaptureTransaction.setCreditCard(creditCard);
Result<Transaction> result = (Result<Transaction>)merchant.postTransaction(authCaptureTransaction);
if(result.isApproved()) {
//Log.e("org.opencorebanking", result.getRefTransId() );
rec.put("TransactionID", result.getTransId());
//rec.put("TransactionRefID", result.getRefTransId());
return new PluginResult(PluginResult.Status.OK, rec);
} else if (result.isDeclined()) {
//Log.e("org.opencorebanking", result.getResponseReasonCodes().get(0) + " : " + result.getResponseReasonCodes().get(0).getReasonText());
return new PluginResult(PluginResult.Status.ERROR,
"ERROR-DECL: " + result.getResponseReasonCodes().get(0) + " : " + result.getResponseReasonCodes().get(0).getReasonText());
} else {
//Log.e("org.opencorebanking", result.getResponseReasonCodes().get(0) + " : " + result.getResponseReasonCodes().get(0).getReasonText());
return new PluginResult(PluginResult.Status.ERROR,
"ERROR: " + result.getResponseReasonCodes().get(0) + " : " + result.getResponseReasonCodes().get(0).getReasonText());
}
}
} catch (JSONException e) {
Log.e("org.opencorebanking", "Error in Intent action " + e.getMessage());
return new PluginResult(PluginResult.Status.JSON_EXCEPTION, e.getMessage());
}
} else {
return new PluginResult(PluginResult.Status.INVALID_ACTION, "Invalid option " + action );
}
PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
r.setKeepCallback(true);
return r;
}
}