Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

posting to endpoint to get the redirect url before purchase

I'm trying to create a custom omnipay driver for a local gateway called creditguard. For this gateway you need to post the data to the endpoint and get back a redirect url for the payment form.

My question is how do you post and get the response before making the purchase?

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

    }
}

Not sure how to get the response's mpiHostedPageUrl so I can redirect to the correct url.

like image 989
nirz Avatar asked Aug 31 '17 10:08

nirz


People also ask

What are the guidelines for redirecting an url?

1 Redirect URIs must begin with the scheme https. ... 2 Redirect URIs are case-sensitive and must match the case of the URL path of your running application. ... 3 Redirect URIs not configured with a path segment are returned with a trailing slash (' / ') in the response. ... More items...

What are SharePoint site redirects and how do they work?

As part of changing a SharePoint site address, moving a site to a different geo location, or swapping a site, we automatically create redirects to ensure that links pointing to the prior URL continue to work. These redirects are sites that use a special site template at the prior site URL.

How do eCommerce redirects work?

Let’s explore how eCommerce redirects work, when you should use them, and how you can set them up on your site. A URL redirect does exactly what it sounds like: when you enter a URL into your browser or click on a link, it directs you from your initial location to a different destination. The way redirects actually work is a little more complex.

Why do I get redirects when I change the site address?

Thank you. As part of changing a SharePoint site address, moving a site to a different geo location, or swapping a site, we automatically create redirects to ensure that links pointing to the prior URL continue to work. These redirects are sites that use a special site template at the prior site URL.


1 Answers

Assuming this is the payment gateway documentation in question.

You just go ahead and make the transaction request, the customer won't be charged as they'll have to authorise it on the next page by entering in their payment details.

The response of that transaction request contains an element mpiHostedPageUrl, which you can see on page 13 of that document, that contains the URL you need to get from the response to provide the redirect.

like image 156
Adam Lavin Avatar answered Sep 21 '22 13:09

Adam Lavin