Paypal IPN(即时付款通知)是PayPal的推送通知服务,在创建交易或状态发生变化时发送通知
在我的网站上,有一个使用 Paypal 的付款选项。最近我们收到了一些用户的投诉,因为使用了商户类别代码而无法进行交易......
使用Paypal控制台。付款后登录数据向收款人发送电子邮件确认
我在 Paypal 交易后收到数据。该数据被写入console.log。我想做的是向客户发送一封确认电子邮件,但是我不知道如何使用这些数据......
我正在沙盒中测试 IPN。在我的网站上,我记录了 Paypal 和我的网站之间的通信 开始验证:_notify-validate,16.94,Eligible,confirmed,SVWAAUVZX2S4Y,0.00,1 Main St,13:57:50 ...
我正在使用 IPN 模拟器将数据发布到我的 IPN 处理程序。除了这个之外,其他一切都很好。 $num_cart_items = $_POST['num_cart_items']; $tuottet = array(); for($i = 1; $i &l...
IPN php 代码无法验证,PayPal 错误代码为 301 或 302
我的 ipn 代码无法通过 PayPal 验证,并在我的 ipn_log 中产生此错误 [02/16/2024 10:04 AM] - 失败:IPN 验证失败。 来自 Paypal 的 IPN POST 变量: mc_gross=1.00,protection_eligibility=
我已将 PayPal 的即时付款通知系统/套件与我的网站集成。多年来一直运作良好。 我想添加另一种方法,因为 PayPal 一直关心我他们的行业-
PayPal:直接要求付款 - 获取确认示例和文档 (PHP)
我的网站上有产品列表。 它在我的网站上的实现方式并不重要,假设它是一个带有复选标记的表格。用户选择要订购的产品: 产品_1 4.99 美元 产品...
购买经过验证的 PayPal 帐户涉及法律影响和某些风险。选择值得信赖的来源或信誉良好的供应商至关重要,以避免潜在的欺诈或帐户相关问题。 电子...
我正在尝试弄清楚在申请订阅我创建的网络服务时如何传递自定义变量; 到目前为止,我的前端代码如下所示: const createSubscription = (数据,
我尝试使用原始数据向 PHP 脚本发送 post 请求。但使用给定的选项,如 内容类型:(文本、javascript、json、html、xml) 原始数据 事实证明这是不可能的。因为
我尝试使用原始数据向 PHP 脚本发送 post 请求。但使用给定的选项,如 内容类型:(文本、javascript、json、html、xml) 原始数据 事实证明这是不可能的。因为
PayPal IPN 未到达。重试但没有 HTTP 响应代码
我面临着一个从今天开始的奇怪问题。 PayPal IPN 无法访问我的网站。最后 4 个 IPN 在 IPN 历史记录中显示“正在重试”,但它们没有任何 HTTP 响应代码。我检查了我的...
我已经为此苦苦挣扎了几天。 我想读取通过 IPN 系统传递的自定义变量。 大多数人说 $custom = $_POST['custom'];就是你如何做。 豪...
我无法让 paypal 通过 webhooks 模拟器验证 webhook 请求。我的VerifyTask 和示例之间的唯一区别是我从webclient 转换为HttpClient。 ...
我正在与 Paypal 上的 Expresscheckout 合作,针对单次用户付款集成。 工作流程首先创建令牌,用户重定向到 paypal 页面,并成功到我的返回 URL 页面。 1.
我有一个用户填写表格的网站,当他们提交时,我的网站将信息插入 mySql 数据库,然后用户使用 PayPal 按钮进行付款。售后完成后...
我有一个 PayPal 捐赠 IPN 的监听器。然而,它没有被调用,PayPal 沙箱中也没有日志。代码是: donations.php: 我有一个 PayPal 捐赠 IPN 的监听器。然而,它没有被调用,PayPal 沙箱中也没有日志。代码是: donations.php: <?php // For test payments we want to enable the sandbox mode. If you want to put live // payments through then this setting needs changing to `false`. $enableSandbox = true; // Database settings. Change these for your database configuration. $dbConfig = [ 'host' => 'localhost', 'username' => 'xxxx', 'password' => 'xxxx', 'name' => 'xxxx' ]; // PayPal settings. Change these to your account details and the relevant URLs // for your site. $paypalConfig = [ 'email' => $enableSandbox ? '[email protected]' : '[email protected]', 'return_url' => 'https://example.com/index.php?page=/donation-successful.php', 'cancel_url' => 'https://example.com/index.php?page=/donation-cancelled.php', 'notify_url' => 'https://example.com/donations.php', ]; $paypalUrl = $enableSandbox ? 'https://ipnpb.sandbox.paypal.com/cgi-bin/webscr' : 'https://ipnpb.paypal.com/cgi-bin/webscr'; function verifyTransaction($data) { global $paypalUrl; $req = 'cmd=_notify-validate'; foreach ($data as $key => $value) { $value = urlencode(stripslashes($value)); //$value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i', '${1}%0D%0A${3}', $value); // IPN fix $req .= "&$key=$value"; } $ch = curl_init($paypalUrl); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_SSLVERSION, 6); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close')); $res = curl_exec($ch); if (!$res) { $errno = curl_errno($ch); $errstr = curl_error($ch); curl_close($ch); throw new Exception("cURL error: [$errno] $errstr"); } $info = curl_getinfo($ch); // Check the http response $httpCode = $info['http_code']; if ($httpCode != 200) { throw new Exception("PayPal responded with http code $httpCode"); } curl_close($ch); return $res == 'VERIFIED'; } function checkTxnid($txnid) { $db = new mysqli($dbConfig['host'], $dbConfig['username'], $dbConfig['password'], $dbConfig['name']); $txnid = $db->real_escape_string($txnid); $results = $db->query('SELECT * FROM `donations` WHERE txnid = \'' . $txnid . '\''); return ! $results->num_rows; } function addPayment($data) { $db = new mysqli($dbConfig['host'], $dbConfig['username'], $dbConfig['password'], $dbConfig['name']); if (is_array($data)) { if ($db->query("INSERT INTO 'donations' (txnid, payment_amount, payment_status, createdtime) VALUES('" . $data["txn_id"] . "', '" . $data["payment_amount"] . "', '" . $data["payment_status"] . "', '" . date("Y-m-d H:i:s") . "')")) { return true; } } return false; } // Check if paypal request or response // STEP 1: read POST data // Reading POSTed data directly from $_POST causes serialization issues with array data in the POST. // Instead, read raw POST data from the input stream. $raw_post_data = file_get_contents('php://input'); $raw_post_array = explode('&', $raw_post_data); $data = array(); foreach ($raw_post_array as $keyval) { $keyval = explode ('=', $keyval); if (count($keyval) == 2) { $data[$keyval[0]] = urldecode($keyval[1]); } } if (!isset($data["txn_id"]) && !isset($data["txn_type"])) { // Set the PayPal account. $data['business'] = $paypalConfig['email']; // Set the PayPal return addresses. $data['return'] = stripslashes($paypalConfig['return_url']); $data['cancel_return'] = stripslashes($paypalConfig['cancel_url']); $data['notify_url'] = stripslashes($paypalConfig['notify_url']); // Set the currency so that these aren't overridden by the form data. $data['currency_code'] = 'GBP'; // Build the query string from the data. $queryString = http_build_query($data); // Redirect to paypal IPN header('location:' . $paypalUrl . '?' . $queryString); exit(); } else { // Handle the PayPal response. // Create a connection to the database. $db = new mysqli($dbConfig['host'], $dbConfig['username'], $dbConfig['password'], $dbConfig['name']); // We need to verify the transaction comes from PayPal and check we've not // already processed the transaction before adding the payment to our // database. if (verifyTransaction($data) && checkTxnid($data['txn_id'])) { // Assign posted variables to local data array. $data = [ 'item_name' => $data['item_name'], 'item_number' => $data['item_number'], 'payment_status' => $data['payment_status'], 'payment_amount' => $data['mc_gross'], 'payment_currency' => $data['mc_currency'], 'txn_id' => $data['txn_id'], 'receiver_email' => $data['receiver_email'], 'payer_email' => $data['payer_email'], ]; if (addPayment($data) !== false) { // Payment successfully added. } } } ?> 替换了一些地方的敏感信息,但你明白了。 PayPal 日志中没有任何内容。我的捐赠数据库中没有添加任何内容。付款在交易列表中显示为已完成。
为什么要将运费添加到我的 IPN 响应中?这已经工作了很多年,但突然间我们的一些 IPN 请求包含运输参数,例如下面的 17.01 我们从来没有...
我们在我们的网络应用程序中附加了一个 PayPal $4 按钮。现在我们计划根据位置添加额外费用。那么将额外费用添加到 PayPal 的最佳可能性是什么......
我明白IPN是如何工作的,以及发送信息、验证等的基本想法。但是,对我来说,我无法让它工作!!!这就是我试图让它工作的原因。这是我想做的...... 用户选择一个...