PayPal 并行支付 IPN

     2023-02-22     295

关键词:

【中文标题】PayPal 并行支付 IPN【英文标题】:PayPal Parallel Payment IPN 【发布时间】:2012-01-17 09:05:20 【问题描述】:

我已经卡了好几天了!我正在尝试通过并行付款从 PayPal IPN 获取详细信息。

我需要汇款到的两个电子邮件地址和金额,还有状态。

我在看这里:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_APIPN

这些是我的代码中我尝试获取电子邮件和金额的行:

$Email1 = $_POST['transaction[0].receiver'];
$Email2 = $_POST['transaction[1].receiver'];

及金额部分:

$Amount1 = $_POST['transaction[0].amount'];
$Amount2 =  $_POST['transaction[1].amount'];

我正在使用此页面的 IPN 代码。

https://cms.paypal.com/cms_content/AU/en_AU/files/developer/IPN_PHP_41.txt

有什么帮助吗? POST 变量出现空白?


更新:我发现了这个:

<source lang="php">
<?php
error_reporting(E_ALL ^ E_NOTICE); 
// By Gleb Esman, gleb@memberwing.com, http://www.memberwing.com/
//
// Pull raw POST data.
// We need to pull raw data and build our own copy of $_POST in order to
// workaround of invalid POST keys that Adaptive IPN request uses.

$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$_YOUR_POST = array();
foreach ($raw_post_array as $keyval) 
  $keyval = explode('=', $keyval);
  if (count($keyval) == 2)
    $_YOUR_POST[$keyval[0]] = urldecode($keyval[1]);

if (count($_YOUR_POST) < 3) 
  $_YOUR_POST = $_POST;
  $original_post_used = TRUE;

else
  $original_post_used = FALSE;

// Build final $_req postback request
// Paypal's IPN Sample
// read the post from PayPal system and add 'cmd'

if ($original_post_used) 
  $_req = 'cmd=_notify-validate';
  foreach ($_YOUR_POST as $key => $value) 
    $value = urlencode(stripslashes($value));
    $_req .= "&$key=$value";
  

else
  $_req = $raw_post_data . '&cmd=_notify-validate';
// $_req is ready for postback to Paypal here...
$req = $_req;

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////



// PHP 4.1
// read the post from PayPal system and add 'cmd'
//$req = 'cmd=_notify-validate';
//
//foreach ($_POST as $key => $value) 
//  $value = urlencode(stripslashes($value));
//  $req .= "&$key=$value";
//

// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30);

// throw all this junk into the local error log so we can see what happened!
function log_arr($item, $key) 
  $p .= "$key = $item";
  error_log(urldecode($p));

array_walk_recursive($_YOUR_POST, 'log_arr');
error_log(urldecode($req));

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];

if (!$fp) 
// HTTP ERROR
 else 
  fputs($fp, $header . $req);
  while (!feof($fp)) 
    $res = fgets($fp, 1024);
    if (strcmp($res, "VERIFIED") == 0) 
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
     else if (strcmp($res, "INVALID") == 0) 
// log for manual investigation
    
  
  fclose($fp);

?>
</source>

在日志文件中产生这个:

[10-Dec-2011 07:13:50] transaction[0].id_for_sender_txn = xxxxx
[10-Dec-2011 07:13:50] log_default_shipping_address_in_transaction = xxx
[10-Dec-2011 07:13:50] transaction[0].receiver = xxxxx
[10-Dec-2011 07:13:50] action_type = xxxx

[10-Dec-2011 07:13:50] transaction[1].paymentType = xxx
[10-Dec-2011 07:13:50] transaction[0].amount = xxxx
[10-Dec-2011 07:13:50] charset = xxx

谁能告诉我如何将这些转换为变量,因为这是打印在日志文件中的内容?

【问题讨论】:

【参考方案1】:

