numerics / npay
NPay 的 Laravel 5.6 包
Requires
- php: ^5.4.0|^7.0
- guzzlehttp/guzzle: 5.*|6.*
- illuminate/support: 5.*
Requires (Dev)
- mockery/mockery: >=0.7.2
- phpunit/phpunit: 4.*
- satooshi/php-coveralls: ^0.7.0
- scrutinizer/ocular: ~1.1
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 install
或 composer 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 重定向回
我们必须验证发送到我们的支付网关的请求