gpt4 book ai didi

http - 如何在 JSP 页面中使用 HTTP POST 将 FORM 发送到 Paypal 并读取响应?

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:07 24 4
gpt4 key购买 nike

我正在使用 paypal 的沙箱 来测试 Paypal 的支付数据传输 (PDT) 功能。请注意,Paypal 在 JSP 中没有用于 PDT 的代码示例。我很震惊,因为他们似乎有其他一切的示例。

根据 Paypal,我可以指定要用于处理 PDT 信息的 URL。我在我的沙盒配置文件中就是这么做的。

现在我在 JSP 代码中遇到了一些问题。我设法获得了一些示例代码,但它可能并不完整,而且说实话,我对其中的某些代码并不十分熟悉。

JSP 代码如下。如果你看Paypal's Payment Data Transfer页面,它在没有任何代码示例的情况下解释了 PDT 过程。

它声明交易 ID 将附加到您的个人资料中指定的 URL。好的,我可以通过 request.getParameter("tx") 获取该 ID。这是简单的部分。

1) -- 但是如何将表单(如下所示)POST 回 Paypal?那部分我不明白。我该如何编码?

2) --然后页面显示“在 PayPal 对您帖子的回复中,第一行将是 SUCCESS 或 FAIL。成功响应的示例如下所示(HTTP header 已被省略):
成功
first_name=Jane+Doe
last_name=史密斯
payment_status=完成
payer_email=janedoesmith%40hotmail.com
payment_gross=3.99
mc_currency=美元
custom=For+the+purchase+of+the+rare+book+Green+Eggs+%26+Ham

如何从我的 JSP 页面中检索这些信息?


发送到 Paypal 的 Html 表单

<form method=post action="https://www.paypal.com/cgi-bin/webscr"> 
<input type="hidden" name="cmd" value="_notify-synch">
<input type="hidden" name="tx" value="TransactionID">
<input type="hidden" name="at" value="YourIdentityToken">
<input type="submit" value="PDT">
</form>

JSP代码

// Java JSP

<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>

<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.sql.*"%>

<%
// read post from PayPal system and add 'cmd'
Enumeration en = request.getParameterNames();
String str = "cmd=_notify-validate";
while(en.hasMoreElements()){
String paramName = (String)en.nextElement();
String paramValue = request.getParameter(paramName);
str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue);
}

String transId = request.getParameter("tx");

// post back to PayPal system to validate
// NOTE: change http: to https: in the following URL to verify using SSL (for increased security).
// using HTTPS requires either Java 1.4 or greater, or Java Secure Socket Extension (JSSE)
// and configured for older versions.
java.net.URL u = new java.net.URL("https://www.sandbox.paypal.com/cgi-bin/webscr");

java.netHttpURLConnection uc = (java.net.HttpURLConnection)u.openConnection();

uc.setRequestMethod("POST");

uc.setDoOutput(true);
uc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

PrintWriter pw = new PrintWriter(uc.getOutputStream());
pw.println(str);
pw.close();

BufferedReader in = new BufferedReader(
new InputStreamReader(uc.getInputStream()));
String res = in.readLine();
in.close();

// assign posted variables to local variables
String itemName = request.getParameter("item_name");
String itemNumber = request.getParameter("item_number");
String paymentStatus = request.getParameter("payment_status");
String paymentAmount = request.getParameter("mc_gross");
String paymentCurrency = request.getParameter("mc_currency");
String txnId = request.getParameter("txn_id");
String receiverEmail = request.getParameter("receiver_email");
String payerEmail = request.getParameter("payer_email");

DataSource ds = null;
Connection conn = null;
Statement stmt = null;

try {
final Context ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mydb");
conn = ds.getConnection();
stmt = conn.createStatement();

//test_paypal
int success = stmt.executeUpdate("insert into test_paypal values("paymentStatus="+request.getParameter("payment_status")+"paymentAmount="+request.getParameter("mc_gross")+
"txnId"+request.getParameter("txn_id")+")");
}//try
catch(Exception e) {}

finally {
stmt.close();
conn.close();
}



check notification validation
if(res.equals("VERIFIED")) {
// check that paymentStatus=Completed
// check that txnId has not been previously processed
// check that receiverEmail is your Primary PayPal email
// check that paymentAmount/paymentCurrency are correct
// process payment
}
else if(res.equals("INVALID")) {
// log for investigation
}
else {
// error
}
%>

最佳答案

稍微扩展@BalusC 的评论...我同意他的观点 - 您可能需要考虑改用 PayPal API。有两个版本,NVP(Name Value Pair)版本和SOAP版本。

从本质上讲,它确实归结为同一件事 - 您获取在返回 URL 上传递给您的 transactionId,然后使用它向 PayPal 发出服务器端请求以检索有关交易的详细信息。

但是:

  1. 一旦您熟悉了 NVP API,您会发现它提供的数据比这个简单的 PDT POST 丰富得多。
  2. NVP API 对您来说更直观。您还可以找到所有语言的代码示例和 SDK。
  3. 如果您经常使用 PayPal,您会发现自己无论如何都要与 NVP API 打交道。不妨现在就做。

关于http - 如何在 JSP 页面中使用 HTTP POST 将 FORM 发送到 Paypal 并读取响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com