numerics/npay

NPay 的 Laravel 5.6 包

dev-master 2018-08-03 09:58 UTC

This package is not auto-updated.

Last update: 2024-09-30 00:11:05 UTC


README

一个用于无缝集成 NPay 的 Laravel 5.6 包

安装

需要 PHP 5.4+ 和 Composer

要获取 Npay-laravel 的最新版本,只需使用 Composer 引入它。

composer require numerics/npay

或者,将以下行添加到您的 composer.json 文件的 require 块中。

"numerics/npay-laravel"

然后,您需要运行 composer installcomposer update 以下载它并更新自动加载器。

一旦安装了 npay laravel,您需要注册服务提供者。打开 config/app.php 并将以下内容添加到 providers 键。

如果您使用 Laravel >= 5.5,可以跳过此步骤并转到 配置

  • Numerics\Npay\NpayServiceProvider::class

此外,还需要注册 Facade,如下所示

'aliases' => [
    ...
    'Npay' => Numerics\Npay\Facades\Npay::class,
    ...
]

配置

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="Numerics\Npay\NpayServiceProvider"

一个名为 npay.php 的配置文件将带有一些默认值放置在您的 config 目录中

<?php

return [
     /**
     * Api secert public Key
     *
     */
    'publicKey'=>  getenv('NPAY_PUBLIC_KEY'),

    /**
     * Api Secret Key
     *
     */
    'secretKey' => getenv('NPAY_API_KEY'),

    
    /**
     * Npay Payment URL
     *
     */
    'paymentUrl' => getenv('NPAY_PAYMENT_URL'),

    /**
     * Optional email address of the merchant
     *
     */
    'merchantEmail' => getenv('MERCHANT_EMAIL'),

];

##一般支付流程

尽管有多种支付订单的方式,但大多数支付网关都希望您在结账过程中遵循以下流程

###1. 客户被重定向到支付提供商 在客户完成结账过程并准备付款并点击付款按钮后,客户必须被重定向到支付提供商的网站。

重定向是通过提交包含一些隐藏字段的表单来完成的。表单必须提交到支付提供商的网站。隐藏字段至少指定了必须支付的金额、订单 ID 和哈希值。

哈希值是使用隐藏表单字段和一个非公开的秘密计算的。支付提供商使用的哈希值用于验证请求是否有效。

###2. 客户在支付提供商的网站上支付 客户到达支付提供商的网站并选择支付方式。所有必要的支付订单步骤都由支付提供商处理。

###3. 客户被重定向回 在支付订单后,客户被重定向回。在重定向请求到商店网站时,返回一些值。这些值通常是订单 ID、支付结果和哈希值。

哈希值是从返回的字段和一些非公开的秘密值中计算出来的。此哈希值用于验证请求是否有效并来自支付提供商。务必彻底检查此哈希值。

用法

打开您的 .env 文件并添加您的 API 密钥、商户电子邮件和支付 URL,如下所示

NPAY_PUBLIC_KEY=xxxxxxxxxxxxxx
NPAY_API_KEY=xxxxxxxxxxxxxxxxx
NPAY_PAYMENT_URL=https://bvnpay.ng
MERCHANT_EMAIL=merchant@gmail.com

设置路由和控制器方法,如下所示

注意:您必须提供此订单的回调 URL,因为我们将在此处重定向您,成功交易后您也可以将其作为表单中的一个参数发送给我们

// Laravel 5.1.17 and above
Route::post('/setTransaction', 'PaymentController@redirectToGateway')->name('setTransaction'); 
Route::get('/payment/getTransaction', 'PaymentController@handleGatewayCallback');
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Numerics\Npay\Npay;

class PaymentController extends Controller
{

    /**
     * Redirect the User to Npay Payment Page
     * @return Url
     */
    public function redirectToGateway()
    {
        $npay = new Npay();
        return $npay->getAuthorizationUrl()->redirectNow();
    }

    /**
     * Obtain Npay payment information
     * @return void
     */
    public function handleGatewayCallback()
    {
        $paymentData = $_GET['ref'];
        $npay = new Npay();
        $paymentDetails = $npay->getPaymentData($paymentData);
        dd($paymentDetails);
        // Now you can do whatever you want with the details;
        // you can save it in your database
        // you can then redirect or do whatever you want
    }
}

一个示例 HTML 表单将如下所示

<form method="POST" action="{{ route('setTransaction') }}" accept-charset="UTF-8" class="form-horizontal" role="form">
@csrf
        <div class="row" style="margin-bottom:40px;">
          <div class="col-md-8 col-md-offset-2">
            <p>
                <div>
                   Payment Details
                </div>
            </p>
            <input type="hidden" name="email" value="ndekepeter@gmail.com"> {{-- required --}}
            <input type="hidden" name="orderID" value="345">
            <input type="hidden" name="first_name" value="Ndeke Peter">
            <input type="hidden" name="amount" value="800"> {{-- required in kobo --}}
            <input type="hidden" name="quantity" value="3">
            <input type="hidden" name="metadata" value="{{ json_encode($array = ['key_name' => 'value',]) }}" > {{-- For other necessary things you want to add to your payload. it is optional though --}}
            <input type="hidden" name="reference" value="{{ Npay::genTranxRef() }}"> {{-- required --}}
            <input type="hidden" name="apiKey" value="{{ config('npay.secretKey') }}"> {{-- required --}}
            {{ csrf_field() }} {{-- works only when using laravel 5.1, 5.2 --}}
            <input type="hidden" name="callbackUrl" value="yourdomain.com/payment/getTransaction"> {{-- required --}}


            <p>
              <button class="btn btn-success btn-lg btn-block" type="submit" value="Pay Securely!">
              <i class="fa fa-plus-circle fa-lg"></i> Pay Securely!
              </button>
            </p>
          </div>
        </div>
</form>

点击提交按钮后,客户将被重定向到 Npay 网站。

因此,我们希望客户支付订单并将带有支付状态的回调 URL 重定向回

我们必须验证发送到我们的支付网关的请求