2016-10-23 3 views
2

Magento를 처음 사용하고 magento2.1에서 맞춤 결제 방법을 구현 중이지만 완전히 잃어 버렸습니다. 정보의 필요 흐름은 다음과 같다 :리디렉션 결제 게이트웨이 magento2

  1. 고객이 체크 아웃가는 모든 정보를 입력하고 그는 내 사용자 지정 방법을 눌러 '주문'버튼을 선택합니다 지불 방법에 간다.

  2. 버튼을 누르면 주문, 제품, 금액, 배송 주소 정보를 캡처하고 ('서명'- 확인을위한 해시, 'urlResponse'및 'urlConfirmation'및 일부 다른) 그리고 나서 게시 요청의 매개 변수를 게이트웨이 공급자 URL로 보내야합니다. 어떤 종류의 유효성 검사도 할 필요가 없습니다. 데이터를 가져 와서 더 추가하고 보내십시오.

Pronko

최대의 튜토리얼을 읽은 후

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

(내가 때문에 포인트의 부족, 다른 링크를 복사하지만,이 하나의 말에 참조가 없습니다 다른 하나에).

나는 그것을 구현하려고했지만 나는 운이 없었어요. 내가 알기로, '주문 주문'버튼을 누른 후에 요청은 내가 필요한 로직을 수행하고 TransferObject를 생성 한 다음 (어떻게?) 보낼 수있는 캡처 메소드로 전송됩니다.

벤더/PayU은/etc/프론트 엔드/di.xml에 custom payment file structure

제가있다 :

업체에서
<?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> 

/PayU/모델/결제

나가있는 구조 .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 
     ]); 
    }  
} 

나는 올바른 클래스를 구현합니까? 어떤 다른 파일이 필요합니까? 누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 감사 할 것입니다.

답변

0

먼저 모듈의 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가 필요한 모든 데이터를 포함하여 지불 모델입니다, 당신은 단지 모든 neeeded 물건 (명령, 유효성 검사기 등)을 넣어해야하며, 마 젠토 자동으로 호출합니다. 따라서 Magento \ Payment \ Model \ Method \ Adapter는 모든 결제 모듈 기능을 포함하는 Facade입니다. Magento 2 팀은 (void, capture, authorize)와 같은 모든 지불 작업에 명령 디자인 패턴을 사용합니다. 적절한 명령을 식별해야하며 Magento \ Payment \ Model \ Method \ Adapter가 자동으로 호출합니다. magento-samples 결제 방법을 확인하십시오. 에서

+0

가 답장을 보내 주셔서 감사합니다.나는 당신이 나에게 recommeded 예제를 찾고 있었지만, 나는 그것을 작동하게 만들지 못했습니다. 다음 링크에서 오류가 발생합니다 : http://imgur.com/xpsmPfs. 내가 asume 문제는 xsi : type = "const"를 가진 인수에있다. 왜냐하면 내가 그 라인들 (모든 virtualType)에 문제가 없으면 페이지가로드되기 때문이다. (코드의 URL은 http://imgur.com/이다. fOa1bjn). 무슨 문제인지 아십니까? 감사. –

+0

내가 말하는 클래스를 보여줄 수 있습니까? \ Vender \ PayUGateway \ Model \ ConfigProvider 상수 PAYMENT_METHOD_CODE로 클래스를 생성 했습니까? 또한 네임 스페이스를 확인하십시오. Magento는 상수를 찾을 수 없습니다. 모두 올바른지 확인하십시오. – Mistery

+0

이것은 내 ConfigProvider.php입니다. http://imgur.com/fnadayV 네임 스페이스를 확인했습니다. 두 스크린 샷에서 질문의 목적을 위해 공급 업체 이름을 변경했음을 알 수 있습니다. 그러나 "작동"버전의 두 파일 모두에서 올바르게 작성했습니다. –