2017-08-31 3 views
11

Ich versuche, einen benutzerdefinierten Omnipay-Treiber für ein lokales Gateway namens Creditguard zu erstellen. Für dieses Gateway müssen Sie die Daten an den Endpunkt senden und eine Weiterleitungs-URL für das Zahlungsformular zurückgeben.Buchung an den Endpunkt, um die Umleitungs-URL vor dem Kauf zu erhalten

Meine Frage ist, wie posten Sie und erhalten Sie die Antwort, bevor Sie den Kauf tätigen?

Edit:

gateway.php

class Gateway extends AbstractGateway 
{ 
    public function getName() 
    { 
     return 'Creditguard'; 
    } 

    public function getDefaultParameters() 
    { 
     return array(); 

    } 

    public function getEndpoint() 
    { 
     return 'https://verifonetest.creditguard.co.il/xpo/Relay'; 
    } 



    public function purchase(array $parameters = array()) 
    { 
     return $this->createRequest('\Nirz\Creditguard\Message\PurchaseRequest', $parameters); 

    } 

    public function completePurchase(array $parameters = array()) 
    { 
     return $this->createRequest('\Nirz\Creditguard\Message\CompletePurchaseRequest', $parameters); 
    } 

} 

PurchaseRequest.php

class PurchaseRequest extends AbstractRequest 
{ 
    protected $liveEndpoint = 'https://verifonetest.creditguard.co.il/xpo/Relay'; 
    protected $testEndpoint = 'https://verifonetest.creditguard.co.il/xpo/Relay'; 


    public function getData() 
    { 
     $this->validate('amount'); 

     // Either the nodifyUrl or the returnUrl can be provided. 
     // The returnUrl is deprecated, as strictly this is a notifyUrl. 
     if (!$this->getNotifyUrl()) { 
      $this->validate('returnUrl'); 
     } 

     $data = array(); 
     $data['user'] = 'user'; 
     $data['password'] = 'password'; 
     $data['tid'] = '11111111'; 
     $data['mid'] = '111111'; 
     $data['amount'] = '20000'; 
     $data['int_in'] = '<ashrait> 
          <request> 
          <version>1000</version> 
          <language>HEB</language> 
          <dateTime></dateTime> 
          <command>doDeal</command> 
          <doDeal> 
           <terminalNumber>'.$data['tid'].'</terminalNumber> 
           <mainTerminalNumber/> 
           <cardNo>CGMPI</cardNo> 
           <total>'.$data['amount'].'</total> 
           <transactionType>Debit</transactionType> 
           <creditType>RegularCredit</creditType> 
           <currency>ILS</currency> 
           <transactionCode>Phone</transactionCode> 
           <authNumber/> 
           <numberOfPayments/> 
           <firstPayment/> 
           <periodicalPayment/> 
           <validation>TxnSetup</validation> 
           <dealerNumber/> 
           <user>'. $data['user'] .'</user> 
           <mid>'.$data['mid'].'</mid> 
           <uniqueid>'.time().rand(100,1000).'</uniqueid> 
           <mpiValidation>autoComm</mpiValidation> 
           <email>[email protected]</email> 
           <clientIP/> 
           <customerData> 
            <userData1/> 
            <userData2/> 
            <userData3/> 
            <userData4/> 
            <userData5/> 
            <userData6/> 
            <userData7/> 
            <userData8/> 
            <userData9/> 
            <userData10/> 
           </customerData> 
          </doDeal> 
          </request> 
          </ashrait>'; 

     return $data; 
    } 

    public function sendData($data) 
    { 
     // $httpResponse = $this->httpClient->post($this->getEndpoint(), null, $data); 
     return $this->response = new PurchaseResponse($this, $data); 
    } 

    public function getEndpoint() 
    { 
     return $this->getTestMode() ? $this->testEndpoint : $this->liveEndpoint; 
    } 
} 

PurchaseResponse.php

class PurchaseResponse extends AbstractResponse implements RedirectResponseInterface 
{ 
    public function isSuccessful() 
    { 
     return false; 
    } 

    public function isRedirect() 
    { 
     return true; 
    } 

    public function getRedirectUrl() 
    { 
     // return $this->getRequest()->getEndpoint().'?'.http_build_query($this->data); 
     return $this->getRequest()->data['mpiHostedPageUrl']; 
     // return isset($this->data['mpiHostedPageUrl']) ? $this->data['mpiHostedPageUrl'] : null; 
    } 

    public function getRedirectMethod() 
    { 
     return 'GET'; 
    } 

    public function getRedirectData() 
    { 
     return []; 

    } 
} 

nicht sicher, wie die mpiHostedPageU Antwort zu erhalten rl so kann ich auf die richtige URL umleiten.

+0

Ihre Frage ist nicht sehr klar, können Sie bitte mehr beschreiben? – 16ctt1x

+0

Was ich versuche zu verstehen ist, wie man eine Post-Anfrage ohne Umleitung macht, die Antwortdaten erhält und dann zum Zahlungsformular umleitet. Ich versuche Omnipay zu benutzen - http://omnipay.thephpleague.com/ dafür. – nirz

Antwort

-1

HATEOAS (Hypermedia als die Engine von Application State) ist eine Möglichkeit, die Antwort für REST-Anwendung zu organisieren. In der Welt von HATEOAS kann der Antwort-JSON alle URLs enthalten, die der Client möglicherweise benötigt. Beispiel, in github API enthält die Antwort URL für den Zugriff auf Repository, Benutzer, Pull-Anforderung ...

Also, ich empfehle Ihnen, das Gateway mit der ersten POST-Anfrage aufzurufen und dann, entsprechend der JSON-Antwort, anzurufen zur angegebenen URL, die die Umleitung darstellt.

+0

Danke, aber ich frage speziell darüber, dies mit Omnipay zu tun - http://omnipay.thephpleague.com/ – nirz

3

this Unter der Annahme ist die Payment-Gateway-Dokumentation in Frage.

Sie einfach weitermachen und die Transaktionsanfrage stellen, der Kunde wird nicht belastet, da sie es auf der nächsten Seite autorisieren müssen, indem sie ihre Zahlungsdetails eingeben.

Die Antwort dieser Transaktionsanforderung enthält ein Element mpiHostedPageUrl, das Sie auf Seite 13 dieses Dokuments finden, das die URL enthält, die Sie von der Antwort erhalten müssen, um die Umleitung bereitzustellen.

+0

Danke Adam, das ist die richtige Dokumentation. mpiHostedPageUrl ist in der Tat, was ich versuche, nach der Kaufanfrage zu finden, ich verstehe einfach nicht, wie man es bekommt und in welcher Phase in einem benutzerdefinierten Omnipay-Treiber – nirz

+0

In diesem Fall müssen Sie Ihren Code zur Verfügung stellen wo Sie sind in Bezug auf die Reaktion zu konsumieren. –

+0

Code zum ursprünglichen Beitrag hinzugefügt – nirz

Verwandte Themen