guysolamour/laravel-cinetpay

laravel 的 cinetpay 封装

v2.0 2023-02-26 08:36 UTC

This package is auto-updated.

Last update: 2024-09-13 20:45:48 UTC


README

Packagist Packagist Packagist

本包是用于执行在线支付的封装。您可以访问他们的网站了解更多他们的不同服务。

安装

通过 composer 安装

composer require guysolamour/laravel-cinetpay

先决条件

  • PHP >= 8
  • Laravel >= 8

发布包资源

php artisan vendor:publish --provider="Guysolamour\Cinetpay\ServiceProvider"

用法

步骤 1

在 .env 文件中添加 api 密钥

CINETPAY_API_KEY="your api key"
CINETPAY_SITE_ID="your site id"
# Ces différentes routes seront automatiquement créés pour vous
CINETPAY_NOTIFY_URL="/cinetpay/notify"
CINETPAY_RETURN_URL="/cinetpay/return"
CINETPAY_CANCEL_URL="/cinetpay/cancel"

步骤 2:创建重定向路由

您需要将负责管理这些路由的控制器放在配置文件 config/cinetpay.php

'controller' => \App\Http\Controllers\PaymentController::class,

控制器示例

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Guysolamour\Cinetpay\Cinetpay;
use Guysolamour\Cinetpay\Http\Controllers\PaymentController as CinetpayPaymentController;

class PaymentController extends CinetpayPaymentController
{
   public function cancel(Request $request)
    {
        // redirect the user where you want
        // return redirect('/'); // or redirect()->home();
    }

    public function return(Request $request, Cinetpay $cinetpay)
    {
        // $cinetpay->getTransactionBuyer();
        // $cinetpay->getTransactionDate()->toDateString();
        // $cinetpay->getTransactionCurrency();
        // $cinetpay->getTransactionPaymentMethod();
        // $cinetpay->getTransactionPaymentId();
        // $cinetpay->getTransactionPhoneNumber();
        // $cinetpay->getTransactionPhonePrefix();
        // $cinetpay->getTransactionLanguage();
        // $cinetpay->isValidPayment();


        if ($cinetpay->isValidPayment()) {
            // success
        } else {
            // fail
        }

        // redirect the user where you want
        // return redirect('/'); // or redirect()->home();
    }

    public function notify(Request $request, Cinetpay $cinetpay)
    {
        // $cinetpay->getTransactionBuyer();
        // $cinetpay->getTransactionDate()->toDateString();
        // $cinetpay->getTransactionCurrency();
        // $cinetpay->getTransactionPaymentMethod();
        // $cinetpay->getTransactionPaymentId();
        // $cinetpay->getTransactionPhoneNumber();
        // $cinetpay->getTransactionPhonePrefix();
        // $cinetpay->getTransactionLanguage();
        // $cinetpay->isValidPayment();


        if ($cinetpay->isValidPayment()){
            // success
        }else {
            // fail
        }

        // redirect the user where you want
        // return redirect('/'); // or redirect()->home();
    }
}

您可以从 web.php 路由文件手动创建重定向路由

Route::get('/cinetpay/cancel', [PaymentController::class, 'cancel'])->name('cinetpay.cancel');
Route::post('/cinetpay/notify', [PaymentController::class, 'notify'])->name('cinetpay.notify');
Route::post('/cinetpay/return', [PaymentController::class, 'return'])->name('cinetpay.return')

或使用此方法,依然从 web.php 文件中

/*
* Cette fonction enregistra les routes pour vous
*/
 \Guysolamour\Cinetpay\Facades\Utils::routes();

步骤 3

在页面上显示支付按钮。

从控制器中,创建一个 \Guysolamour\Cinetpay\Cinetpay 类的实例,并通过类中存在的不同方法进行自定义。

当 init 函数被调用时,它会从 .env 文件中获取 api 密钥和重定向路由,并使用这些值为您构建类的实例。

$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init();

添加交易标识符,该值需要存储在您的应用程序中,以便识别和验证每次支付的状态。此值是必需的,并且有多种生成方式

$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
;

类中存在一个静态方法,用于生成交易标识符。

