kofikwarteng / laravel-sagepay
Laravel 5.x Sagepay 集成
Requires
- php: >=5.5.9
This package is not auto-updated.
Last update: 2024-09-25 23:14:05 UTC
README
据我所知,Laravel 缺少任何 SagePay 集成包。这就是我决定编写这个包的原因。这个包集成了 SagePay 表单。
这个包基于 tolzhabayev's 的 SagePay 库。感谢他为 SagePay 开发如此棒的库。
要求
PHP 5.4 及更高版本。PHP7/HHVM 也完全支持。
Laravel 5(我没有在 Laravel 4 上测试过,但它可能也可以工作)
安装
要安装,只需使用 composer 并运行以下命令
$ composer require kofikwarteng/laravel-sagepay
或者,您可以将 "kofikwarteng/laravel-sagepay": "1.0.*"
添加到您的 $ composer.json
文件中的 require 块,然后运行 $ composer install
或 $ composer update
之后,定位到 app.php 文件,该文件位于您 Laravel 安装的 config 文件夹中。添加以下两行
将 Kofikwarteng\LaravelSagepay\SagePayServiceProvider::class,
添加到提供者列表中
将 'SagePay' => Kofikwarteng\LaravelSagepay\Facade\SagePayFacade::class,
添加到别名列表中
完成之后,在您的 Laravel 根目录中运行以下命令
$ php artisan vendor:publish --provider="Kofikwarteng\LaravelSagepay\SagepayServiceProvider"
现在定位到 sagepay.php
文件,该文件现在位于您运行上述命令后的 config 文件夹中。编辑货币值和加密密码为您自己的值。请确保您输入的货币是由 SagePay 支持的。
SagePay 有两种类型的加密密钥,测试密钥和实时密钥。对于开发,使用测试密钥。测试密钥与测试 URL 一起提供了一个沙盒,您可以使用虚假的信用卡号码测试您的应用程序的支付系统。
以下是他们的测试信用卡号码链接
http://www.sagepay.co.uk/support/12/36/test-card-details-for-your-test-transactions
注意:此链接可能会无通知更改
##使用方法
要在控制器中使用此包,只需像这样声明 SagePay 类
use SagePay;
您也可以在 routes.php
文件中直接使用它,而无需声明。
然后,您可以使用以下示例创建一个简单的支付
SagePay::setAmount('100');
SagePay::setDescription('Lorem ipsum');
SagePay::setBillingSurname('Mustermann');
SagePay::setBillingFirstnames('Max');
SagePay::setBillingCity('Cologne');
SagePay::setBillingPostCode('50650');
SagePay::setBillingAddress1('Bahnhofstr. 1');
SagePay::setBillingCountry('de');
SagePay::setDeliverySameAsBilling();
SagePay::setSuccessURL('https://www.yoururl.com/success.php');
SagePay::setFailureURL('https://www.yoururl.org/fail.php');
我认为这非常直接且易于使用。该库所做的只是获取您的支付信息,将其加密成 SagePay 可以理解和解密的字符串。
要输出加密字符串,请调用此方法
$encrypted_code = SagePay::getCrypt();
要将加密代码提交给 SagePay,您可以使用 blade 做如下操作
return view ('pages.checkout', compact('encrypted_code' ));
在您的视图中,您可以使用此表单进行预订
<form method="POST" id="SagePayForm" action="https://test.sagepay.com/gateway/service/vspform-register.vsp"> // replace test with live after you are done with development and want to receive real payments.
<input type="hidden" name="VPSProtocol" value= "3.00">
<input type="hidden" name="TxType" value= "PAYMENT">
<input type="hidden" name="Vendor" value= "*VENDOR_NODE_ID"> // your Vendor Node ID goes here
<input type="hidden" name="Crypt" value= "{{ $encrypted_code }}">
<input type="submit" value="Pay">
</form>
另一种使用方法是返回加密代码作为 JSON,这样您就可以基于包构建一个 RestFul 应用程序。我个人用它来创建一个基于 AngularJS 的 RestFul 应用程序。
为了检查成功,sagepay 将一个名为 crypt
的 URL 参数附加到成功和失败 URL,该参数是一个加密字符串,可以解密以提供成功响应。有了这个成功响应,您可以在数据库中标记支付为已支付,发送电子邮件等。
我个人使用的方法是创建一个带有订单令牌参数的路由(订单令牌仅是一个我为每个订单生成的字符串令牌,并存储在数据库中)。示例如下
SagePay::setSuccessURL('https:///laravel-shop/payment/' . $billing_token);
SagePay::setFailureURL('https:///laravel-shop/payment/' . $billing_token);
请注意,此示例是为了使 laravel-shop
成为您的 Laravel 安装目录而创建的。如您所见,我将成功和失败 URL 设置为相同的 URL。无需创建单独的路由。然后我们这样声明我们的路由
Route::any('/payment/{token}', function (Request $request, $token) {
if ($request->has('crypt')) {
$responseArray = SagePay::decode($request->get('crypt'));
//Check status of response
if($responseArray["Status"] === "OK"){
//payment was successful, your success code goes here
//use $token to set order as paid
//redirect user to order success page
}
elseif($responseArray["Status"] === "ABORT"){
//user aborted the payment, your abort code goes here, payment was not successful
//use $token to set order as aborted
//redirect user to order aborted page
}
else{
//payment was not successful for some strange reason
//use $token to set order as failed
//redirect user to order failed page
}
}
else{
//there was no crypt url parameter
}
});
对于更高级的使用,请访问 tolzhabayev 的 GitHub 页面,因为他是这个库的原始开发者。您也可以在这里 联系我。
我正在做各种测试。一旦完成,它们将很快可用。
谢谢并祝您编码愉快。