Magento 2: Wie stelle ich VaultProvider ein?

7

Ich arbeite an einem benutzerdefinierten Zahlungssystem, in dem ich die Magento2-Standard-Tresorfunktion verwende. Alles funktioniert gut, wenn ich den folgenden Code in der Datei Magento\Vault\Model\Method\Vaultin authorize()oder capture()Methoden ersetze .

$commandExecutor = $this->commandManagerPool->get(
        $this->getVaultProvider()->getCode()
    );

zu

$commandExecutor = $this->commandManagerPool->get(
        "method_code"
    );

Meine Frage ist, wie kann ich zuweisen vaultprovider? so kann ich Methodencode direkt vom vaultproviderObjekt erhalten.

Hinweis: Ich gebe keine Bestellung in Magento auf, sondern autorisiere oder erfasse nur den Betrag vom Zahlungsgateway-System eines Drittanbieters ( Paypal Pro ) in meinem benutzerdefinierten Modul.

Yogesh Karodiya
quelle
mage2.pro/t/topic/643
Sunil Patel

Antworten:

8

Nach einigem F & E habe ich die Lösung selbst gefunden.

Zuerst habe ich eine Klasse in meinem Modul erstellt:

namespace VendorName\ModuleName\Model\Payment;
class Payflowpro 
{
 public function __construct(
    \Magento\Vault\Model\VaultPaymentInterface $vault
) {
   $this->vault = $vault

}
  public function mymethod($payment,$amount)
  {
    $this->vault->authorize($payment,$amount);
  }
}

Hier kam ich an einem Objekt der VaultKlasse vorbei.

Im zweiten Schritt 1 di.xmlin meinem Modul erstellt und folgenden Code schreiben:

<type name="VendorName\ModuleName\Model\Payment\Payflowpro">
    <arguments>
        <argument name="vault" xsi:type="object">PayflowProCreditCardVaultFacade</argument>
    </arguments>
 </type>  

Hier wird der Typ zum Zuweisen des Objektwerts verwendet, den ich in meiner Modulklasse übergeben habe

Jetzt erstelle ich die letzten Schritte VirtualTypein meinem di.xmlfür die Zuordnung providerzur Tresorklasse.

 <virtualType name="PayflowProCreditCardVaultFacade" type="Magento\Vault\Model\Method\Vault">
    <arguments>
        <argument name="config" xsi:type="object">PayflowProVaultPaymentConfig</argument>
        <argument name="valueHandlerPool" xsi:type="object">PayflowProVaultPaymentValueHandlerPool</argument>
        <argument name="vaultProvider" xsi:type="object">Magento\Paypal\Model\Payflow\Transparent</argument>
        <argument name="code" xsi:type="const">Magento\Paypal\Model\Payflow\Transparent::CC_VAULT_CODE</argument>
    </arguments>
</virtualType>
Yogesh Karodiya
quelle
Schöne Lösungen.
Rakesh Jesadiya
Guter Fang @Yogesh :) +1 von mir
Keyur Shah
@yogesh, Können Sie Informationen bereitstellen, wie kann ich Vault für meine benutzerdefinierte Zahlungsmethode verwenden?
Charlie
@Keyur Ich versuche, Vault zum Payfort-Modul hinzuzufügen, indem ich dem offiziellen Dokument devdocs.magento.com/guides/v2.1/payments-integrations/vault/… folge , aber ich kann die Abhängigkeitsinjektion nicht korrekt erhalten. Ich habe versucht, die Datei di.xml aus dem Braintree-Modul zu kopieren, aber es ist auch sehr verwirrend. Der Code im VaultDetailsHandler, der als Handler verwendet wird, wird nicht ausgeführt. Wie beurteilen Sie die Ereignisbeobachter sales_order_payment_save_after oder checkout_onepage_controller_success_action , um dem Tresor ein Token hinzuzufügen ? Gibt es ein gutes Beispiel?
Sreejith Sasidharan
@Yogesh: Funktioniert die Magento_Vault-Funktion mit einer benutzerdefinierten Zahlungsmethode? oder es gibt Einschränkungen wie Braintree & Paypal.
Balwant Singh