试试$_POST['transaction']['0']['receiver'] 等等。此外,启用E_ALL 错误消息,以便您看到有关此类事情的通知。如果启用了该功能,并且您检查了错误日志,您将看到未定义的索引通知。此外,如果您不顾一切地调试 $_POST/$_GET/whatever 的东西并且不是您控制请求,您可以随时将内容写入文件并检查它。

【讨论】:

是的,之前尝试过,但没有成功。在日志中得到了这个:[10-Dec-2011 06:18:47] PHP 警告:urlencode() 期望参数 1 是字符串,数组在第 22 行给出 xxxxxxxx 您在前几行将 $_YOUR_POST 构建为一个数组,然后尝试将其用作字符串。我认为 http_build_query 可能有用。

Paypal 链式支付 - 支付密钥和 IPN

】Paypal链式支付-支付密钥和IPN【英文标题】:PaypalChainedPayment-PayKey&IPN【发布时间】:2015-04-1815:06:37【问题描述】:我最近从基本的Paypal付款转换为链式付款...如果你们愿意提供帮助,我有几个问题。首先,当我设置PayRequest... 查看详情

如何使用 sandbox.paypal 获取 IPN 进行支付

】如何使用sandbox.paypal获取IPN进行支付【英文标题】:HowtogetIPNforpayoutusingsandbox.paypal【发布时间】:2015-11-1010:06:12【问题描述】:我正在通过Paypal进行付款,但我无法获得IPN,我对此进行了研究,没有IPN设置选项个人资料>我的... 查看详情

Paypal 自适应支付和 IPN

】Paypal自适应支付和IPN【英文标题】:PaypaladaptivepaymentsandIPN【发布时间】:2014-06-2313:28:36【问题描述】:我正在使用AngellEyelibrary使用Paypal自适应付款。除了IPN,一切都很好。在沙盒模式下使用Paypal时,我会收到一条通知到我的U... 查看详情

如何通过 IPN 使用 Paypal 自适应支付?

】如何通过IPN使用Paypal自适应支付?【英文标题】:HowtousePaypaladaptivepaymentswithIPN?【发布时间】:2012-05-0513:31:52【问题描述】:我正在使用Paypal的自适应支付系统。使用沙盒帐户,我能够发出PayRequest并被转发到Paypal进行付款。然... 查看详情

Paypal 自适应支付 IPN 费用信息

】Paypal自适应支付IPN费用信息【英文标题】:PaypalAdaptivePaymentIPNfeesinformation【发布时间】:2012-06-1000:54:19【问题描述】:所以,我不知道我是疯了还是怎么了,但对于我的一生,我无法弄清楚如何获得支付Paypal的费用金额。对于... 查看详情

Paypal 支付按钮和 IPN:如何唯一地链接用户?

】Paypal支付按钮和IPN:如何唯一地链接用户?【英文标题】:PaypalpaymentbuttonsandIPN:howtolinkusersupuniquely?【发布时间】:2011-05-1603:47:18【问题描述】:奇怪的是,Paypal网站上的文档并没有很好地涵盖这一点。我们有一个付款按钮,... 查看详情

Paypal 自适应支付链式支付 IPN php

】Paypal自适应支付链式支付IPNphp【英文标题】:PaypalAdaptivePaymentsChainedPaymentIPNphp【发布时间】:2013-03-2008:23:38【问题描述】:我正在尝试将我的标准IPNpaypal付款调整为连锁付款,以将收到的付款分成多个接收方。是否可以通过向... 查看详情

Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息

】Paypal自适应支付IPN回调:如何返回完整未更改的ipn消息【英文标题】:PaypaladaptivepaymentsIPNcallback:howtoreturnthecompleteunalteredipnmessage【发布时间】:2013-04-2314:17:09【问题描述】:我在市场(买家和卖家)工作,中间人从每次购买中... 查看详情

PayPal IPN 模拟器工作正常,但 IPN 不响应沙盒支付

