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
相关产品推荐
相关产品推荐

