/**
* React to DSP response triggered by {@link processPayment()}.
*/
public function processResponse()
{
if (preg_match('/^PXHOST/i', $_SERVER['HTTP_USER_AGENT'])) {
$dpsDirectlyConnecting = 1;
}
//$pxaccess = new PxAccess($PxAccess_Url, $PxAccess_Userid, $PxAccess_Key, $Mac_Key);
$pxpay = new PxPay(DPSHostedPayment::$pxPay_Url, DPSHostedPayment::get_px_pay_userid(), DPSHostedPayment::get_px_pay_key());
$enc_hex = $_REQUEST["result"];
$rsp = $pxpay->getResponse($enc_hex);
if (isset($dpsDirectlyConnecting) && $dpsDirectlyConnecting) {
// DPS Service connecting directly
$success = $rsp->getSuccess();
# =1 when request succeeds
echo $success == '1' ? "success" : "failure";
} else {
// Human visitor
$paymentID = $rsp->getTxnId();
$SQL_paymentID = (int) $paymentID;
$payment = DataObject::get_one('DPSHostedPayment', "`TxnID` = '{$SQL_paymentID}'");
if (!$payment) {
// @todo more specific error messages
return array('RedirectLink' => AccountPage::find_link());
}
$success = $rsp->getSuccess();
if ($success == '1') {
// @todo Use AmountSettlement for amount setting?
$payment->TxnRef = $rsp->getDpsTxnRef();
$payment->Status = "Success";
$payment->AuthorizationCode = $rsp->getAuthCode();
} else {
$payment->Message = $rsp->getResponseText();
$payment->Status = "Failure";
}
$payment->write();
//TODO: this needs to be generalised in Payment??
$redirectURL = $payment->PaidObject() && $payment->PaidObject()->Link() ? $payment->PaidObject()->Link() : 'home';
Director::redirect($redirectURL);
return null;
}
}