【问题标题】:Implement 3rd party class in Laravel 4.2在 Laravel 4.2 中实现 3rd 方类
【发布时间】:2015-11-20 03:56:28
【问题描述】:

我第一次尝试在 Laravel 项目中集成一个基于中东的支付网关,用于通过借记卡进行支付。我过去曾在自定义 PHP 项目中使用过此支付网关,但在将其集成到 Laravel 项目中时遇到了问题。

基本上,这个支付网关文件由一个名为 e24PaymentPipe 的类和一个 resource/resource.cgn 组成。这两个文件的简要结构如下:

e24PaymentPipe

完整类源码:here!

class e24PaymentPipe {
    var $SUCCESS = 0;
    var $FAILURE = -1;
    var $BUFFER = 2320;
    var $strIDOpen = "<id>";
    var $strPasswordOpen = "<password>";
    ..... some more vars ......

    function e24PaymentPipe() {
        $this->webAddress = "";
        $this->port = "443";
        $this->id = "";
        $this->password = "";
        ... some more vars
    }

    function getWebAddress() {
        return webAddress;
    }

    function setWebAddress($s) {
        $this->webAddress = $s;
    }

    ... sme more functions ...
}

resource/resource.cgn

此文件包含一些字符串:

13d6 acd1 35e2 f54d 2dab 7d9d 63bc 9bb2
6f8f 1fd9 2fc2 aa41 4a8e 873e 98a6 2304

实施

在会显示支付按钮的页面中,需要添加如下代码:

// BENEFIT PAYMENT Code 

require('e24PaymentPipe.inc.php');
date_default_timezone_set('Asia/Bahrain');

$accATM = new e24PaymentPipe;
$accATM->resourcePath = 'resource/';
$accATM->alias = 'SECRET_ALIAS_OF_MERCHANT';
$accATM->action = '1';
$accATM->currency = '048';
$accATM->language = 'USA';
$accATM->amt = 'PRICE_HERE';
$accATM->responseURL = '/response.php';
$accATM->errorURL = '/error_page.php';
$accATM->trackId = date('YmdHis');

$TransVal = $accATM->performPaymentInitialization();
$varRawResponse = $accATM->getRawResponse();
$varPaymentId = $accATM->getPaymentId();
$varPaymentPage = $accATM->getPaymentPage();
$varErrorMsg = $accATM->getErrorMsg();

HTML FORM(显示将用户带到支付网关页面以完成借记卡付款的按钮,完成后用户将被重定向回网站)

<!-- Benefit Debit Card Payment Button -->
<form action="<?php echo $varPaymentPage; ?>" method="get" class="pull-left" style="margin-left:20px;">
    <input id="PaymentID" name="PaymentID" type="hidden" value="<?php echo $varPaymentId; ?>" />
    <input type="submit" class="btn btn-warning btn-lg" value="Debit Card Payment" />
</form>

我是 Laravel 的新手,这是我的第一个项目之一。请帮忙,谢谢。

编辑

顺便说一下,这里是这个e24PaymentPipe类的GitHub repo,你可以在这里查看这个类的完整代码及其实现:

https://github.com/TigerWolf/e24PaymentPipe-php

希望这会有所帮助。


@Angel M. 这就是我正在做的事情:

控制器功能

public function payment() {
    $accATM = new \e24PaymentPipe;

    return View::make('site.payment', compact('accATM'));
}

payment.blade.php

<?php
$accATM->resourcePath = app_path().'/views/site/resource';
$accATM->alias = 'SECRET_ALIAS_HERE';
$accATM->action = '1';
$accATM->currency = '048';
$accATM->language = 'USA';
$accATM->amt = $participant->price;
$accATM->responseURL = '/response.php';
$accATM->errorURL = '/error_page.php';
$accATM->trackId = date('YmdHis');

$accATM->udf2 = 'ud2465665';
$accATM->udf3 = 'ud3231213';
$accATM->udf4 = 'ud4785653';
$accATM->udf5 = 'ud5554788';

$TransVal = $accATM->performPaymentInitialization();
$varRawResponse = $accATM->getRawResponse();
$varPaymentId = $accATM->getPaymentId();
$varPaymentPage = $accATM->getPaymentPage();
$varErrorMsg = $accATM->getErrorMsg();

?>

!-- Benefit Debit Card Payment -->
<form action="<?php echo $varPaymentPage; ?>" method="get" class="pull-left" style="margin-left:20px;">
    <input id="PaymentID" name="PaymentID" type="hidden" value="<?php echo $varPaymentId; ?>" />
    <input type="submit" class="btn btn-warning btn-lg" value="Debit Card Payment" />
