echo $form["jotag"]->getValue(); echo $form["jotag"]->render(); echo $form["confirm_jotag"]->render(); ?> </td> </tr> <tr> <td><b><?php echo $form["duration"]->renderLabel(); ?> :</b></td> <td><?php echo $form["duration"]->getValue(); ?> <?php echo PaymentPeer::getYearString($form["duration"]->getValue(), false); echo $form["duration"]->render(); ?> </td> </tr> <tr> <td><b><?php echo __("Price"); ?> :</b></td> <td><?php echo sprintf(OptionPeer::retrieveOption('CURRENCY_FORMAT'), $form["duration"]->getValue() * OptionPeer::retrieveOption('BUY_PRICE')); ?> </td> </tr> <tr>
public function executeIPN($request) { // rebuild post parameters to send back to paypal $req = ""; foreach ($_POST as $var => $value) { $req .= "&{$var}=" . urlencode(stripslashes($value)); } // get transaction info $paymentStatus = $request->getParameter('payment_status'); $transNum = $request->getParameter('txn_id'); $type = $request->getParameter('custom'); $paymentId = $request->getParameter('invoice'); $totalAmount = $request->getParameter('mc_gross'); $test_ipn = $request->getParameter('test_ipn'); if ($test_ipn && OptionPeer::retrieveOption('PAYPAL_MODE') == 'L') { die('fail'); } // we are NOT in sandbox // send back to paypal $ch = @curl_init(); @curl_setopt($ch, CURLOPT_POST, 1); @curl_setopt($ch, CURLOPT_URL, OptionPeer::retrieveOption('PAYPAL_MODE') != 'L' ? "https://www.sandbox.paypal.com/cgi-bin/webscr" : "https://www.paypal.com/cgi-bin/webscr"); @curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=_notify-validate" . $req); @curl_setopt($ch, CURLOPT_TIMEOUT, 20); @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); @curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); $result = @curl_exec($ch); @curl_close($ch); if ($result != "VERIFIED") { //can't verify the POST information, most likely fraudulent so exit. die('fail'); } // locate payment $payment = PaymentPeer::getFromField(PaymentPeer::ID, $paymentId); if (!$payment || !in_array($payment->getStatus(), array(PaymentPeer::ST_NEW, PaymentPeer::ST_PENDING))) { // tried to process an already paid order, or a cancelled one.. if not paid, alert // staff if ($payment && $payment->getStatus() != PaymentPeer::ST_PAID) { Mailer::sendEmail(OptionPeer::retrieveOption('ADMIN_EMAIL'), 'paymentError', array('payment' => $payment, 'reason' => 'CANCELLED')); } die('fail'); } // check if transNum is UNIQUE $c = new Criteria(); $c->add(PaymentPeer::REFERENCE, $transNum); $c->add(PaymentPeer::METHOD, PaymentPeer::PT_PAYPAL); $p = PaymentPeer::doSelectOne($c); if ($p && $p->getId() != $payment->getId()) { die('fail'); } // duplicated transaction $payment->setMethod(PaymentPeer::PT_PAYPAL); $payment->setReference($transNum); // if($type == "RENEW") $payment->setType(PaymentPeer::PT_RENEW); // else $payment->setType(PaymentPeer::PT_NEW); switch ($paymentStatus) { case "Completed": // check if value matches if ((double) $payment->getAmount() != (double) $totalAmount) { $payment->setStatus(PaymentPeer::ST_ERROR_NOTIFY); $payment->save(); } else { if (!$payment->getTag()) { $jotag = new Tag(); $jotag->setJotag($payment->getJotag()); $jotag->setStatus(TagPeer::ST_NEW); $jotag->setUser($payment->getUser()); $jotag->setIsPrimary(false); } else { $jotag = $payment->getTag(); } // calculate new expiration date $jotag->setValidUntil($jotag->calcNewDate($payment->getDuration())); // try to save new jotag try { $jotag->setStatus(TagPeer::ST_ACTIVE); $jotag->save(); } catch (PropelException $e) { // failed to save jotag, probably due to duplicated jotag (race condition) // we must mark it as ERROR and contact user $payment->setStatus(PaymentPeer::ST_ERROR_NOTIFY); $jotag = null; } if ($jotag) { // everything OK $payment->setTag($jotag); $payment->setJotag(''); $payment->setStatus(PaymentPeer::ST_PAID); // remove from interest list $payment->getUser()->delInterest($jotag->getJotag()); } $payment->save(); } // send emails if ($payment->getStatus() == PaymentPeer::ST_PAID) { // payment processed, notify customer Mailer::sendEmail($payment->getUser()->getPrimaryEmail(), 'paymentConfirmation', array('payment' => $payment), $payment->getUser()->getPreferedLanguage()); } else { // payment processed, but there was an error creating/updating JoTAG, notify merchant $reason = (double) $payment->getAmount() != (double) $totalAmount ? 'AMMOUNT' : 'DBERROR'; Mailer::sendEmail(OptionPeer::retrieveOption('ADMIN_EMAIL'), 'paymentError', array('payment' => $payment, 'reason' => $reason)); } break; case "Pending": $payment->setStatus(PaymentPeer::ST_PENDING); $payment->save(); break; case "Failed": $payment->setStatus(PaymentPeer::ST_FAILED); $payment->save(); break; } return sfView::HEADER_ONLY; }
echo $payment->getId(); ?> <br/> PayPal Reference: <?php echo $payment->getReference(); ?> <br/> Jotag: <?php echo $payment->getTag() ? $payment->getTag()->getJotag() : $payment->getJotag(); ?> <br/> Duration: <?php echo $payment->getDuration(); ?> <?php echo PaymentPeer::getYearString($payment->getDuration(), false); ?> <br/> Order Total: <?php echo sprintf(OptionPeer::retrieveOption('CURRENCY_FORMAT'), $payment->getAmount()); ?> <br/> User: <?php echo $payment->getUser(); ?> <br/> User Email: <?php echo $payment->getUser()->getPrimaryEmail(); ?> <br/> Reason: <?php
<?php require_once dirname(__FILE__) . '/../config/ProjectConfiguration.class.php'; $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false); // initialize instance sfContext::createInstance($configuration); // set default TIMEZONE $tz = OptionPeer::retrieveOption('TIMEZONE'); if ($tz) { date_default_timezone_set($tz); } $c = new Criteria(); $expiration_age = OptionPeer::retrieveOption('BUY_NEW_ORDER_LIFETIME'); $c->add(PaymentPeer::CREATED_AT, time() - $expiration_age, Criteria::LESS_EQUAL); $c->add(PaymentPeer::STATUS, PaymentPeer::ST_NEW); $payments = PaymentPeer::doSelect($c); if ($payments) { foreach ((array) $payments as $payment) { $payment->setStatus(PaymentPeer::ST_CANCELLED); $payment->save(); } }