Ah, I've just learnt how to ident plain text messages :) Anyway, I didn't check the code, but obviously you are accessing some order processing method twice, when it is supposed to be accessed only once. Must be you have to redirect to Alterpay somewhere before this place. Or is it a bug?
Regards Tomas Liubinas > -----Original Message----- > From: [email protected] [mailto:dev-general- > [email protected]] On Behalf Of Vikram Vaswani > Sent: Thursday, June 18, 2009 3:34 PM > To: [email protected] > Subject: Re: [oxid-dev-general] [Fwd: Re: Urgent question onpaymentgateway > integration] > > Hi Tomas, > > Alertpay is a third-party provider and they host their own payment > process. So it is necessary to redirect to their Web site with certain > parameters. On their site, the user can create an account and then enter > CC details to make a payment. Once the payment process is complete, > Alertpay can redirect back to one of two URLs that we have to provide > (callback): a URL for payment failure and a URL for payment success. > > So the user authorization and payment processing all happens independent > of OXID. > > What I am doing is, once the user clicks 'submit order' on the final > order summary page in OXID, I have written an executePayment() method > that sends a redirect header to the client with the necessary alertpay > URL. However, because the processing happens on a third-party site, I > have no visibility of whether it succeeds or fails - I only know that > one of the two URLs will be called back once the payment process is > complete. > > As per my script, I have set these two URLs for callback: > > Failure: http://oxid/index.php?cl=payment&payerror=4 > Success: http://oxid/index.php?cl=thankyou > > Above works fine, except when the payment fails and the user comes back > to OXID. In this case, if the user resubmits the order, then instead of > calling executePayment again and going back to alertpay for a second > try, OXID bypasses the executePayment method and straight away displays > the order confirmation page. This is the problem I am having - I cannot > understand why this is happening. > > I am not executing finalizeOrder() at all. the only code I have written > is that shown below ie. executePayment() method. > > My code is below for your reference. Can you let me know what I am doing > wrong? > > Vikram > > > > Tomas Liubinas wrote: > > Hi Vikram, > > > > Developers here were pretty busy with the final touches to eShop 4.1.3 > release. First of all I see some problems with your order workflow. As far > as I can see, on successful payment you totally miss cl=order step. I am > not sure how about alter pay works, but isn't it something like other > payment methods which works in 2 steps. 1st step - user authorization. 2nd > - final processing. This way you can first identify user and to actually > charge him on the last step. And in any case finalizeOrder() should be > executed only once. > > > > Regards > > Tomas Liubinas > > > > -----Original Message----- > > From: [email protected] [mailto:dev-general- > [email protected]] On Behalf Of Vikram Vaswani > > Sent: Thursday, June 18, 2009 9:37 AM > > To: [email protected] > > Subject: [oxid-dev-general] [Fwd: Re: Urgent question onpaymentgateway > integration] > > > > Hi all > > > > I haven't heard back from anyone on my message re: payment gateway > > redirection posted some days ago? Could someone with experience in this > > area help? TIA. > > > > Description as below: > > > > 1 When the user selects alertpay as the payment method and submits the > > order, I am redirecting the user to the alertpay site. > > > > 2 When the payment is successful, the user is redirected back to > > http://oxiddomain/index.php?cl=thankyou. > > > > 3 When there is a payment failure on alertpay.com, the user is > redirected > > back to http://oxiddomain/index.php?cl=payment&payerror=4. This produces > > the payment method page, with an error saying that 'your payment was > > unsuccessful'. So far this is fine and the behaviour one would expect. > > > > 4 However, if the user again selects Alertpay as the payment method and > > submits the order again, the user is NOT redirected to alertpay. Instead > > the thankyou page appears immediately. This is clearly a problem. On > > debugging, it appears that in this second case, finalizeOrder() is not > > calling executePayment() because of the $blRecalculate flag. So the > order > > controller is somewhere along the line setting this flag. > > > > I'm not sure where or why this is happening, can anyone suggest a > solution? > > > > My payment gateway code is as below: > > > > <?php > > class alertpay_PaymentGateway extends alertpay_PaymentGateway_parent { > > > > // 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'; > > > > public function executePayment($dAmount, &$oOrder) { > > > > if ($oOrder->oxorder__oxpaymenttype->value != 'alertpay') { > > return parent::executePayment($dAmount, $oOrder); > > } > > > > $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=thankyou&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(), > > ); > > > > header('Location:' . $this->gatewayUrl . '?' . > > http_build_query($formData)); > > exit(); > > } > > } > > ?> > > > > -------------------- > > > > Let me know if you can help. Thanks. > > > > Vikram > > > > > > > > > > > > > > > > > > > > > > > > > > Tomas Liubinas wrote: > >> Hi Vikram, > >> > >> I had a quick look and it looks like getTransactionID() is not a > standard eShop method. I assume the error should be somewhere on module > side. Additionally you can check EXCEPTION_LOG.txt file for possible more > information. Changing iDebug constant in confi.inc.php to -1 also could > help in this case. > >> > >> Regards > >> Tomas Liubinas > >> > >> -----Original Message----- > >> From: [email protected] [mailto:dev-general- > [email protected]] On Behalf Of Vikram Vaswani > >> Sent: Monday, June 15, 2009 8:45 PM > >> To: [email protected] > >> Subject: Re: [oxid-dev-general] Urgent question on paymentgateway > integration > >> > >> Hi Tomas and others, > >> > >> Despite many efforts, I'm still not able to get this to work. Here's > >> what I'm doing: > >> > >> 1. In my oxPaymentGateway::executePayment(), I am generating a URL > >> string to alertpay.com and redirecting the user to that site. The URL > >> string is of the form: > >> > >> https://www.alertpay.com/PayProcess.aspx?ap_purchasetype=item-goods& > >> ap_merchant=XXX&ap_currency=GBP&ap_quantity=1 > >> > &ap_returnurl=http%3A%2F%2Fmydomain.com%2Findex.php%3Fcl%3Dthankyou%26sid% > 3Ded2aa7c3716e0943139d2aafee783ad6& > >> ap_itemname=Shopping+Cart&ap_amount=10.19&ap_cancelurl= > >> &apc_1=ed2aa7c3716e0943139d2aafee783ad6 > >> > >> Notice that I am passing the SID as part of the return URL. > >> > >> 2. Now, once the user completes the payment process on alertpay.com, he > >> is redirected back to: > >> > >> > http://mydomain.com/index.php?cl=thankyou&sid=ed2aa7c3716e0943139d2aafee78 > 3ad6 > >> > >> However, this presents the index page with the message 'Function > >> getTransactionID not defined (thankyou)'. > >> > >> Any idea what I'm doing wrong? > >> > >> 3. Can you suggest what should be the URL I should direct to for these > >> two cases: > >> > >> - the user cancels the payment on alertpay.com > >> - the user's payment fails due to incorrect card details > >> > >> Thanks for your help - I'm a bit confused by the above situation so > >> would appreciate your advice. > >> > >> Vikram > >> > >> Tomas Liubinas wrote: > >>> Hi Vicram, > >>> > >>> http://domain/index.php?&cl=thankyou looks ok (index.php?cl=thankyou > to be precise). One of the reasons it redirects to start page could be > empty session basket object. Try not to empty basket in your module. I > aslo would suggest adding sid= param to your url in this case. > >>> > >>> > >>> Regards > >>> Tomas Liubinas > >>> > >>> -----Original Message----- > >>> From: [email protected] [mailto:dev-general- > [email protected]] On Behalf Of Vikram Vaswani > >>> Sent: Monday, June 15, 2009 5:45 PM > >>> To: [email protected] > >>> Cc: Dainius Bigelis > >>> Subject: Re: [oxid-dev-general] Urgent question on paymentgateway > integration > >>> > >>> Hi all > >>> > >>> Another question which I am struggling with. One payment gateway > >>> requires me to forward the user to a separate site where the user can > >>> enter the card information. I have managed to get this to work by > >>> setting up a redirection in the executePayment() method. > >>> > >>> However, the gateway has asked for a "return URL" to which it will > >>> redirect the user once the payment process is complete (whether > >>> successful or not). I guess this return URL should be the 'thank you' > >>> page. I'm not able to figure out how to do this ie. what is the URL I > >>> should specify on the payment site? > >>> > >>> Note: I tried using http://domain/index.php?&cl=thankyou, but that > >>> doesn't work, it simply sends me back to the index page. Any ideas > would > >>> be welcome. > >>> > >>> Vikram > >>> > >>> Arvydas wrote: > >>>> Explanation how everything works when user clicks button on last > order > >>>> step: > >>>> > >>>> 1. Order::execute(): > >>>> - checks if all checkboxes (agb, customer info) were marked; > >>>> - checks if session user is available; > >>>> - creates OxOrder instance; > >>>> > >>>> 2. OxOrder::validateStock(): > >>>> - checks if its allowed to order items stored in basket; > >>>> - if some problems with stock - oxOutOfStockException > >>>> exception is thrown; > >>>> > >>>> 3. OxOrder::finalizeOrder(): > >>>> - copies user data to order (OxOrder::_setUser()); > >>>> - copies basket data to order > (OxOrder::_loadFromBasket()); > >>>> - copies payment info to order (OxOrder::__setPayment()); > >>>> - stores order to db (OxOrder::save()); > >>>> - executes payment gateway (OxOrder::_executePayment()): > >>>> * creates payment gateway instance; > >>>> * executes payment gateway > >>>> (OxPaymentGateway::executePayment()); > >>>> * if gateway execution fails > >>>> (OxPaymentGateway::executePayment() returns FALSE): > >>>> - deletes order (OxOrder::delete()); > >>>> - checks if OxPaymentGateway::getLastError() > returns > >>>> error - if found - returns it; > >>>> - checks if OxPaymentGateway::getLastErrorNo() > >>>> returns error number - if found - returns it; > >>>> - if no error info was found - returns "2"; > >>>> * if gateway execution succeded - returns TRUE; > >>>> - if payment gateway returns something else than TRUE - > stops > >>>> order execution and returns its value; > >>>> - if payment gateway returns TRUE: > >>>> * sets order status to OK > (OxOrder::_setOrderStatus()); > >>>> * updates shop stocks (OxOrder::_updateStock()); > >>>> * substracts wishlists/noticelists > >>>> (OxOrder::_updateWishlist()/OxOrder::_updateNoticeList()); > >>>> * sends order email to user and shop owner > >>>> (OxOrder::_sendOrderByEmail()) and returns email sending state. > >>>> 4. Order::_getNextStep(): > >>>> - takes value returned by OxOrder::finalizeOrder(), so > here > >>>> you can manipulate with value returned by payment > >>>> gateway or email sender. > >>>> Standard values returned by OxOrder::finalizeOrder() > are: > >>>> * 0 - order email sending problems - redirects to > >>>> "thankyou?mailerror=1"; > >>>> * 1 - order email was successfully sent - redirects > to > >>>> "thankyou"; > >>>> * 2 - problems with payment gateway - error happened > or > >>>> something, but no error info provided > >>>> > >>>> (OxPaymentGateway::getLastError()/OxPaymentGateway::getLastErrorNo() > >>>> gave no response) - > >>>> redirects to "payment?payerror=2" > >>>> * 3 - means must be kept on save order step; > >>>> * custom codes provided by user modules: > >>>> - numeric value and > 3 - redirects to > >>>> "payment?payerror="._ERROR_CODE_ > >>>> - is NOT numeric - redirects to > >>>> "payment?payerror=- > 1&payerrortext="._ERROR_TEXT_RETURNED_BY_PAYMENT_GATEWAY_; > >>>> > >>>> > >>>> > >>>>> One question: if a transaction is approved by the payment gateway, > it > >>>>> normally returns an approval code. How do I transfer this approval > >>>>> code from the oxPaymentGateway class to the 'order successful' > screen? > >>>> Fastest solution: > >>>> > >>>> - write a module for OxPaymentGateway::executePayment()) which writes > >>>> order approval code to session (e.g. > >>>> OxSession::setVar('viOrderApprovalCode')); > >>>> - write a getter for Thankyou e.g. getOrderApprovalCode, which > returns > >>>> approval code (and maybe unsets it > >>>> from session); in template you can call $oView- > >getOrderApprovalCode(); > >>>> > >>>> if you need to write this code to DB, you should create new field in > >>>> OxOrder table (please use your own prefix for field, > >>>> do not make regular ox, make e.g. vi_approvalcode) and set this field > >>>> value in OxPaymentGateway::executePayment() - > >>>> second parameter is OxOrder instance; > >>>> > >>>> > >>>> > >>>> -------------------------------------------------- > >>>> From: "Dainius Bigelis" <[email protected]> > >>>> Sent: Monday, June 15, 2009 1:13 PM > >>>> To: "Arvydas Vapsva" <[email protected]> > >>>> Subject: Fw: Re: [oxid-dev-general] Urgent question on > >>>> paymentgatewayintegration> > >>>>> -----Ursprüngliche Nachricht----- > >>>>> Von: [email protected] > >>>>> [mailto:[email protected]] Im Auftrag von > Vikram > >>>>> Vaswani > >>>>> Gesendet: Montag, 15. Juni 2009 09:30 > >>>>> An: [email protected] > >>>>> Betreff: [!! SPAM] Re: [oxid-dev-general] Urgent question on > >>>>> paymentgateway integration > >>>>> > >>>>> Hi Marco, > >>>>> > >>>>> Thanks for this code, it's quite helpful. I'm making progress with > this. > >>>>> > >>>>> One question: if a transaction is approved by the payment gateway, > it > >>>>> normally returns an approval code. How do I transfer this approval > >>>>> code from the oxPaymentGateway class to the 'order successful' > screen? > >>>>> > >>>>> Vikram > >>>>> > >>>>> Marco Steinhaeuser wrote: > >>>>>> Hey Vikram, > >>>>>> > >>>>>>> 3. Are there any "demo" implementation of a payment gateway module > >>>>>>> which I could use as a starting point? > >>>>>> Check out these extensions for CE: > >>>>>> > >>>>>> http://www.oxid-esales.com/en/exchange/extensions/oxid2ipayment- > ce?ter > >>>>>> m=2223 > >>>>>> http://www.oxid-esales.com/en/exchange/extensions/gate2shop- > payment-mo > >>>>>> dul-fuer-oxid-ce?term=2223 > >>>>>> > >>>>>> Hope that helps ;) > >>>>>> > >>>>>> Marco > >>>>>> > >>>>>> > >>>>>> > >>>>>> -----Ursprüngliche Nachricht----- > >>>>>> Von: [email protected] > >>>>>> [mailto:[email protected]] Im Auftrag von > Vikram > >>>>>> Vaswani > >>>>>> Gesendet: Samstag, 13. Juni 2009 05:30 > >>>>>> An: [email protected] > >>>>>> Betreff: [oxid-dev-general] Urgent question on payment gateway > >>>>>> integration > >>>>>> > >>>>>> Hi > >>>>>> > >>>>>> I am trying to integrate the authorize.net payment gateway into > OXID > >>>>>> as a module. Please could someone help with the following > questions: > >>>>>> > >>>>>> 1. From the API docs, it seems that the "core" OXID module to > extend > >>>>>> for this is oxPaymentGateway. Is this correct? Is it necessary to > >>>>>> also extend oxOrder? > >>>>>> > >>>>>> 2. Currently I am overriding the oxPaymentGateway::executePayment() > >>>>>> method. However, I am not able to understand how to handle payment > >>>>>> errors that occur when performing the transaction. Can someone > >>>>>> suggest the "best practice" way of raising these errors so that > they > >>>>>> are visible to the customer on the final checkout page? > >>>>>> > >>>>>> 3. Are there any "demo" implementation of a payment gateway module > >>>>>> which I could use as a starting point? > >>>>>> > >>>>>> Thanks, > >>>>>> > >>>>>> Vikram > >>>>>> _______________________________________________ > >>>>>> 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 > >>>> > >>> _______________________________________________ > >>> 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 > > > > _______________________________________________ > > 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
