簡體   English   中英

如何在slim3中注入更復雜的服務,例如Paytrail

[英]How to inject more complex service in slim3 such as Paytrail

下面是“ Paytrail_Module_Rest.php”的示例代碼,“ Paytrail_Module_Rest.php”是用於與支付網關的其他api進行交互的一組類。 某些類可以提前實例化,例如(持有憑據的Paytrail_Module_rest),但是有些類需要使用僅控制器中可用的信息實例化(例如Paytrail_Module_Rest_Payment_S1來設置付款明細,例如價格)

誰能建議將它注入slim3的干凈方法? 我看不到使用標准容器注入方法執行此操作的任何好方法。

$urlset = new\App\Service\Paytrail\Paytrail_Module_Rest_Urlset(
    "https://www.demoshop.com/sv/success", // return address for successful payment
    "https://www.demoshop.com/sv/failure", // return address for failed payment
    "https://www.demoshop.com/sv/notify",  // address for payment confirmation from Paytrail server
    ""  // pending url not in use
);

$orderNumber = '1';
$price = 99.00;
$payment = new \App\Service\Paytrail\Paytrail_Module_Rest_Payment_S1($orderNumber, $urlset, $price);

$payment->setLocale('en_US');

$module = new \App\Service\Paytrail\Paytrail_Module_Rest(13466, '6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ');

try {
    $result = $module->processPayment($payment);
}
catch (\App\Service\Paytrail\Paytrail_Exception $e) {
    die('Error in creating payment to Paytrail service:'. $e->getMessage());
}

echo $result->getUrl();

(此處列出的憑證是公共測試憑證)

將不會改變的內容添加到容器中,例如模塊和urlset

$container[\App\Service\Paytrail\Paytrail_Module_Rest_Urlset::class] = function($c) {
    return new \App\Service\Paytrail\Paytrail_Module_Rest_Urlset(
        "https://www.demoshop.com/sv/success", // return address for successful payment
        "https://www.demoshop.com/sv/failure", // return address for failed payment
        "https://www.demoshop.com/sv/notify",  // address for payment confirmation from Paytrail server
        ""  // pending url not in use
    );
};

$container[\App\Service\Paytrail\Paytrail_Module_Rest::class] = function($c) {
    return new \App\Service\Paytrail\Paytrail_Module_Rest(13466, '6pKF4jkv97zmqBJ3ZL8gUw5DfT2NMQ');
};

然后,您可以在每次需要時實例化付款,或添加諸如適配器之類的幫助程序類:

class PaymentAdapter {

    public function __construct(
            \App\Service\Paytrail\Paytrail_Module_Rest $module,
            \App\Service\Paytrail\Paytrail_Module_Rest_Urlset $urlset) 
    {
        $this->module = $module;
        $this->urlset = $urlset;
    }

    function createAndProcessPayment($orderNumber, $price) 
    {
        $payment = new \App\Service\Paytrail\Paytrail_Module_Rest_Payment_S1($orderNumber, $this->urlset, $price);

        $payment->setLocale('en_US');
        try {
            $result = $module->processPayment($payment);
        }
        catch (\App\Service\Paytrail\Paytrail_Exception $e) {
            die('Error in creating payment to Paytrail service:'. $e->getMessage());
        }
        return $result;
    }

}

然后將適配器也添加到容器中:

$container[\yournamespace\PaymentAdapter::class] = function($c) {
    return new \yournamespace\PaymentAdapter(
        $c[\App\Service\Paytrail\Paytrail_Module_Rest::class],
        $c[\App\Service\Paytrail\Paytrail_Module_Rest_Urlset::class]
    );
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM