matiullah31/safepay-laravel

Safepay 支付网关与 Laravel 集成

v1.0 2022-08-06 08:16 UTC

This package is auto-updated.

Last update: 2024-09-06 13:24:16 UTC


README

Safepay Laravel 支付网关集成

composer require matiullah31/safepay-laravel

在 app.php 中添加提供者

Priceoye\Safepay\SafepayProvider

添加别名

'SafePay' => Priceoye\Safepay\SafepayFacade::class

发布配置文件

php artisan vendor:publish 将文件(safepay.php)放置在 config 文件夹中。


return [
    "environment"  => env("SAFEPAY_ENV",'sandbox'), //use 'production' for live payments
    "api_key" => env("SAFEPAY_API_KEY",''),
    'redirect_url' => env("SAFEPAY_SUCCESS_URL",''),
    'cancel_url' => env("SAFEPAY_CANCEL_URL",''),
    'currency' => "PKR",
    'webhook_secret_key' => env("SAFEPAY_SECRET",'')
    'webhook_shared_secret_key' => env("SAFEPAY_SHARED_SECRET",''),
];

要执行支付,您需要在 process_payment() 中传递 order_id 和总金额

use Priceoye\Safepay\Safepay;


$safepay = new Safepay;
$link = $safepay->process_payment($order_id, $cart_total);

响应中将返回一个重定向链接。简单地将用户重定向

if($link['result'] == 'success')
    return redirect($link['redirect']); 

在 Safepay 上完成支付后,您将被重定向到配置文件中传递的 redirect_url

Safepay 将在此重定向 URL 中提交这些数据。

array (
  'order_id' => '1',
  'sig' => '215557faae130d4b65dbd30b1838b816bb03c08531d861fd1215a836aaab5188',
  'reference' => '532860',
  'tracker' => 'track_93281536-3687-44a6-ac2b-4d015f98ef46',
  'token' => 'trans_eeedfc06-21d6-4c67-b1bc-941a7ac73e10',
) 

现在在 web.php 文件中创建一个路由

Route::post('payment-success', 'SafepayController@paymentCompleted');
Route::get('order-completed/{sig}', 'OrderController@orderCompleted')->name('orderCompleted');
Route::get('payment-cancel', 'OrderController@orderCancelled');

在 VerifyCsrfToken.php 中间件中添加以下代码

protected \$except = [
  'payment-success'
];

在 payment-success 路由和 paymentCompleted 函数中。

public function paymentCompleted(Request $request)
{
    $data = $request->input();
    $safepay = new Safepay;

    if ($safepay->validate_signature($data['tracker'], $data['sig']) === false) {

        return redirect()->route('checkout.index')->with(['error' => 'Payment Failed']);
    }

    return redirect(url('order-completed/'.$data['sig']));
    
}

现在在 api.php 文件中添加 Webhook 并验证它


Route::post('api/safepayNotification', 'SafepayApiController@safepayNotification');

现在验证 webhook 请求


public function safepayNotification(Request $request)
{
    $data = $request->all();

    $safepay = new Safepay;

    $x_sfpy_signature = $request->header('x-sfpy-signature');

    if ($safepay->verifyWebhook($data, $x_sfpy_signature) === false) {

        //Web Hook verification failed
       
    }

   
    
}