Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 贝宝没有发送通知_Php_Paypal - Fatal编程技术网

Php 贝宝没有发送通知

Php 贝宝没有发送通知,php,paypal,Php,Paypal,我正在使用PHP REST APIv1(我相信)与paypal集成 我的请求代码如下所示: include '../../classes/db.connect.php'; use PayPal\Api\Amount; use PayPal\Api\Payer; use PayPal\Api\Payment; use PayPal\Api\Item; use PayPal\Api\ItemList; use PayPal\Api\RedirectUrls; use PayPal\Api\Trans

我正在使用PHP REST APIv1(我相信)与paypal集成

我的请求代码如下所示:

include '../../classes/db.connect.php';
use PayPal\Api\Amount;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;

require 'bootstrap.php';
if (empty($_POST['buy_now'])) {
  throw new Exception('This script should not be called directly, expected post data');
}
$setitem = strip_tags($_POST['item']);
$stmt=$db->prepare("SELECT * FROM shopping WHERE id = :id");
$stmt->bindParam(':id', $setitem);
$stmt->execute();
$row = $stmt->fetch();

$payer = new Payer();
$payer->setPaymentMethod('paypal');
  $currency = 'USD';
  $amountPayable = $row['price'];
  $item1 = new Item();
  $item1->setName($row['name'])
    ->setCurrency('USD')
    ->setQuantity('1')
    ->setPrice($amountPayable);

$invoiceNumber = uniqid();
$amount = new Amount();
$amount->setCurrency($currency)
  ->setTotal($amountPayable);

$itemList = new ItemList();
if (isset($item1) && isset($item2)) {
  $itemList->setItems(array($item1, $item2));
} elseif (isset($item1)) {
  $itemList->setItems(array($item1));
} elseif (isset($item2)) {
  $itemList->setItems(array($item2));
}

$transaction = new Transaction();
$transaction->setAmount($amount)
  ->setItemList($itemList)
  ->setDescription('Website '.$row['name'].' Purchase')
  ->setInvoiceNumber($invoiceNumber)
  ->setNotifyUrl("https://REDACTED/notify.php")
  ->setCustom($username);

$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl($paypalConfig['return_url'])
  ->setCancelUrl($paypalConfig['cancel_url']);

$payment = new Payment();
$payment->setIntent('sale')
  ->setPayer($payer)
  ->setTransactions([$transaction])
  ->setRedirectUrls($redirectUrls);

try {
  $payment->create($apiContext);
} catch (Exception $e) {
  throw new Exception('Unable to create link for payment');
}
header('location:' . $payment->getApprovalLink());
支付过程很顺利,但paypal不会调用notify_url。根本没有错误。用户可以付款,付款通过,用户返回到
setReturnUrl
,但
setNotifyUrl
似乎被忽略

我在
$transaction
上进行了var_转储,并且
通知url
被发送到paypal,但paypal没有调用它-因此我没有收到交易通知/数据库中没有更新任何内容

我已经做了我能想到的最基本的测试,以确保paypal没有调用
notify\uURL
。文件中的php仅设置为:

include '../../classes/db.connect.php';
$stmt = $db->prepare("INSERT INTO test (info) VALUES ('1122')");
$stmt->execute();

我意识到REST旨在与Webhook一起工作——但出于各种原因,我不想使用它们。我的理解是,设置notify_url将允许paypal将该url用作IPN。然而,我发现paypal只是忽略了这个变量

另外,我应该提到,我在启用IPN和禁用IPN状态更新的情况下尝试过这一点,在启用IPN和启用状态更新的情况下尝试过,在禁用IPN的情况下尝试过。这三种方式都有相同的结果——没有错误,一切正常,但paypal没有发送或接收通知

我在贝宝上的IPN历史页面完全是空的

我做错什么了吗?误解了什么


我找不到任何可靠的信息

通过您的Paypal帐户设置的Paypal IPN将被发送,而与创建交易所使用的方法无关


您可以使用IPN模拟器来测试接收代码,或者注册一个沙箱帐户来配置IPN设置。

“我的理解是,设置通知url将允许paypal将该url用作IPN。但是我发现paypal只是忽略了这个变量。”您应该联系PayPal的支持部门询问此问题,因为只有他们知道在特定情况下会发生什么。在事务级别配置IPN通常是一种更强大的集成(因为购物车/订单管理器在域更改等情况下具有直接控制权)它将优先于在帐户级别设置或未设置的任何默认IPN处理程序,因此,我认为这个答案不会增加太多内容——除非他无法让首选方法正常工作时,可能会将其作为替代解决方案。我不认为您可以使用rest API afaik设置通知url。
notify\u url
位于
事务
对象@PrestonPHX中。这是版本1(已弃用)不是2…OP说他们使用v1/付款,所以我链接到这个。v2/checkout/orders不允许设置notify_url,因为IPN是一种非常古老而笨拙的技术。我们应该转而将webhook与v2结合使用。