Viewing file: AbstractResponse.php (5.79 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Abstract Response */
namespace Omnipay\Common\Message;
use Omnipay\Common\Exception\RuntimeException; use Symfony\Component\HttpFoundation\RedirectResponse as HttpRedirectResponse; use Symfony\Component\HttpFoundation\Response as HttpResponse;
/** * Abstract Response * * This abstract class implements ResponseInterface and defines a basic * set of functions that all Omnipay Requests are intended to include. * * Objects of this class or a subclass are usually created in the Request * object (subclass of AbstractRequest) as the return parameters from the * send() function. * * Example -- validating and sending a request: * * <code> * $myResponse = $myRequest->send(); * // now do something with the $myResponse object, test for success, etc. * </code> * */ abstract class AbstractResponse implements ResponseInterface {
/** * The embodied request object. * * @var RequestInterface */ protected $request;
/** * The data contained in the response. * * @var mixed */ protected $data;
/** * Constructor * * @param RequestInterface $request the initiating request. * @param mixed $data */ public function __construct(RequestInterface $request, $data) { $this->request = $request; $this->data = $data; }
/** * Get the initiating request object. * * @return RequestInterface */ public function getRequest() { return $this->request; }
/** * Is the response successful? * * @return boolean */ public function isPending() { return false; }
/** * Does the response require a redirect? * * @return boolean */ public function isRedirect() { return false; }
/** * Is the response a transparent redirect? * * @return boolean */ public function isTransparentRedirect() { return false; }
/** * Is the transaction cancelled by the user? * * @return boolean */ public function isCancelled() { return false; }
/** * Get the response data. * * @return mixed */ public function getData() { return $this->data; }
/** * Response Message * * @return null|string A response message from the payment gateway */ public function getMessage() { return null; }
/** * Response code * * @return null|string A response code from the payment gateway */ public function getCode() { return null; }
/** * Gateway Reference * * @return null|string A reference provided by the gateway to represent this transaction */ public function getTransactionReference() { return null; }
/** * Get the transaction ID as generated by the merchant website. * * @return string */ public function getTransactionId() { return null; }
/** * Gets the redirect target url. * * @return string */ public function getRedirectUrl() { return null; }
/** * Get the required redirect method (either GET or POST). * * @return string */ public function getRedirectMethod() { return 'GET'; }
/** * Gets the redirect form data array, if the redirect method is POST. * * @return array */ public function getRedirectData() { return []; }
/** * Automatically perform any required redirect * * This method is meant to be a helper for simple scenarios. If you want to customize the * redirection page, just call the getRedirectUrl() and getRedirectData() methods directly. * * @return void */ public function redirect() { $this->getRedirectResponse()->send(); }
/** * @return HttpRedirectResponse|HttpResponse */ public function getRedirectResponse() { $this->validateRedirect();
if ('GET' === $this->getRedirectMethod()) { return new HttpRedirectResponse($this->getRedirectUrl()); }
$hiddenFields = ''; foreach ($this->getRedirectData() as $key => $value) { $hiddenFields .= sprintf( '<input type="hidden" name="%1$s" value="%2$s" />', htmlentities($key, ENT_QUOTES, 'UTF-8', false), htmlentities($value, ENT_QUOTES, 'UTF-8', false) )."\n"; }
$output = '<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Redirecting...</title> </head> <body onload="document.forms[0].submit();"> <form action="%1$s" method="post"> <p>Redirecting to payment page...</p> <p> %2$s <input type="submit" value="Continue" /> </p> </form> </body> </html>'; $output = sprintf( $output, htmlentities($this->getRedirectUrl(), ENT_QUOTES, 'UTF-8', false), $hiddenFields );
return new HttpResponse($output); }
/** * Validate that the current Response is a valid redirect. * * @return void */ protected function validateRedirect() { if (!$this instanceof RedirectResponseInterface || !$this->isRedirect()) { throw new RuntimeException('This response does not support redirection.'); }
if (empty($this->getRedirectUrl())) { throw new RuntimeException('The given redirectUrl cannot be empty.'); }
if (!in_array($this->getRedirectMethod(), ['GET', 'POST'])) { throw new RuntimeException('Invalid redirect method "'.$this->getRedirectMethod().'".'); } } }
|