You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java基于PayPal NVP/SOAP Merchant SDK交易查询的技术咨询

嘿,我正好有过使用PayPal Merchant SDK Java做交易查询的经验,来帮你搞定这两个问题:

1. TransactionSearchReq 完整调用示例代码

先给你一个可直接参考的完整示例,涵盖从初始化API客户端到处理响应的全流程:

import com.paypal.core.*;
import com.paypal.sdk.exceptions.PayPalException;
import com.paypal.soap.api.*;
import java.util.Calendar;
import java.util.TimeZone;

public class PayPalTransactionSearch {
    public static void main(String[] args) {
        // 1. 配置API凭证(沙箱/生产环境替换成你的实际凭证)
        String username = "your_api_username";
        String password = "your_api_password";
        String signature = "your_api_signature";
        String mode = "sandbox"; // 生产环境改为"live"

        // 初始化API上下文
        APIProfile profile = ProfileFactory.createSignatureAPIProfile();
        profile.setAPIUsername(username);
        profile.setAPIPassword(password);
        profile.setAPISignature(signature);
        profile.setEnvironment(mode);
        profile.setTimeout(30000); // 设置超时时间

        // 2. 构建TransactionSearch请求
        TransactionSearchReq request = new TransactionSearchReq();
        TransactionSearchRequestType searchRequest = new TransactionSearchRequestType();

        // 设置查询时间范围(必须参数,用UTC时间避免时区偏差)
        Calendar startDate = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        startDate.add(Calendar.MONTH, -1); // 查询过去1个月的交易
        searchRequest.setStartDate(startDate);

        Calendar endDate = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        searchRequest.setEndDate(endDate);

        // 可选:添加其他过滤条件,比如交易类型、金额范围等
        // searchRequest.setTransactionClass(TransactionClassCodeType.RECEIVED);
        // searchRequest.setAmount(new BasicAmountType(CurrencyCodeType.USD, "10.00"));

        request.setTransactionSearchRequest(searchRequest);

        // 3. 执行API调用
        PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(profile);
        try {
            TransactionSearchResponseType response = service.transactionSearch(request);

            // 4. 处理响应结果
            if (response.getAck().equals(AckCodeType.SUCCESS) || response.getAck().equals(AckCodeType.SUCCESSWITHWARNING)) {
                System.out.println("交易查询成功,共找到 " + response.getTransactionDetails().size() + " 条交易");
                for (TransactionSearchResultType transaction : response.getTransactionDetails()) {
                    System.out.println("交易ID: " + transaction.getTransactionID());
                    System.out.println("交易金额: " + transaction.getGrossAmount().getValue() + " " + transaction.getGrossAmount().getCurrencyID());
                    System.out.println("交易时间: " + transaction.getTransactionTime());
                    System.out.println("------------------------");
                }
            } else {
                System.out.println("查询失败,错误信息: " + response.getErrors().get(0).getLongMessage());
            }
        } catch (PayPalException e) {
            e.printStackTrace();
        }
    }
}

几个关键要点提醒:

  • 必须用UTC时间设置查询范围,避免时区偏差导致漏查或多查
  • 凭证要对应正确的环境(沙箱/生产),别搞混
  • 可选参数可以根据你的需求添加,比如过滤收款交易、特定金额等
2. Merchant NVP/SOAP SDK 与2018年安全更新兼容性

PayPal在2018年6月实施的安全更新主要要求TLS 1.2加密协议和HTTP/1.1协议,关于Merchant SDK的兼容性:

  • 只要你使用的是2017年及以后发布的SDK版本,就已经支持TLS 1.2,完全符合要求。建议直接升级到最新的稳定版,避免版本过旧带来的安全问题。
  • 另外,你的JVM版本也需要支持TLS 1.2:Java 8及以上版本默认启用TLS 1.2;如果用Java 7,需要手动在代码里添加配置启用TLS 1.2(比如System.setProperty("https.protocols", "TLSv1.2"))。
  • NVP/SOAP API本身并没有被PayPal废弃(当时的更新只是针对安全协议),所以这个SDK可以正常满足你的需求,不用担心因为安全更新而无法使用。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:08:49