Hi Arvydas,

Wow!

Thank you for the incredibly detailed response. I'll try this and let you know how it works.

I might feature this in an article for a Web site so I'll make sure that you get the credit for the solution :)

Many thanks,

Vikram

Arvydas wrote:
Here is what you need:

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

Reply via email to