簡體   English   中英

重定向支付網關magento2

[英]redirect payment gateway magento2

我是Magento的新手,我正在magento2.1中實施自定義付款方式,但我完全迷失了。 所需的信息流如下:

  1. 客戶前往結賬並輸入所有信息,然后轉到付款方式,他將選擇我的自定義方式並按“下訂單”按鈕。

  2. 按下按鈕后,我必須捕獲訂單,產品,數量,送貨地址的信息,並添加其他信息,如('簽名' - 用於驗證的哈希,'urlResponse'和'urlConfirmation'等等)然后我需要將Post請求中的這些參數發送到Gateway Provider URL。 我不需要進行任何類型的驗證,只需獲取數據,添加更多數據並發送即可。

閱讀了Max Pronko的教程后

https://www.maxpronko.com/blog/magento-2-payment-gateway-api

(我無法復制其他鏈接,因為缺少點,但在這一點的末尾有一個引用另一個)。

我試圖實現它,但我沒有運氣。 據我所知,在按下“下訂單”按鈕后,請求被發送到捕獲方法,我可以執行必要的邏輯,然后創建一個TransferObject,然后發送它(如何?)。

這是我的結構:

自定義付款文件結構

在Vendor / PayU / etc / frontend / di.xml中我有:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Payment\Gateway\Command\CommandPoolInterface" type="Magento\Payment\Gateway\Command\CommandPool" />

    <virtualType name="Vendor\PayU\Model\Payment\Command\CaptureGateway" type="Magento\Payment\Gateway\Command\GatewayCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">Vendor\PayU\Model\Payment\Request\Capture</argument>
        </arguments>
    </virtualType>

    <virtualType name="Vendor\PayU\Gateway\Command\CommandPool" type="Magento\Payment\Gateway\Command\CommandPool">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="capture" xsi:type="string">Vendor\PayU\Model\Payment\Command\CaptureGateway</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUPaymentMethodAdapter" type="Magento\Payment\Model\Method\Adapter">
        <arguments>
            <argument name="code" xsi:type="const">Vendor\PayU\Model\Payment::METHOD_CODE</argument>
            <argument name="valueHandlerPool" xsi:type="object">PayUValueHandlerPool</argument>
            <argument name="validatorPool" xsi:type="object">PayUValidatorPool</argument>
            <argument name="commandPool" xsi:type="object">PayUCommandPool</argument>
            <argument name="formBlockType" xsi:type="object">Magento\Payment\Block\Form\Cc</argument>
            <argument name="infoBlockType" xsi:type="object">Magento\Payment\Block\Info\Cc</argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUConfig" type="Magento\Payment\Gateway\Config\Config">
        <arguments>
            <argument name="methodCode" xsi:type="const">Vendor\PayU\Model\Payment::METHOD_CODE</argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUConfigValueHandler" type="Magento\Payment\Gateway\Config\ConfigValueHandler">
        <arguments>
            <argument name="configInterface" xsi:type="object">PayUConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUValueHandlerPool" type="Magento\Payment\Gateway\Config\ValueHandlerPool">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="default" xsi:type="string">PayUConfigValueHandler</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="CountryValidator" type="Magento\Payment\Gateway\Validator\CountryValidator">
        <arguments>
            <argument name="config" xsi:type="object">PayUConfig</argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUGlobalValidator" type="Magento\Payment\Gateway\Validator\ValidatorComposite">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="country" xsi:type="string">CountryValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUValidatorPool" type="Magento\Payment\Gateway\Validator\ValidatorPool">
        <arguments>
            <argument name="validators" xsi:type="array">
                <item name="global" xsi:type="string">PayUGlobalValidator</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUCaptureGatewayCommand" type="Magento\Payment\Gateway\Command\GatewayCommand">
        <arguments>
            <argument name="requestBuilder" xsi:type="object">Vendor\PayU\Model\Payment\Request\Capture</argument>
            <argument name="handler" xsi:type="object">Vendor\PayU\Model\Payment\Response\Capture</argument>
            <argument name="transferFactory" xsi:type="object">Vendor\PayU\Gateway\Http\TransferFactory</argument>
        </arguments>
    </virtualType>

    <virtualType name="PayUCommandPool" type="Magento\Payment\Gateway\Command\CommandPool">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="capture" xsi:type="string">PayUCaptureGatewayCommand</item>
            </argument>
        </arguments>
    </virtualType>

    <type name="Vendor\PayU\Model\Payment">
        <arguments>
            <argument name="commandPool" xsi:type="object">Vendor\PayU\Gateway\Command\CommandPool</argument>
        </arguments>
    </type>
</config>

在Vendor / PayU / Model / Payment.php中我有:

<?php

namespace Vendor\PayU\Model;

use Magento\Payment\Model\InfoInterface;
use Magento\Payment\Gateway\Command\CommandPoolInterface;
use Magento\Payment\Gateway\CommandInterface;

class Payment implements MethodInterface, PaymentMethodInterface
{
    /**
     * @var \Magento\Payment\Gateway\Command\CommandPoolInterface
    */
    protected $commandPool;

    /**
     * @var CommandPoolInterface
    */
    public function __construct(CommandPoolInterface $commandPool) {
        $this->commandPool = $commandPool;
    }

    /**
     * @param InfoInterface $payment
     * @param float $amount
     * @return $this
     * @api
    */
    public function capture(InfoInterface $payment, $amount)
    {
        /** @var CommandInterface $captureGatewayCommand */
        $captureGatewayCommand = $this->commandPool->get('capture');

        $captureGatewayCommand->execute([
            'payment' => $payment,
            'amount' => $amount
        ]);
    }     
}

我是否正在實施合適的課程? 我還需要哪些其他文件? 如果有人能指出我正確的方向,我將不勝感激。

首先,看看magento 2模塊的官方樣本。 https://github.com/magento/magento2-samples/tree/2.1/sample-module-payment-gateway據我所知,你不應該有真正的支付模式。 您剛剛在di.xml中創建了付款模型。 按代碼:

<virtualType name="PayUPaymentMethodAdapter" type="Magento\Payment\Model\Method\Adapter">
    <arguments>
        <argument name="code" xsi:type="const">Vendor\PayU\Model\Payment::METHOD_CODE</argument>
        <argument name="valueHandlerPool" xsi:type="object">PayUValueHandlerPool</argument>
        <argument name="validatorPool" xsi:type="object">PayUValidatorPool</argument>
        <argument name="commandPool" xsi:type="object">PayUCommandPool</argument>
        <argument name="formBlockType" xsi:type="object">Magento\Payment\Block\Form\Cc</argument>
        <argument name="infoBlockType" xsi:type="object">Magento\Payment\Block\Info\Cc</argument>
    </arguments>
</virtualType>

PayUPaymentMethodAdapter是您的支付模式,其中包含所有需要的數據,您應該只放置所有必需的東西(命令,驗證器等),Magento將自動調用。 所以Magento \\ Payment \\ Model \\ Method \\ Adapter只是Facade,它包含所有支付模塊功能。 Magento 2團隊使用命令設計模式進行所有支付操作,例如(void,capture,authorize)。 您應該識別適當的命令,Magento \\ Payment \\ Model \\ Method \\ Adapter將自動調用它們。 請檢查magento-samples付款方式。

在Magento 2的17個支付擴展中 ,我已經通過以下方式實現了從Magento支付頁面到支付服務提供商或Magento«checkout success»頁面的重定向: https//github.com/mage2pro/core/blob /2.12.5/Payment/view/frontend/web/mixin.js#L350-L401

暫無
暫無

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

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