Comment puis-je utiliser HTTP POST dans la page JSP d'envoyer un FORMULAIRE de Paypal et de lire la réponse?

Je suis en utilisant paypal sandbox de tester la Payment Data Transfer (PDT) fonction de Paypal. Veuillez noter, Paypal ne pas avoir un exemple de code, en JSP, pour les HAP. Je suis choqué, car ils semblent avoir des exemples pour tout le reste.

Selon Paypal, je peux spécifier l'URL que je veux utiliser pour le traitement de la PDT de l'information. Je n'ai que ça dans mon bac à sable profil.

Maintenant, je suis coincé sur un certain nombre de choses avec le code JSP. J'ai réussi à obtenir un exemple de code, mais il pourrait ne pas être complète, et pour vous dire la vérité, je ne suis pas familier avec certains de la code.

Le code JSP est ci-dessous. Si vous regardez Paiement Paypal de Transfert de Données page, il explique, sans les exemples de code, le PDT du processus.

Il affirme que le id de transaction sera ajouté à la URL indiquée dans votre Profil. Ok, donc je peux obtenir ce que l'id via request.getParameter("tx"). C'est la partie facile.

1) - Mais comment puis-je POSTER le formulaire (voir ci-dessous) retour à Paypal? La partie que je ne comprends pas. Comment puis-je code?

2) --Alors les états de la page "Dans PayPal de répondre à votre post, la première ligne sera la RÉUSSITE ou à l'ÉCHEC. Un exemple réussi de réponse ressemble à ceci (en-Tête HTTP a été omis):

La RÉUSSITE

prenom=Jane+Doe

nom=Dupont

payment_status=Terminé

payer_email=janedoesmith%40hotmail.com

payment_gross=3.99

mc_currency=USD

custom=Pour+la+achat+de+la+rare+livre+Vert+Oeufs+%26+Jambon

Comment cette information est récupérée à partir de l'intérieur de ma page JSP?

Formulaire Html pour la Poste à 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>

Code 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
}
%>
InformationsquelleAutor katura | 2011-06-15