】PayPalIPN模拟器工作正常,但IPN不响应沙盒支付【英文标题】:PayPalIPNsimulatorworksfinebutIPNnotrespondingtosandboxpayments【发布时间】:2018-08-1421:18:59【问题描述】:如果我从这里https://developer.paypal.com/developer/ipnSimulator/发送IPN,它可以... 查看详情

paypal自适应支付IPN中的自定义字段

】paypal自适应支付IPN中的自定义字段【英文标题】:customfieldintheIPNofpaypaladaptivepayment【发布时间】:2011-08-2702:01:22【问题描述】:我已在我的网站中实施自适应支付。首先它是标准支付,所以我在表单中传递了一个custom参数,我... 查看详情

Paypal 自适应支付 API 自定义变量 IPN 返回

】Paypal自适应支付API自定义变量IPN返回【英文标题】:PaypalAdaptivePaymentAPICustomVariableIPNReturn【发布时间】:2012-01-2222:52:28【问题描述】:我正在尝试使用IPN执行自适应支付API,并且发现在沙盒环境中我无法返回付款人的地址或自... 查看详情

Paypal 自适应支付 - IPN 和成功的返回响应

】Paypal自适应支付-IPN和成功的返回响应【英文标题】:PaypalAdapativePayment-IPNandSuccessfulreturnresponse【发布时间】:2015-10-1817:46:24【问题描述】:我正在开发一个需要使用Paypal自适应付款的应用程序。我正在使用.netmvc框架和c#进行开... 查看详情

PayPal 网站支付标准的 IPN 模拟器中应测试哪些交易类型?

】PayPal网站支付标准的IPN模拟器中应测试哪些交易类型?【英文标题】:WhattransactiontypesshouldbetestedinIPNsimulatorforPayPalWebsitePaymentsStandard?【发布时间】:2015-06-2615:35:25【问题描述】:在我的网站上,我想使用PayPal发送的IPN处理订单... 查看详情

PayPal REST API 支付 id = IPN txn id

】PayPalRESTAPI支付id=IPNtxnid【英文标题】:PayPalRESTAPIpaymentid=IPNtxnid【发布时间】:2014-08-0510:32:46【问题描述】:让我们假设PayPalRESTAPI用于完成标准的PayPal支付流程。执行付款时,它返回为“待处理”,因此付款尚未完成。RESTAPi提... 查看详情

多次收到 Paypal IPN 响应

】多次收到PaypalIPN响应【英文标题】:ReceivingPaypalIPNresponsemultipletimes【发布时间】:2013-06-0107:16:35【问题描述】:我在我的支付应用程序中使用贝宝支付网关IPN。付款成功后,我会正确收到IPN响应。收到后我发回验证。$ch=curl_ini... 查看详情

从 cURL 支付向 paypal IPN 添加自定义变量

】从cURL支付向paypalIPN添加自定义变量【英文标题】:AddingcustomvariablestopaypalIPNfromacURLpayment【发布时间】:2014-02-2122:51:46【问题描述】:我的问题:设置将在IPN上返回的贝宝变量。所以背景:我正在使用CodeIgniter,并且正在使用我... 查看详情

paypal沙箱支付成功,但是我的脚本没有收到ipn post call

】paypal沙箱支付成功,但是我的脚本没有收到ipnpostcall【英文标题】:paypalsandboxcompletedthepaymentsuccessfully,butmyscriptdidn\'treceivetheipnpostcall【发布时间】:2012-08-2101:37:16【问题描述】:我正在使用paypal沙箱进行开发,所有支付流程都... 查看详情

捕获重复的 PayPal IPN 付款

】捕获重复的PayPalIPN付款【英文标题】:CatchingduplicatePayPalIPNpayments【发布时间】:2012-10-1206:38:50【问题描述】:我有一个通过PayPal的IPN服务设置的定期支付解决方案,基本上用户填写表格,支付款项,然后通过IPN我的系统收到... 查看详情