Я использую 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
, кажется, игнорируется.
Я сделал var_dump для $transaction
, а notify_url
- это отправлен в PayPal, но он не вызывается PayPal - поэтому я не получаю уведомлений о транзакциях / ничего не обновляется в базе данных.
Я прошел самый базовый c тест, который я могу себе представить, чтобы PayPal не звонил notify_url
. php в файле просто установлено на:
include '../../classes/db.connect.php';
$stmt = $db->prepare("INSERT INTO test (info) VALUES ('1122')");
$stmt->execute();
Я понимаю, что REST предназначен для работы с веб-крючками, но я не хочу использовать их по нескольким различным причинам. Насколько я понимаю, установка notify_url позволит PayPal использовать этот URL в качестве IPN. Однако я считаю, PayPal просто игнорирует эту переменную.
Также я должен упомянуть, что я пробовал это с включенным IPN и отключенными обновлениями статуса IPN, я пробовал с включенным IPN и включенными обновлениями статуса, и я пробовал это с отключенным IPN. Все три способа имеют один и тот же результат - никаких ошибок, все работает, но никаких уведомлений, отправленных или полученных PayPal.
Моя страница истории IPN на PayPal полностью пуста.
Я что-то не так делаю? Что-то недопонимание?
Я не могу найти solid информацию об этом.