Paypal не отправляет уведомления - PullRequest
0 голосов
/ 27 января 2020

Я использую 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 информацию об этом.

1 Ответ

0 голосов
/ 27 января 2020

Настройки IPN Paypal через вашу учетную запись Paypal отправляются независимо от метода, используемого для создания транзакций.

https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNSetup/

Вы можете использовать симулятор IPN для проверьте полученный код или зарегистрируйте учетную запись в песочнице для настройки IPN там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...