(Laravel) Невозможно получить ответ от PayPal IPN, но смоделированные ответы подтверждены

Я добавил плагин PayPal на страницу членства на моем веб-сайте, я плачу в режиме песочницы, но не получаю никаких ответов IPN от PayPal, но могу смоделировать ответ IPN, и он возвращает подтвержденное рукопожатие

Я зашел в «Моя учетная запись»> «Настройки продажи»> «IPN» и обновил там URL, а также в используемом плагине я изменил notify_url немного в IPN URL, а также

Плагин: https://github.com/srmklive/laravel-paypal

В моем обработчике IPN ниже я вставляю ответную запись в таблицу базы данных, чтобы узнать, получаю ли я что-нибудь от PayPal

Конфигурация плагина

return [
'mode'    => env('PAYPAL_MODE', 'sandbox'), // Can only be 'sandbox' Or 'live'. If empty or invalid, 'live' will be used.
'sandbox' => [
'username'    => env('PAYPAL_SANDBOX_API_USERNAME', ''),
'password'    => env('PAYPAL_SANDBOX_API_PASSWORD', ''),
'secret'      => env('PAYPAL_SANDBOX_API_SECRET', ''),
'certificate' => env('PAYPAL_SANDBOX_API_CERTIFICATE', ''),
'app_id'      => 'APP-80W284485P519543T', // Used for testing Adaptive Payments API in sandbox mode
],
'live' => [
'username'    => env('PAYPAL_LIVE_API_USERNAME', ''),
'password'    => env('PAYPAL_LIVE_API_PASSWORD', ''),
'secret'      => env('PAYPAL_LIVE_API_SECRET', ''),
'certificate' => env('PAYPAL_LIVE_API_CERTIFICATE', ''),
'app_id'      => '', // Used for Adaptive Payments API
],

'payment_action' => 'Sale', // Can only be 'Sale', 'Authorization' or 'Order'
'currency'       => 'GBP',
'notify_url'     => 'https://www.mywebsite.com/paypal/ipn', // Change this accordingly for your application.
'locale'         => '', // force gateway language  i.e. it_IT, es_ES, en_US ... (for express checkout only)
'validate_ssl'   => false, // Validate SSL when creating api client.
];

Обработчик IPN

public function ipn(Request $request)
{
$data = [
'post' => json_encode($request->all()),
'created_at' => date('Y-m-d H:i'),
];
// Import the namespace Srmklive\PayPal\Services\ExpressCheckout first in your controller.
$provider = new ExpressCheckout;

$request->merge(['cmd' => '_notify-validate']);
$post = $request->all();

$response = (string) $provider->verifyIPN($post);
$data['response'] = $response;

DB::table('ipn_responses')->insert($data);

if ($response === 'VERIFIED') {
// Your code goes here ...
}
}

0

Решение

Оказывается, я использовал плагин неправильно. Мне нужно было «сделать» платеж на success_url

Так, например, когда PayPal возвращает меня на сайт, платеж еще не прошел. Это следующий код, который обрабатывает платежи, а затем проверяет. Я всегда думал, что это было отправлено через IPN

/**
* Payement success
* @param Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function success(Request $request)
{
$token = $request->get('token');
$PayerID = $request->get('PayerID');
$cart = $this->getCartDataFromToken($token);

// Verify Express Checkout Token
$response = $this->provider->getExpressCheckoutDetails($token);

// Check express checkout was a success
if (in_array(strtoupper($response['ACK']), ['SUCCESS', 'SUCCESSWITHWARNING'])) {

// Perform transaction on PayPal
$response = $this->provider->doExpressCheckoutPayment($cart, $token, $PayerID);
$order = $this->finalizeOrder($cart, $response);

if($order->paid) {

$order->user->startMembership($order->membership);

FormResponse::set('Your order has been successfully completed and your membership has begun. You may check your My Account page to view your membership status.');
}
else {
FormResponse::set('Your payment could not be completed (Error 2)');
}
}
else {
FormResponse::set('Your payment could not be completed (Error 1)');
}

return redirect()->route('memberships');
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector