(Java)Paypal快速结账TransactionSearch和GetTransactionDetails接口调用总结(nvp)

上周开始接触这块,真是毫无头绪啊哭,然后就联系paypal那边技术,说实话真的很不方便抓狂,只能通过邮件,效率比较慢,但是还是感谢他们技术工程师Vicaci支持吐舌头。下面简单记录下调试过程奋斗
TransactionSearch搜索一些交易,如某一段时间内。最多返回100条记录
GetTransactionDetails:根据传递的TransactionID来获取这笔交易的相关数据

一、两个接口的API官网介绍。

首先需要连接一下两个接口的参数,您可以参考如下Paypal的API的介绍:

https://developer.paypal.com/docs/classic/api/merchant/GetTransactionDetails_API_Operation_NVP/  
https://developer.paypal.com/docs/classic/api/merchant/TransactionSearch_API_Operation_NVP/


二、目前Paypal提供的SDK sample是SOAP方式的。所以NVP的需要自己写测试
(如果是使用真实账户的话,替换请求地址https://api-3t.paypal.com/nvp):

1、TransactionSearch

NVP Request:
 https://api-3t.sandbox.paypal.com/nvp?USER=XXXX&PWD=XXXXX&SIGNATURE=XXXXXX&VERSION=109.0&METHOD=TransactionSearch&STARTDATE=2016-07-19T00:00:00Z&ENDDATE=2016-07-20T00:00:00Z&TRANSACTIONCLASS=All


简单附上示例代码:
            String gvAPIEndpoint = "https://api-3t.sandbox.paypal.com/nvp";
            String gvAPIUserName = "XXXX";
            String gvAPIPassword = "XXXX";
            String gvAPISignature = "XXXX";
            String gvVersion = "109.0";
            String methodName = "TransactionSearch";
            String nvpStr = "&STARTDATE=2016-07-27T00:00:00Z&ENDDATE=2016-07-28T00:00:00Z&TRANSACTIONCLASS=All";
            String agent = "Mozilla/5.0";

            StringBuilder respText = new StringBuilder("");
            HashMap nvp = null;

            StringBuilder encodedData = new StringBuilder("METHOD=").append(methodName).append("&VERSION=").append(gvVersion).append("&PWD=").append(gvAPIPassword).append("&USER=").append(gvAPIUserName).append("&SIGNATURE=").append(gvAPISignature).append(nvpStr);
            URL postURL = new URL(gvAPIEndpoint);
            HttpsURLConnection conn = (HttpsURLConnection) postURL.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);

            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 窗体数据被编码为名称/值对
            conn.setRequestProperty("User-Agent", agent);
            conn.setRequestProperty("Content-Length", String.valueOf(encodedData.length()));
            conn.setRequestMethod("POST");

            // get the output stream to POST to.
            DataOutputStream output = new DataOutputStream(conn.getOutputStream());
            output.writeBytes(encodedData.toString());
            output.flush();
            output.close();

            int rc = conn.getResponseCode();
            if (rc != -1) {
                BufferedReader is = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line = null;
                while (((line = is.readLine()) != null)) {
                    respText.append(line);
                }
                nvp = deformatNVP(respText.toString());
            }
            conn.disconnect();
****************************************完美分割******************************************************
贴上deformatNVP代码:
public HashMap deformatNVP(String pPayload) {
    HashMap nvp = new HashMap();
    StringTokenizer stTok = new StringTokenizer(pPayload, "&");
    while (stTok.hasMoreTokens()) {
        StringTokenizer stInternalTokenizer = new StringTokenizer(stTok.nextToken(), "=");
        if (stInternalTokenizer.countTokens() == 2) {
            String key;
            try {
                key = URLDecoder.decode(stInternalTokenizer.nextToken(), "UTF-8");
                String value;
                value = URLDecoder.decode(stInternalTokenizer.nextToken(), "UTF-8");
                nvp.put(key.toUpperCase(), value);
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Util4Logger.LOG_CHARGEERROR.info(e,e);
            }

        }
    }
    return nvp;
}


结果返回的内容如下,仅供参考
NVP Response:
{
L_TIMEZONE1=GMT, //交易时区,总是GMT
L_TYPE1=Payment, //交易类型,Payment是付款Currency Conversion(credit)是信用卡货币转换,或者是借记卡货币转换Currency Conversion(debit)
L_CURRENCYCODE1=USD, //货币单位
L_FEEAMT1=-7.52, //Paypal走的金额
L_NAME1=ls l, //付款者名字
L_NETAMT1=241.48, //所剩金额
L_STATUS1=Completed,
L_AMT1=249.00, //总付款金额
L_EMAIL1=11@qq.com, //付款者邮件地址
L_TIMESTAMP1=2016-07-19T11:29:53Z, //交易日期时间(UTC/GMT)
L_TRANSACTIONID1=4FH98116D5855181S, //交易号,注意,通过GetTransactionDetails获取交易的更详细的信息需要这个

L_TIMEZONE0=GMT,
L_TYPE0=Payment,
L_CURRENCYCODE0=USD,
L_FEEAMT0=-13.32,
L_NAME0=ls l,
L_NETAMT0=435.68,
L_AMT0=449.00,
L_STATUS0=Completed,
L_EMAIL0=11@qq.com,
L_TIMESTAMP0=2016-07-19T11:33:01Z,
L_TRANSACTIONID0=0KY76585WT3587236,


BUILD=22386173,
TIMESTAMP=2016-07-25T06:14:49Z,
CORRELATIONID=c46f87f276fe7,
ACK=Success,
VERSION=109.0,
}

奋斗注意:ACK返回success就说明API已经调用成功。如果是Failure则调用失败,检查参数传递是否有问题。另如果调用成功但没有返回数据的结果可能搜索条件下本身没有交易数据。可以调整搜索条件,如扩大搜索的时间,交易类型等
测试时遇到问题:post请求握手失败,最后检查是因为jdk1.7的原因,然后把jdk换成1.8就可以了

2GetTransactionDetails

NVP Request:
 https://api-3t.sandbox.paypal.com/nvp?USER=XXXX&PWD=XXXXX&SIGNATURE=XXXXXX&VERSION=109.0&METHOD=GetTransactionDetails&TRANSACTIONID=XXXX
请求可以参考TransactionSearch


注:TransactionSearch 这个API 最多只允许返回100条记录,可以根据自己的需求通过其它一些参数,例如 STARTDATE, ENDDATE, TRANSACTIONCLASS 等一些参数来缩小范围或查询得到不同的结果。


祝大家工作愉快。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木禾杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值