Reply
Member
Posts: 1
Registered: ‎10-07-2020

"Null" Response from Authorized.net 'ANetApiResponse' Object.

[ Edited ]

Hello,

I'm Developing an Android App and I have the necessity of using Authorize.net
Recurring Payment, so, I have added the Java SDK of Authorize.Net in my
android app as a library.

But once I'm hitting the API I'm getting a null response, even if I have
regenerated the key again for the Test Mode.


Code for Subscribing is below:

public static ANetApiResponse createAuthorizeNetSubscription(String
apiLoginId, String transactionKey,intervalLength, Double amount, String cardNumber,
String monthYear, String fName, String lName) {
         //Common code to set for all requests
         ApiOperationBase.setEnvironment(Environment.SANDBOX);
         MerchantAuthenticationType merchantAuthenticationType  = new
MerchantAuthenticationType() ;
         merchantAuthenticationType.setName(apiLoginId);
         merchantAuthenticationType.setTransactionKey(transactionKey);
         
ApiOperationBase.setMerchantAuthentication(merchantAuthenticationType);

         // Set up payment schedule
         PaymentScheduleType schedule = new PaymentScheduleType();
         PaymentScheduleType.Interval interval = new
PaymentScheduleType.Interval();
         interval.setLength(intervalLength);
         interval.setUnit(ARBSubscriptionUnitEnum.DAYS);
         schedule.setInterval(interval);

         try {
             XMLGregorianCalendar startDate =
DatatypeFactory.newInstance().newXMLGregorianCalendar();
             startDate.setDay(31);
             startDate.setMonth(12);
             startDate.setYear(2020);
             schedule.setStartDate(startDate); //2020-08-30
         }
         catch(Exception e) {
             Log.e(TAG,"XMLGregorianCalendar Exception -
"+e.getMessage());
         }

         schedule.setTotalOccurrences((short)12);
         schedule.setTrialOccurrences((short)1);

         // Populate the payment data
         PaymentType paymentType = new PaymentType();
         CreditCardType creditCard = new CreditCardType();
         creditCard.setCardNumber(cardNumber);
         creditCard.setExpirationDate(monthYear);
         paymentType.setCreditCard(creditCard);

         ARBSubscriptionType arbSubscriptionType = new
ARBSubscriptionType();
         arbSubscriptionType.setPaymentSchedule(schedule);
         arbSubscriptionType.setAmount(new BigDecimal(amount).setScale(2,
RoundingMode.CEILING));
         arbSubscriptionType.setTrialAmount(new
BigDecimal(1.23).setScale(2, RoundingMode.CEILING));
         arbSubscriptionType.setPayment(paymentType);

         NameAndAddressType name = new NameAndAddressType();
         name.setFirstName(fName);
         name.setLastName(lName);

         arbSubscriptionType.setBillTo(name);

         // Make the API Request
         ARBCreateSubscriptionRequest apiRequest = new
ARBCreateSubscriptionRequest();
         apiRequest.setSubscription(arbSubscriptionType);
         ARBCreateSubscriptionController controller = new
ARBCreateSubscriptionController(apiRequest);
         controller.execute();
         ARBCreateSubscriptionResponse response =
controller.getApiResponse();
         if (response!=null) {

             if (response.getMessages().getResultCode() ==
MessageTypeEnum.OK) {

                 Log.e(TAG,response.getSubscriptionId());
                 
Log.e(TAG,response.getMessages().getMessage().get(0).getCode());
                 
Log.e(TAG,response.getMessages().getMessage().get(0).getText());
             }
             else
             {
                 Log.e(TAG,"Failed to create Subscription:  " +
response.getMessages().getResultCode());
                 
Log.e(TAG,response.getMessages().getMessage().get(0).getText());
             }
         }

         return response;
     }



Also, I have added the Credit Card Charge Code so that I could initiate
the charge from the user Credit Card, whose code is also below:

public static ANetApiResponse chargeCreditCardAuthorizeNet(String
apiLoginId, String transactionKey, Double amount, String cardNumber,
String monthYear, String email) {

         // Set the request to operate in either the sandbox or
production environment
         ApiOperationBase.setEnvironment(Environment.SANDBOX);

         // Create object with merchant authentication details
         MerchantAuthenticationType merchantAuthenticationType  = new
MerchantAuthenticationType() ;
         merchantAuthenticationType.setName(apiLoginId);
         merchantAuthenticationType.setTransactionKey(transactionKey);

         // Populate the payment data
         PaymentType paymentType = new PaymentType();
         CreditCardType creditCard = new CreditCardType();
         creditCard.setCardNumber(cardNumber);
         creditCard.setExpirationDate(monthYear);
         paymentType.setCreditCard(creditCard);

         // Set email address (optional)
         CustomerDataType customer = new CustomerDataType();
         customer.setEmail(email);

         // Create the payment transaction object
         TransactionRequestType txnRequest = new
TransactionRequestType();
         
txnRequest.setTransactionType(TransactionTypeEnum.AUTH_CAPTURE_TRANSACTION.value());
         txnRequest.setPayment(paymentType);
         txnRequest.setCustomer(customer);
         txnRequest.setAmount(new BigDecimal(amount).setScale(2,
RoundingMode.CEILING));

         // Create the API request and set the parameters for this
specific request
         CreateTransactionRequest apiRequest = new
CreateTransactionRequest();
         
apiRequest.setMerchantAuthentication(merchantAuthenticationType);
         apiRequest.setTransactionRequest(txnRequest);

         // Call the controller
         CreateTransactionController controller = new
CreateTransactionController(apiRequest);
         controller.execute();

         // Get the response
         CreateTransactionResponse response = new
CreateTransactionResponse();
         response = controller.getApiResponse();

         // Parse the response to determine results
         if (response!=null) {
             // If API Response is OK, go ahead and check the transaction
response
             if (response.getMessages().getResultCode() ==
MessageTypeEnum.OK) {
                 TransactionResponse result =
response.getTransactionResponse();
                 if (result.getMessages() != null) {
                     Log.e(TAG,"Successfully created transaction with
Transaction ID: " + result.getTransId());
                     Log.e(TAG,"Response Code: " +
result.getResponseCode());
                     Log.e(TAG,"Message Code: " +
result.getMessages().getMessage().get(0).getCode());
                     Log.e(TAG,"Description: " +
result.getMessages().getMessage().get(0).getDescription());
                     Log.e(TAG,"Auth Code: " + result.getAuthCode());
                 } else {
                     Log.e(TAG,"Failed Transaction.");
                     if (response.getTransactionResponse().getErrors() !=
null) {
                         Log.e(TAG,"Error Code: " +
response.getTransactionResponse().getErrors().getError().get(0).getErrorCode());
                         Log.e(TAG,"Error message: " +
response.getTransactionResponse().getErrors().getError().get(0).getErrorText());
                     }
                 }
             } else {
                 Log.e(TAG,"Failed Transaction.");
                 if (response.getTransactionResponse() != null &&
response.getTransactionResponse().getErrors() != null) {
                     Log.e(TAG,"Error Code: " +
response.getTransactionResponse().getErrors().getError().get(0).getErrorCode());
                     Log.e(TAG,"Error message: " +
response.getTransactionResponse().getErrors().getError().get(0).getErrorText());
                 } else {
                     Log.e(TAG,"Error Code: " +
response.getMessages().getMessage().get(0).getCode());
                     Log.e(TAG,"Error message: " +
response.getMessages().getMessage().get(0).getText());
                 }
             }
         } else {
             // Display the error code and message when response is null
             ANetApiResponse errorResponse =
controller.getErrorResponse();
             Log.e(TAG,"Failed to get response"+errorResponse);
             if (!errorResponse.getMessages().getMessage().isEmpty()) {
                 Log.e(TAG,"Error:
"+errorResponse.getMessages().getMessage().get(0).getCode()+" \n"+
errorResponse.getMessages().getMessage().get(0).getText());
             }
         }

         return response;
     }



In both the response I'm getting null value.

Could you please help me out with this?

Thank You.