Paypal IPN请求间隔
时间: 2023-11-21 09:04:46 浏览: 180
Paypal IPN请求间隔是指Paypal向商家发送IPN请求的时间间隔,通常情况下,Paypal会尽可能快地向商家发送IPN请求,以确保商家能够及时得到支付通知。一般来说,Paypal会在支付完成后立即向商家发送IPN请求,如果商家的服务器无法响应请求,Paypal会在一定时间内多次尝试发送IPN请求,直到商家服务器响应为止。
根据Paypal的文档,IPN请求间隔是没有明确规定的,取决于网络延迟、服务器负载等多种因素。因此,商家需要确保自己的服务器能够及时响应IPN请求,以便及时确认支付成功。另外,商家还需要注意IPN请求的安全性,确保请求来自Paypal,而不是伪造的请求。为此,商家可以使用Paypal提供的IPN验证工具来验证请求的合法性。
相关问题
java Paypal IPN 开发
Java Paypal IPN开发可以参照以下步骤进行:
1. 在Paypal账户中设置IPN(Instant Payment Notification),并将IPN URL设置为您的服务器上的Java Servlet。
2. 在Java代码中实现一个Servlet来接收Paypal发送的IPN信息,并解析该信息。
3. 验证Paypal发送的IPN信息的有效性。可以使用Paypal提供的IPN验证工具或者手动验证。
4. 对接收到的IPN信息进行处理,例如更新订单状态或发送电子邮件通知等。
以下是Java Paypal IPN开发的示例代码:
```java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class IPNServlet extends HttpServlet {
private static final String PAYPAL_URL = "https://www.paypal.com/cgi-bin/webscr";
private static final String PAYPAL_SANDBOX_URL = "https://www.sandbox.paypal.com/cgi-bin/webscr";
private static final String VERIFY_CMD = "_notify-validate";
private static final String CHARSET = "UTF-8";
private static final String TXN_TYPE = "txn_type";
private static final String ITEM_NUMBER = "item_number";
private static final String PAYMENT_STATUS = "payment_status";
private static final String MC_GROSS = "mc_gross";
private static final String MC_CURRENCY = "mc_currency";
private static final String RECEIVER_EMAIL = "receiver_email";
private static final String BUSINESS = "business";
private static final String CUSTOM = "custom";
private static final String PAYPAL_EMAIL = "YOUR_PAYPAL_EMAIL";
private static final String PAYPAL_IDENTITY_TOKEN = "YOUR_PAYPAL_IDENTITY_TOKEN";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String url = PAYPAL_URL;
if (Boolean.parseBoolean(req.getParameter("test_ipn"))) {
url = PAYPAL_SANDBOX_URL;
}
Map<String, String> params = new HashMap<String, String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(req.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
params.putAll(parseQueryString(line));
}
reader.close();
String txnType = params.get(TXN_TYPE);
if (txnType == null) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
String itemNumber = params.get(ITEM_NUMBER);
String paymentStatus = params.get(PAYMENT_STATUS);
String mcGross = params.get(MC_GROSS);
String mcCurrency = params.get(MC_CURRENCY);
String receiverEmail = params.get(RECEIVER_EMAIL);
String business = params.get(BUSINESS);
String custom = params.get(CUSTOM);
if (!PAYPAL_EMAIL.equals(receiverEmail) || !PAYPAL_IDENTITY_TOKEN.equals(custom)) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
String verifyUrl = url + "?" + VERIFY_CMD;
for (String name : params.keySet()) {
verifyUrl += "&" + name + "=" + URLEncoder.encode(params.get(name), CHARSET);
}
if (!verify(verifyUrl)) {
resp.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
// Handle IPN message
}
private boolean verify(String url) throws IOException {
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("User-Agent", "Java IPN Verification");
conn.setRequestProperty("Host", "www.paypal.com");
conn.setRequestProperty("Connection", "close");
conn.getOutputStream().write(("cmd=" + VERIFY_CMD).getBytes());
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
if ("VERIFIED".equals(line)) {
return true;
} else if ("INVALID".equals(line)) {
return false;
}
}
reader.close();
return false;
}
private Map<String, String> parseQueryString(String queryString) throws UnsupportedEncodingException {
Map<String, String> params = new HashMap<String, String>();
for (String param : queryString.split("&")) {
String pair[] = param.split("=");
String name = URLDecoder.decode(pair[0], CHARSET);
String value = "";
if (pair.length > 1) {
value = URLDecoder.decode(pair[1], CHARSET);
}
params.put(name, value);
}
return params;
}
private String md5(String string) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(string.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b & 0xff));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
```
以上代码中,IPNServlet类是一个Java Servlet,用于接收Paypal发送的IPN信息,验证IPN信息的有效性并进行处理。在该类中,PAYPAL_EMAIL和PAYPAL_IDENTITY_TOKEN分别为您Paypal账户的电子邮件地址和身份令牌,用于验证IPN信息是否来自Paypal。在实际的应用中,您需要替换这些值为您自己的Paypal账户信息。
在handle IPN message方法中,您可以根据接收到的IPN信息进行相应的处理,例如更新订单状态或发送电子邮件通知等。
php paypal ipn在哪
PHP PayPal IPN(即即时支付通知)是一种用于实现支付回调功能的工具。它用于接收和处理来自PayPal的即时支付通知,以确保交易的有效性和一致性。
具体而言,PHP PayPal IPN通常位于您的服务器端。当用户通过PayPal进行支付并成功完成交易后,PayPal会将相关交易信息发送到您预先设定的回调URL。
您可以通过在服务器端的PHP代码中创建一个接收IPN请求的脚本来处理这些通知。该脚本将获取来自PayPal的POST请求,并验证其身份和有效性,然后处理并记录相关交易信息,如订单ID、付款金额等。通常,您还可以根据交易结果发送自定义的确认邮件或实现其他业务逻辑。
此外,为了让PayPal能够将IPN通知正确地发送到您的回调URL,您需要在PayPal网站的设置中提供您的IPN URL。您可以在您的PayPal商家账户(或PayPal开发者账户)的相关设置中找到此选项。
总而言之,PHP PayPal IPN通常通过在服务器端创建一个处理IPN请求的脚本来实现。您需要确保正确配置您的IPN URL,并在脚本中验证和处理来自PayPal的通知,以实现有效且安全地处理即时支付通知的功能。
阅读全文