我在我的网站上的会员页面中添加了一个 PayPal 插件,我使用沙盒模式付款,但我没有从 PayPal 收到任何 IPN 响应,但我可以模拟 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 ...
}
}