$transactionId= \Guysolamour\Cinetpay\Cinetpay::generateTransId(); // cette valeur devra etre stocke dans votre application afin d'identififier et vérfier le statut de chaque paiement
$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
;

添加买家标识符,以将买家与支付进行关联。标识符必须对每个买家都是唯一的。

$transactionId= \Guysolamour\Cinetpay\Cinetpay::generateTransId(); // cette valeur devra etre stocke dans votre application afin d'identififier et vérfier le statut de chaque paiement
$user = \App\Models\User::first();

$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
  ->setBuyerIdentifiant($user->email ) # or $user->id
;

这部分不是必需的,但您可以添加用于预先填写支付表单的号码。

$transactionId= \Guysolamour\Cinetpay\Cinetpay::generateTransId(); // cette valeur devra etre stocke dans votre application afin d'identififier et vérfier le statut de chaque paiement
$user = \App\Models\User::first();

$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
  ->setBuyerIdentifiant($user->email ) # or $user->id
  ->setPhonePrefixe('225') // for ivory coast
  ->setCelPhoneNum('0102030405')
;

添加要购买产品的描述或名称

$transactionId= \Guysolamour\Cinetpay\Cinetpay::generateTransId(); // cette valeur devra etre stocke dans votre application afin d'identififier et vérfier le statut de chaque paiement

$user = \App\Models\User::first();
$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
  ->setBuyerIdentifiant($user->email ) # or $user->id
  ->setPhonePrefix('225') // for ivory coast
  ->setCelPhoneNum('0102030405')
  ->setDesignation('Mackbook pro 2021 m1')
;

添加交易总金额,这是将向客户收费的金额。

$transactionId= \Guysolamour\Cinetpay\Cinetpay::generateTransId(); // cette valeur devra etre stocke dans votre application afin d'identififier et vérfier le statut de chaque paiement

$user = \App\Models\User::first();

$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
  ->setBuyerIdentifiant($user->email ) # or $user->id
  ->setPhonePrefix('225') // for ivory coast
  ->setCelPhoneNum('0102030405')
  ->setDesignation('Mackbook pro 2021 m1')
  ->setAmount('950000')
;

最后,将变量传递给将负责显示支付按钮的视图。

return view('shop.checkout', ['cinetpay' => $cinetpay]);
$user = \App\Models\User::first();
$cinetpay = \Guysolamour\Cinetpay\Cinetpay::init()
  ->setTransactionId($transactionId) // must be unique
  ->setBuyerIdentifiant($user->email ) # or $user->id
  ->setPhonePrefix('225') // for ivory coast
  ->setCelPhoneNum('0102030405')
  ->setDesignation('Mackbook pro 2021 m1')
  ->setAmount('950000')
;

步骤 4:按钮自定义

在文件中

{!! $cinetpay !!}

更改按钮标签

{!! $cinetpay->show('buy quickly with mobile money') !!}

更改按钮外观(CSS),需要移除默认样式

# config/cinetpay.php

return [
  'button' => [
    'use_default_style' => false,
  ]
];

向按钮添加 CSS 类

# config/cinetpay.php

return [
  'button' => [
    'class' => 'btn btn-primary ben-block',
  ]
];

给按钮添加一个标识符

# config/cinetpay.php

return [
  'button' => [
    'id' => 'paybutton',
  ]
];

直接添加内联 CSS

# config/cinetpay.php

return [
  'button' => [
    'style' => 'color: white; font-weight: bold',
  ]
];

向按钮添加 HTML 属性

# config/cinetpay.php

return [
  'button' => [
      'attributes' => [
        'data-button' => 'pay'
      ],
  ]
];

或完全更改按钮的 HTML

# config/cinetpay.php

return [
  'button' => [
    # :label pour le label du bouton
    # :id pour l'id du bouton
    # :class pour les classes du bouton
      'html' => "<button class='btn btn-success' :id> <img  src='https://aswebagency.com/img/logo.png'></button>",
  ]
];

安全性

如果您发现任何与安全相关的问题,请通过电子邮件而不是使用问题跟踪器来报告。

致谢

本包是通过 melihovv/laravel-package-generator 的帮助进行初始化的。