</form>

【问题讨论】:

    标签: php laravel laravel-4 payment-gateway


    【解决方案1】:

    我会将支付类添加到特殊文件夹中,例如应用文件夹中的支付,或者您喜欢的任何内容。

    然后将composer中的路径添加到自动加载部分:

       "autoload": {
        "classmap": [
            "app/commands",
            "app/controllers",
          ... etc..
            "app/payments"
        ],
    

    然后运行

    composer dump-autoload,所以文件会被加载 然后将表单和其余代码添加到适当的类/视图中。

    在控制器中什么时候管理支付(不知道你会用哪一个)

    在方法内添加: $payment = 新的 e24PaymentPipe;

    public function payment()
    {
      $accATM = new e24PaymentPipe;
        $accATM->resourcePath = 'resource/';
        $accATM->alias = 'SECRET_ALIAS_OF_MERCHANT';
        $accATM->action = '1';
        $accATM->currency = '048';
        $accATM->language = 'USA';
        $accATM->amt = 'PRICE_HERE';
        $accATM->responseURL = '/response.php';
        $accATM->errorURL = '/error_page.php';
        $accATM->trackId = date('YmdHis');
    
        $TransVal = $accATM->performPaymentInitialization();
        $varRawResponse = $accATM->getRawResponse();
        $varPaymentId = $accATM->getPaymentId();
        $varPaymentPage = $accATM->getPaymentPage();
        $varErrorMsg = $accATM->getErrorMsg();
    
      return View::make('myfolder/payment')->with(... here you will list array of data you will send to the view...);
    }
    

    其中 myfolder/payment 将是 myfolder/payment.blade.php 文件

    编辑: 尝试发送:

    View::make('site.payment')->with('accATM',$accATM);
    

    并且你应该使用类似的东西:

    签入视图,如果数据已发送:

    @if($accATM) ...
    

    【讨论】:

    • 需要添加到适当视图文件中的其余代码和表单呢?谈论我原帖的实现部分。
    • @Jazzbot 我已经更新了——但这更像是一种草稿,你如何使用它,你需要添加适当的数据......我刚刚从你的代码中复制/粘贴跨度>
    • 好的,我所做的是:在我的控制器函数中添加了$accATM = new e24PaymentPipe;,然后return View::make('site.payment', compact('accATM'));site/payment.blade.php 中编写了其余代码,但是其说法试图获取非对象的属性(查看:payment.blade.php)
    • payment.blade.php 中有什么?
    • 我已经更新了我原来的帖子,并在我的控制器功能和视图中添加了我正在做的事情
    【解决方案2】:

    我建议你创建一个这样的自定义服务提供者

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class YourServiceProvider extends ServiceProvider
    {
        /**
         * Register the application services.
         *
         * @return void
         */
        public function register()
        {
            //
            $this->app->bind('YOUR_CUSTOM_CLASS_NAMESPACE_PATH');
        }
    }
    

    然后在你的 config/app.php 文件中注册你的服务提供者

    YOUR_SERVICE_PROVIDER_NAMESPACE_YOU_CREATED::class,
    

    然后在任何你可以使用你的 YOUR_CUSTOM_CLASS 的地方,

    $class = new YOUR_CUSTOM_CLASS();//use use to import the class namespace path
    

    【讨论】:

    • 我应该在哪里创建这个自定义服务提供者?对不起这个菜鸟问题.. :(
    • 您可以在任何地方创建服务提供者,但最佳做法是在 /app/Providers/ 中创建它,但您必须提供正确的命名空间。您的命名空间将是 namespace App\Providers; 并且在将您的文件注册到 config/app.php 时像这样注册 App\Providers\CUSTOM_SERVICE_PROVIDER::class
    【解决方案3】:

    在您的应用根目录中创建 e24PaymentPipe
    打开 composer.json

     "classmap": [
         "database",
         "app/e24PaymentPipe" <-- add this line to classmap
      ],
    

    运行作曲家转储自动加载; 在你的控制器中

    public function __construct(){
        $e24payment = new \e24PaymentPipe;  
    }
    

    【讨论】:

    • 试过了,然后将实现代码和表单添加到我的付款页面视图中,就像我在原始帖子中显示的那样。打开页面时出现此错误:Creating default object from empty value (View: payment.blade.php)
    猜你喜欢
    • 2015-02-23
    • 1970-01-01
    • 2019-11-30
    • 2018-03-27
    • 2017-02-11
    • 2014-09-28
    • 2014-11-12
    • 2010-10-31
    • 1970-01-01
    相关资源
    最近更新 更多