webribs/safepay-laravel

Safepay支付网关与Laravel的集成

dev-master 2022-10-13 07:09 UTC

This package is auto-updated.

Last update: 2024-09-13 11:00:58 UTC


README

Safepay Laravel支付网关集成

composer require webribs/safepay-laravel

在app.php中添加提供者

Webribs\Safepay\SafepayProvider

添加别名

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

发布迁移文件

php artisan migrate

它将创建一个名为"payment_logs"的表。

发布配置文件

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

return [
    "environment"  => "sandbox", //use 'production' for live payments
    "api_key" => "",
    'redirect_url' => "https://:8000/success",
    'cancel_url' => "https://:8000/payment-cancel",
    'currency' => "PKR",
    'webhook_secret_key' => "",
    'order_class' => Order::class
];

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

use Webribs\Safepay\Safepay;


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

作为响应,它将返回一个重定向链接。简单地将用户重定向即可

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

在safepay完成支付后,您将被重定向到在配置文件中传入的重定向_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('success', 'Front\HomeController@storePaymentLog');
Route::get('payment-success/{sig}', 'Front\HomeController@viewPaymentSuccessPage')->name('payment_success');
Route::get('payment-cancel', 'Front\HomeController@viewCancelPaymentPage');

在VerifyCsrfToken中间件中,添加以下代码

protected \$except = [
  'success'
];

在storePaymentLog方法中,您需要验证签名。如果签名验证通过,则存储支付日志并更新订单状态。

public function storePaymentLog(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']);
    }

    PaymentLog::create([
        'order_id' => $data['order_id'],
        'reference_code' => $data['reference'],
        'tracker' => $data['tracker'],
        'signature' => $data['sig'],
    ]);

    //update order status
    $order = Order::find($data['order_id']);
    $order->order_status_id = 1; //Paid
    $order->save();

    event(new OrderCreateEvent($order));

    Cart::destroy();

    return redirect()->route('payment_success', $data['sig']);
}