(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 等一些参数来缩小范围或查询得到不同的结果。


祝大家工作愉快。



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部