2017-08-31 97 views
11

我正在嘗試爲名爲creditguard的本地網關創建自定義的omnipay驅動程序。 對於此網關,您需要將數據發佈到端點並獲取付款表單的重定向網址。在購買前發佈到端點以獲取重定向url

我的問題是如何在購買前發佈並獲得響應?

編輯:

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 []; 

    } 
} 

不知道如何得到響應的mpiHostedPageU所以我可以重定向到正確的網址。

+0

你的問題不是很清楚,你能否多描述一下? – 16ctt1x

+0

我想了解的是如何發出無重定向的發佈請求,獲取響應數據,然後重定向到付款表單。我正在嘗試使用Omnipay - http://omnipay.thephpleague.com/。 – nirz

回答

-1

HATEOAS(超媒體作爲應用程序狀態引擎)是一種組織REST應用程序響應的方法。 在HATEOAS世界中,響應JSON可能包含客戶端可能需要的所有URL。例如,在github API中,響應包含用於訪問存儲庫,用戶,請求的URL ...

因此,我建議您使用第一個POST請求調用網關,然後根據JSON響應提供將代表重定向的URL。

+0

謝謝,但我特別要求與omnipay做這個 - http://omnipay.thephpleague.com/ – nirz

3

假設this是有問題的支付網關的文檔。

您只需繼續並提交交易請求,客戶將不會被收費,因爲他們必須輸入付款詳細信息才能在下一頁上對其進行授權。

該事務請求的響應包含一個元素mpiHostedPageUrl,您可以在該文檔的第13頁上看到該元素,其中包含您需要從響應中獲取以提供重定向的URL。

+0

謝謝亞當,這是正確的文檔。 mpiHostedPageUrl確實是我在購買請求後試圖找到的東西,我只是不明白如何獲得它以及在自定義omnipay驅動程序的哪個階段 – nirz

+0

在這種情況下,您需要提供代碼以顯示在消費者的反應方面。 –

+0

在原始文章中添加了代碼 – nirz