magento rediriger la caisse de paiement à une 3ème partie de la passerelle
Salut Les Gars
J'essaie de mettre en place mon nouveau mode de paiement de son travail très bien. Mais Mon exigence est un peu différent. J'ai besoin de rediriger l'utilisateur pour la passerelle de paiement la page. C'est de cette façon que je suis en train de mettre en œuvre
Lorsque l'utilisateur clique sur Commander mon Namespace_Bank_Model_Payment >> d'autoriser méthode est appelée. Ma passerelle Dit d'envoyer la première demande, compte tenu de la passerelle envoyer une URL & le Paiement de l'id. Sur cette Url, l'utilisateur doit être redirigé Où le client a réellement fait le paiement. J'ai deux actions dans le Contrôleur de succès & erreur pour gérer la réponse finale.
Que, ce code est appelé dans une requête ajax, je ne peux pas rediriger l'utilisateur vers un autre site web. Quelqu'un peut-il me guider comment l'accomplir?
Merci beaucoup à l'avance
Hey nick grâce,
Voici mon code, & j'Ai mis en œuvre getOrderPlaceRedirectUrl()
méthode.
voici ma classe::
<?php
class Namespace_Hdfc_Model_Payment extends Mage_Payment_Model_Method_Abstract
{
protected $_isGateway = true;
protected $_canAuthorize = true;
protected $_canUseCheckout = true;
protected $_code = "hdfc";
/**
* Order instance
*/
protected $_order;
protected $_config;
protected $_payment;
protected $_redirectUrl;
/**
* @return Mage_Checkout_Model_Session
*/
protected function _getCheckout()
{
return Mage::getSingleton('checkout/session');
}
/**
* Return order instance loaded by increment id'
*
* @return Mage_Sales_Model_Order
*/
protected function _getOrder()
{
return $this->_order;
}
/**
* Return HDFC config instance
*
*/
public function getConfig()
{
if(empty($this->_config))
$this->_config = Mage::getModel('hdfc/config');
return $this->_config;
}
public function authorize(Varien_Object $payment, $amount)
{
if (empty($this->_order))
$this->_order = $payment->getOrder();
if (empty($this->_payment))
$this->_payment = $payment;
$orderId = $payment->getOrder()->getIncrementId();
$order = $this->_getOrder();
$billingAddress = $order->getBillingAddress();
$tm = Mage::getModel('hdfc/hdfc');
$qstr = $this->getQueryString();
//adding amount
$qstr .= '&amt='.$amount;
//echo 'obj details:';
//print_r(get_class_methods(get_class($billingAddress)));
//adding UDFs
$qstr .= '&udf1='.$order->getCustomerEmail();
$qstr .= '&udf2='.str_replace(".", '', $billingAddress->getName() );
$qstr .= '&udf3='.str_replace("\n", ' ', $billingAddress->getStreetFull());
$qstr .= '&udf4='.$billingAddress->getCity();
$qstr .= '&udf5='.$billingAddress->getCountry();
$qstr .= '&trackid='.$orderId;
//saving transaction into database;
$tm->setOrderId($orderId);
$tm->setAction(1);
$tm->setAmount($amount);
$tm->setTransactionAt( now() );
$tm->setCustomerEmail($order->getCustomerEmail());
$tm->setCustomerName($billingAddress->getName());
$tm->setCustomerAddress($billingAddress->getStreetFull());
$tm->setCustomerCity($billingAddress->getCity());
$tm->setCustomerCountry($billingAddress->getCountry());
$tm->setTempStatus('INITIAL REQUEST SENT');
$tm->save();
Mage::Log("\n\n queryString = $qstr");
//posting to server
try{
$response = $this->_initiateRequest($qstr);
//if response has error;
if($er = strpos($response,"!ERROR!") )
{
$tm->setErrorDesc( $response );
$tm->setTempStatus('TRANSACTION FAILED WHILE INITIAL REQUEST RESPONSE');
$tm->save();
$this->_getCheckout()->addError( $response );
return false;
}
$i = strpos($response,":");
$paymentId = substr($response, 0, $i);
$paymentPage = substr( $response, $i + 1);
$tm->setPaymentId($paymentId);
$tm->setPaymentPage($paymentPage);
$tm->setTempStatus('REDIRECTING TO PAYMENT GATEWAY');
$tm->save();
//prepare url for redirection & redirect it to gateway
$rurl = $paymentPage . '?PaymentID=' . $paymentId;
Mage::Log("url to redicts:: $rurl");
$this->_redirectUrl = $rurl; //saving redirect rl in object
//header("Location: $rurl"); //this is where I am trying to redirect as it is an ajax call so it won't work
//exit;
}
catch (Exception $e)
{
Mage::throwException($e->getMessage());
}
}
public function getOrderPlaceRedirectUrl()
{
Mage::Log('returning redirect url:: ' . $this->_redirectUrl ); //not in log
return $this->_redirectUrl;
}
}
Maintenant getOrderPlaceRedirectUrl()
son être appelé. Je peux voir le Mage::message de journal. mais l'url n'est pas là. Je veux dire la valeur de $this->_redirectUrl
n'est pas là au moment de l'appel de fonction.
Et encore une chose, je ne suis pas l'intention de montrer à la clientèle toute la page comme "Vous êtes redirigé".
OriginalL'auteur SAM | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
Magento prend en charge ce type de passerelle de paiement standard et prend directement en charge la redirection de l'utilisateur vers un site tiers pour le paiement.
Dans votre modèle de paiement, celle qui s'étend
Mage_Payment_Model_Method_Abstract
, vous aurez besoin de mettre en œuvre la méthode:Généralement vous rediriger l'utilisateur vers une page de votre site,
/mymodule/payment/redirect
par exemple, puis de gérer la redirection de la logique dans l'action du régulateur. Cela garantit que votre paiement modèle propre et apatrides, tout en permettant à certains une sorte de "Vous êtes maintenant être transféré à la passerelle de paiement" message.Enregistrer tout ce que vous devez décider où rediriger dans une variable de session, de nouveau généralement
Mage::getSingleton('checkout/session')
.Magento ont une assez solide, si malpropre, la mise en œuvre de cette norme Paypal. Vous pouvez les extraire comment ils le font dans
app/code/core/Mage/Paypal/{Model/Standard.php,controllers/StandardController.php}
.Je me demande si Magento passe autour du même modèle de paiement de l'instance. Si ce n'est pas, alors vous seriez en appelant une nouvelle instanciation de l'objet pour obtenir la
getOrderPlaceRedirectUrl
, qui ne contient pas la variable de classe que vous définissez dans leauthorize
méthode. Essayez de stocker l'URL de redirection dans une session, comme je l'ai suggéré, et à l'aide de la valeur de session pour la redirection.ouais je l'ai eu à travailler en stockant dans la session param. & puis de la récupération à partir de la session. Son travail maintenant. Peut-être que j'ai mis en œuvre la plus simple de la nouvelle passerelle de paiement 🙂
Donc, Magento doit avoir été l'appel d'une nouvelle instance du modèle de paiement, puis. Intéressant. N'hésitez pas à accepter ma réponse 😉
OriginalL'auteur Nick
Bonjour les gars, voici la solution.
En autoriser la fonction (voir mon code dans la réponse ci-dessus) changement
par
Mage::getSingleton('customer/session')->setRedirectUrl($rurl);
& en fonction
getOrderPlaceRedirectUrl()
changement commeaprès que le code doit être en cours d'exécution & u vas être redirigé vers la troisième partie de la passerelle
OriginalL'auteur SAM