任何帮助将不胜感激,请指教。
我的困境是,如果我要使用所提到的paypal按钮,我什么时候才能将表单信息“保存”到我的本地数据库?换句话说,我只需要在付款确认后保存“用户”信息等,之前就没用了。
我的理解是,只有成功的交易才会触发“返回”URL。如果是这种情况,那么必须有一种方法来识别来自paypal的这个传入响应,以便它与“this”用户的表单帖子相关联。换句话说就是“这个”会议。以这种方式,然后可以保存用户数据。我知道有一种叫做IPN的东西?这可能最初是以相同的形式加入,所以我们得到确认吗?我只想弄清楚如何在同一个会话中,以便我可以持久保存用户信息。如果用户的信用卡被拒绝,它是否仍会返回RETURN URL而不管?需要以某种方式区分。
最后,我正在使用HTTPPOST代码,基本上我想在这里模拟一个浏览器。
public void testPost15() throws ClientProtocolException, IOException {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://www.paypal.com/cgi-bin/webscr");
post.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3");
//conn.setRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0");
//httpPost.setHeader( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
//post.setHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
//httpPost.setHeader( "Accept-Language", "en-us,en;q=0.5");
//post.setHeader("Accept-Language","en-gb,en;q=0.5");
List<NameValuePair> params = new ArrayList<NameValuePair>();
//params.add(new BasicNameValuePair("cmd", "_s-xclick"));
params.add(new BasicNameValuePair("cmd", "_xclick"));
//params.add(new BasicNameValuePair("cmd", "_ext-enter"));
//params.add(new BasicNameValuePair("redirect_cmd", "_xclick-subscriptions"));
params.add(new BasicNameValuePair("business", "abc@logixplayer.com"));
params.add(new BasicNameValuePair("currency_code", "USD"));
params.add(new BasicNameValuePair("amount", "4"));
params.add(new BasicNameValuePair("item_name", "PiT words"));
params.add(new BasicNameValuePair("no_note", "1"));
params.add(new BasicNameValuePair("return", "http://localhost:8080/pit-web-0.0.1-SNAPSHOT/welcome"));
post.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = client.execute(post);
InputStream is = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null){
str.append(line + "\n");
}
is.close();
String responseText = str.toString();
System.out.println("response: "+responseText);
}
我认为我正在做点什么,它说:你已经要求过时的PayPal版本了。此错误通常是由于使用书签造成的。
在我看来,有可能通过java发布到paypal ...它只是我认为我可能会遗漏一些东西。此错误是常见错误。
请指教。谢谢。
答案 0 :(得分:1)
你不能使用URLConnection,也不能使用apache HttpPost,因为它们会启动你的web服务器和paypal之间的连接,而不是客户端浏览器和paypal之间的连接。
由于paypal需要POST而不是GET,因此您也不能使用重定向,因此唯一的选择是将HTML页面返回给客户端,其中包含所有paypal参数的表单为隐藏&lt; input&gt; s,以及一些javascript立即提交表格。