Я использую sandbox
PayPal, чтобы протестировать функцию Payment Data Transfer (PDT)
от PayPal.Обратите внимание: У Paypal нет примера кода в JSP для PDT. Я в шоке, поскольку у них, похоже, есть примеры для всего остального.
Согласно Paypal, яМожно указать URL, который я хочу использовать для обработки информации PDT.Я сделал это в своем профиле песочницы.
Теперь я застрял в нескольких моментах с кодом JSP.Мне удалось получить пример кода, но он может быть неполным, и, честно говоря, я не совсем знаком с некоторым кодом в нем.
Код JSP приведен ниже.Если вы посмотрите на страницу PayPal «Передача платежных данных» , она объясняет без примеров кода процесс PDT.
В нем говорится, что идентификатор транзакции будет добавлен кURL
указанный в вашем профиле.Хорошо, я могу получить этот идентификатор через request.getParameter("tx")
.Это простая часть.
1) - Но как мне отправить форму (как показано ниже) обратно в Paypal?Эту часть я не понимаю.Как мне это кодировать?
2) - Затем на странице указывается "В ответе PayPal на ваше сообщение первой строкой будет УСПЕХ или НЕУДАЧА. Пример успешного ответавыглядит так (заголовок HTTP был опущен):УСПЕХfirst_name = Jane Doe +last_name = Smithpayment_status = Завершенныйpayer_email = janedoesmith% 40hotmail.compayment_gross = 3,99mc_currency = USDзаказ = Для + плюсовой покупки + в + с + редкую + книга + зеленый + яйца +% 26 + Ham
Как эта информация извлекается из моей страницы JSP?
HTML-форма для отправки в Paypal
<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
}
%>