Hi Arvydas,

Sorry, one more question :)

In the code below, you suggested overriding the order::_getNextStep method and performing the redirection to alertpay here. However, isn't this a little dangerous, because the order status is set to 'OK' before order::_getNextStep method is invoked? So IMO, if the payment transaction fails for any reason, the order status will be OK even though the payment is not made.

Please advise, it is possible I have misunderstood the execution chain.

Vikram

Arvydas wrote:
--------------------------------------------------
1. forget oxPaymentGateway::executePayment() - in your case you don't need it at all;
2. make a module for order with these:

<?php
   // set payment method as active
   protected $_blActive = true;

   // set Alertpay merchant name
   protected $loginId = 'XXX';

   // set Alertpay gateway URL
   protected $gatewayUrl = 'https://www.alertpay.com/PayProcess.aspx';

   protected function _getNextStep( $iSuccess )
   {
       // defining that everything was fine
       if ( is_numeric( $iSuccess ) && $iSuccess > 0 && $iSuccess < 2 )
           $oOrder = oxNew( 'oxorder' );
if ( $oOrder->load( $this->getOrderId() ) && $oOrder->oxorder__oxpaymenttype->value == 'alertpay' ) {
               // your code goes here
               $oCur = $this->getConfig()->getActShopCurrencyObject();

               $formData = array(
                   'ap_purchasetype'   => 'item-goods',
                   'ap_merchant'       => $this->loginId,
                   'ap_currency'       => $oCur->name,
                   'ap_quantity'       => '1',
'ap_returnurl' => 'http://oxid.localhost/index.php?cl=order&fnc=processalertPay&sid=' . $this->getSession()->getId(),
                   'ap_itemname'       => 'Shopping Cart',
'ap_description' => $this->getConfig()->getActiveShop()->oxshops__oxname->value,
                   'ap_amount'         => $dAmount,
'ap_cancelurl' => 'http://oxid.localhost/index.php?cl=payment&payerror=4&sid=' . $this->getSession()->getId(),
                   'apc_1'             => $this->getSession()->getId(),
                 );

oxUtils::getInstance()->redirect( $this->gatewayUrl . http_build_query( $formData ) );
           }
       }

if ( $iSuccess === 'AlertPayOK' && $oOrder->load( $this->getOrderId() ) ) {
           // you load order here and set its status to OK
$oOrder->oxorder__oxtransstatus = new oxField( "PAYMENT_OK" );

           //saving
           $oOrder->save();

           // check code below
           // means emailing succeded
           $iSuccess = $oOrder->sendAlertPayEmails();

       } elseif ( $iSuccess === 'AlertPayERROR' ) {
// you set this code to move user back to payment selection page // or you can simply return NULL and user will stay in order confirmation page
           $iSuccess = 2;

       }

       return parent::_getNextStep( $iSuccess );
   }

   public function processAlertPay()
   {
// this function will be called when ap_returnurl will be executed // so now you can check response parameters and do all other you need

       // on success you set
       $iSuccess = 'AlertPayOK';

       // on error you set
       $iSuccess = 'AlertPayERROR';

       // set

       // you will be redirected now where needed..
       return $this->_getNextStep( $iSuccess )
   }

   public function getOrderId()
   {
       return oxSession::getVar( 'sess_challenge' );
   }
?>

3. additionally you need to handle email sending - oxOrder::_sendOrderByEmail(), and send emails only when everything went file:
<?php
protected function _sendOrderByEmail( $oUser = null, $oBasket = null, $oPayment = null )
   {
       if ( $this->oxorder__oxpaymenttype->value != 'alertpay') {
return parent::_sendOrderByEmail( $oUser, $oBasket, $oPayment );
       }

       return 1;
   }

   public function sendAlertPayEmails()
   {
       ...
return $this->_sendOrderByEmail( $oUser = null, $oBasket = null, $oPayment = null )
   }

4. I did not check the code, probably errors contain.. but the idea should be clear! ;)

where should I send my paypal account data? :D
_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

_______________________________________________
dev-general mailing list
[email protected]
http://dir.gmane.org/gmane.comp.php.oxid.general

Reply via email to