【问题标题】:Exception in thread "main" java.lang.NullPointerException at com.auth.net.commons.authorize.net.GetSettledBatchList.main in Auth.net Java SDKAuth.net Java SDK 中 com.auth.net.commons.authorize.net.GetSettledBatchList.main 的线程“main”java.lang.NullPointerException 中的异常
【发布时间】:2016-02-05 10:22:55
【问题描述】:

我需要Authorized.net Java SDK 专家的帮助。我是GetSettledBatchList事务,使用以下代码,但它给了我例外,我无法理解它接受哪种日期格式。

错误仅供参考:

11/05/15 00:32:56,875:  INFO [pool-1-thread-1] (net.authorize.util.LogHelper:24) - Use Proxy: 'false'
Exception in thread "main" java.lang.NullPointerException
    at com.auth.net.commons.authorize.net.GetSettledBatchList.main(GetSettledBatchList.java:52)

到目前为止我开发的代码供参考:请帮助我如何解决这个错误。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;

import net.authorize.Environment;
import net.authorize.api.contract.v1.GetSettledBatchListRequest;
import net.authorize.api.contract.v1.GetSettledBatchListResponse;
import net.authorize.api.contract.v1.MerchantAuthenticationType;
import net.authorize.api.contract.v1.MessageTypeEnum;
import net.authorize.api.controller.GetSettledBatchListController;
import net.authorize.api.controller.base.ApiOperationBase;

public class GetSettledBatchList {
    public static final String apiLoginId= "XXXXX";
    public static final String transactionKey= "XXXX";

    public static void main(String[] args) throws ParseException, DatatypeConfigurationException {
        GregorianCalendar gc=new GregorianCalendar();
        ApiOperationBase.setEnvironment(Environment.SANDBOX);

        MerchantAuthenticationType merchantAuthenticationType= new MerchantAuthenticationType() ;
        merchantAuthenticationType.setName(apiLoginId);
        merchantAuthenticationType.setTransactionKey(transactionKey);
        ApiOperationBase.setMerchantAuthentication(merchantAuthenticationType);

        GetSettledBatchListRequest getRequest = new GetSettledBatchListRequest();

        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");

        Date firstSettlementDate = df.parse("2015-01-26");
        gc.setTime(firstSettlementDate);

        Date lastSettlementDate = df.parse("2015-05-05");
        gc.setTime(lastSettlementDate);

        getRequest.setFirstSettlementDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(gc));
        getRequest.setLastSettlementDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(gc));
        getRequest.setMerchantAuthentication(merchantAuthenticationType);
        GetSettledBatchListController controller = new GetSettledBatchListController(getRequest);
        controller.execute();

        GetSettledBatchListResponse getResponse = new GetSettledBatchListResponse();
        if (getResponse!=null) {

            if (getResponse.getMessages().getResultCode() == MessageTypeEnum.OK) {
                System.out.println(getResponse.getMessages().getMessage().get(0).getCode());
                System.out.println(getResponse.getMessages().getMessage().get(0).getText());
            }
            else{
                System.out.println("Failed to get settled batch list:  " + getResponse.getMessages().getResultCode());
            }
        }
    }
}

【问题讨论】:

    标签: java authorize.net


    【解决方案1】:

    第 52 行的内容为空。尝试添加空检查:

    if (getResponse!=null && getResponse.getMessages() != null && getResponse.getMessages().getResultCode() != null) {
    
            if (getResponse.getMessages().getResultCode() == MessageTypeEnum.OK) {
                if (getResponse.getMessages().getMessage() != null && getResponse.getMessages().getMessage().get(0) != null) {
                    System.out.println(getResponse.getMessages().getMessage().get(0).getCode());
                    System.out.println(getResponse.getMessages().getMessage().get(0).getText());
                }
            }
            else{
                System.out.println("Failed to get settled batch list:  " + getResponse.getMessages().getResultCode());
            }
    }
    

    【讨论】:

    • 在沙盒帐户中,我可以看到已结算交易的列表,但是通过 Java Auth API 我们可以看到这一点,就像仅处理日期一样
    • 我不明白你在说什么。将调试器附加到您的代码中,并逐步检查每一行以查找错误源。
    • davehenry - 请查看链接github.com/AuthorizeNet/sdk-java/issues/…,这是我面临的问题。
    【解决方案2】:

    第 47 行在您的代码中没有意义。线

    GetSettledBatchListResponse getResponse = new GetSettledBatchListResponse();
    

    从 API 返回一个空响应。您没有任何行来实际从控制器中提取响应。

    如果您在 Authorize.Net GitHub 存储库中查看示例代码的 link,您会注意到上面的行应该替换为

    GetSettledBatchListResponse getResponse = controller.getApiResponse();
    

    试试这个,然后将结果返回给我们。

    【讨论】:

      【解决方案3】:

      此问题已在最新版本的anet-java-sdk 1.8.6 每个链接https://github.com/AuthorizeNet/sdk-java/issues/61 中得到修复。所以下面的代码工作正常。确保在使用日期时,FirstSettlementDateLastSettlementDate 间隔不应超过 30 天。

      public class SettledTransactionDetails {
          public static final String apiLoginID= "XXXXX";
          public static final String transactionKey= "XXXXXX";
      
          @SuppressWarnings("unchecked")
          public static void main(String[] args) throws ParseException {
              Merchant merchant = Merchant.createMerchant(Environment.SANDBOX, apiLoginID, transactionKey);
      
              // get the list of Unsettled transactions 
              net.authorize.reporting.Transaction transaction =
                      merchant.createReportingTransaction(TransactionType.GET_SETTLED_BATCH_LIST);
      
              ReportingDetails reportingDetails = ReportingDetails.createReportingDetails();
      
              SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
              reportingDetails.setBatchFirstSettlementDate(formatter.parse("16/06/2015"));
              reportingDetails.setBatchLastSettlementDate(formatter.parse("15/07/2015"));
              reportingDetails.setBatchIncludeStatistics(true);
              transaction.setReportingDetails(reportingDetails);
      
              Result<Transaction> result =(Result<Transaction>) merchant.postTransaction(transaction);
              System.out.println("Result : " + result.getResultCode());
      
              ArrayList<BatchDetails> batchDetailsList = result.getReportingDetails().getBatchDetailsList();
              for (int i = 0; i < batchDetailsList.size(); i++) {
                  ArrayList<BatchStatistics> batchStatisticsList = batchDetailsList.get(i).getBatchStatisticsList();
                  for (int j = 0; j < batchStatisticsList.size(); j++) {
                      BatchStatistics batchStatistics = batchStatisticsList.get(j);
                      System.out.println("====================== "  + j+ " start");
                      System.out.println("Account Type : [" + batchStatistics.getAccountType()+"]");
                      System.out.println("Charge Amount : [" + batchStatistics.getChargeAmount()+"]");
                      System.out.println("Charge BackAmount : [" + batchStatistics.getChargebackAmount()+"]");
                      System.out.println("Charge Charge Back Amount : [" + batchStatistics.getChargeChargebackAmount()+"]");
                      System.out.println("Charge Returned Items Amount [: " + batchStatistics.getChargeReturnedItemsAmount()+"]");
                      System.out.println("Refund Amount : [" + batchStatistics.getRefundAmount());
                      System.out.println("Refund Charge Back Amount : [" + batchStatistics.getRefundChargebackAmount());
                      System.out.println("Account Type : [" + batchStatistics.getAccountType());
                      System.out.println("====================== "  + j+ " end");
                  }
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 2023-03-10
        • 2013-04-30
        • 1970-01-01
        相关资源
        最近更新 更多