public function process($data)
 {
     //Construct the request
     $request = new PxPayRequest();
     $request->setAmountInput($data['Amount']);
     $request->setCurrencyInput($data['Currency']);
     //Set PxPay properties
     if (isset($data['Reference'])) {
         $request->setMerchantReference($data['Reference']);
     }
     if (isset($data['EmailAddress'])) {
         $request->setEmailAddress($data['EmailAddress']);
     }
     $request->setUrlFail($this->cancelURL);
     $request->setUrlSuccess($this->returnURL);
     //Generate a unique identifier for the transaction
     $request->setTxnId(uniqid('ID'));
     $request->setTxnType('Purchase');
     //Get encrypted URL from DPS to redirect the user to
     $request_string = $this->makeProcessRequest($request, $data);
     //Obtain output XML
     $response = new MifMessage($request_string);
     //Parse output XML
     $url = $response->get_element_text('URI');
     $valid = $response->get_attribute('valid');
     //If this is a fail or incomplete (cannot reach gateway) then mark payment accordingly and redirect to payment
     if ($valid && is_numeric($valid) && $valid == 1) {
         //Redirect to payment page
         Controller::curr()->redirect($url);
     } else {
         if (is_numeric($valid) && $valid == 0) {
             return new PaymentGateway_Failure();
         } else {
             return new PaymentGateway_Incomplete();
         }
     }
 }
 /**
  * Executed in form submission *before* anything
  * goes out to DPS.
  */
 public function processPayment($data, $form)
 {
     // generate a unique transaction ID
     $this->TxnID = DPSHostedPayment::generate_txn_id();
     $this->write();
     // generate request from thirdparty pxpayment classes
     $request = $this->prepareRequest($data);
     // decorate request (if necessary)
     $this->extend('prepareRequest', $request);
     // set currency
     $this->Amount->Currency = $request->getInputCurrency();
     // submit payment request to get the URL for redirection
     $pxpay = new PxPay(self::$pxPay_Url, self::$pxPay_Userid, self::$pxPay_Key);
     $request_string = $pxpay->makeRequest($request);
     $response = new MifMessage($request_string);
     $url = $response->get_element_text("URI");
     $valid = $response->get_attribute("valid");
     // set status to pending
     if ($valid) {
         $this->Status = 'Pending';
         $this->write();
     }
     //provide iframe with payment gateway form in it
     if (self::$use_iframe) {
         return new Payment_Processing(array('Content' => "<iframe src =\"{$url}\" width=\"100%\" height=\"380\" frameborder=\"0\" name=\"payframe\"><a href=\"{$url}\">" . _t('DPSHostedPayment.CLICKHERE', "click here to pay") . "</a></iframe>"));
     }
     Director::redirect($url);
     return new Payment_Processing();
 }
function redirect_form()
{
    global $pxpay;
    $request = new PxPayRequest();
    $http_host = getenv("HTTP_HOST");
    $request_uri = getenv("SCRIPT_NAME");
    $server_url = "http://{$http_host}";
    #$script_url  = "$server_url/$request_uri"; //using this code before PHP version 4.3.4
    #$script_url  = "$server_url$request_uri"; //Using this code after PHP version 4.3.4
    $script_url = version_compare(PHP_VERSION, "4.3.4", ">=") ? "{$server_url}{$request_uri}" : "{$server_url}/{$request_uri}";
    # the following variables are read from the form
    $Quantity = $_REQUEST["Quantity"];
    $MerchantReference = $_REQUEST["Reference"];
    $Address1 = $_REQUEST["Address1"];
    $Address2 = $_REQUEST["Address2"];
    $Address3 = $_REQUEST["Address3"];
    #Calculate AmountInput
    $AmountInput = 19.95 * $Quantity;
    #Generate a unique identifier for the transaction
    $TxnId = uniqid("ID");
    #Set PxPay properties
    $request->setMerchantReference($MerchantReference);
    $request->setAmountInput($AmountInput);
    $request->setTxnData1($Address1);
    $request->setTxnData2($Address2);
    $request->setTxnData3($Address3);
    $request->setTxnType("Purchase");
    $request->setCurrencyInput("NZD");
    $request->setEmailAddress("*****@*****.**");
    $request->setUrlFail($script_url);
    # can be a dedicated failure page
    $request->setUrlSuccess($script_url);
    # can be a dedicated success page
    $request->setTxnId($TxnId);
    #The following properties are not used in this case
    # $request->setEnableAddBillCard($EnableAddBillCard);
    # $request->setBillingId($BillingId);
    # $request->setOpt($Opt);
    #Call makeRequest function to obtain input XML
    $request_string = $pxpay->makeRequest($request);
    #Obtain output XML
    $response = new MifMessage($request_string);
    #Parse output XML
    $url = $response->get_element_text("URI");
    $valid = $response->get_attribute("valid");
    #Redirect to payment page
    header("Location: " . $url);
}
 /**
  * Executed in form submission *before* anything
  * goes out to DPS.
  */
 public function processPayment($data, $form)
 {
     // generate a unique transaction ID
     $this->TxnID = DPSHostedPayment::generate_txn_id();
     $this->write();
     // generate request from thirdparty pxpayment classes
     $request = $this->prepareRequest($data);
     // decorate request (if necessary)
     $this->extend('prepareRequest', $request);
     // set currency
     $this->Currency = $request->getInputCurrency();
     // submit payment request to get the URL for redirection
     $pxpay = new PxPay(self::$pxPay_Url, self::$pxPay_Userid, self::$pxPay_Key);
     $request_string = $pxpay->makeRequest($request);
     $response = new MifMessage($request_string);
     $valid = $response->get_attribute("valid");
     // set status to pending
     if ($valid) {
         $this->Status = 'Pending';
         $this->write();
     }
     // MifMessage was clobbering ampersands on some environments; SimpleXMLElement is more robust
     $xml = new SimpleXMLElement($request_string);
     $urls = $xml->xpath('//URI');
     $url = $urls[0] . '';
     header("Location: " . $url);
     die;
 }
 function doDPSHostedPayment($inputs, $payment)
 {
     $request = new PxPayRequest();
     foreach ($inputs as $element => $value) {
         $funcName = 'set' . $element;
         $request->{$funcName}($value);
     }
     // submit payment request to get the URL for redirection
     $pxpay = new PxPay(self::$pxPay_Url, self::$pxPay_Userid, self::$pxPay_Key);
     $request_string = $pxpay->makeRequest($request);
     $response = new MifMessage($request_string);
     $valid = $response->get_attribute("valid");
     if ($valid) {
         // MifMessage was clobbering ampersands on some environments; SimpleXMLElement is more robust
         $xml = new SimpleXMLElement($request_string);
         $urls = $xml->xpath('//URI');
         $url = $urls[0] . '';
         DB::getConn()->transactionEnd();
         if (self::$mode == "Unit_Test_Only") {
             return $url;
         } else {
             header("Location: " . $url);
             die;
         }
     } else {
         $payment->Message = "Invalid Request String";
         $payment->write();
     }
 }