kofikwarteng/laravel-sagepay

Laravel 5.x Sagepay 集成

1.0.2 2016-02-16 09:26 UTC

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 页面,因为他是这个库的原始开发者。您也可以在这里 联系我

我正在做各种测试。一旦完成,它们将很快可用。

谢谢并祝您编码愉快。