16 08 2016
Magento / PayPal IPN: what to do if paypal IPN occasionally isn’t working? – plan B
Occasionally, and with different kinds of webshop technologies it happens once in a while that the PayPal IPN (instant payment notification) doesn’t go through. Internet forums are filled with different reports about this phenomenon, too. – What happens? Basically a customer paid, payment went through, but the webshop doesn’t receive the IPN payment notification from PayPal. – That sucks!
So here is what i’ve come up with as our backup plan, or “plan B”:
a) observing the email box for paypal payment notifications. This part is one by a small bash script, first running fetchmail, then doing some grep/regexp to extract paypal emails and order numbers.
b) manually set the order to “paid” (if necessary) and enable the downloadable products the customer had paid for.
Code:
load($orderid, 'increment_id'); $order_status = $order->getData('status'); if ( $order_status != "complete" ) { // ----- Invoicing ----------- $invoice = $order->prepareInvoice() ->setTransactionId($order->getId()) ->addComment("Auto-created invoice by PayPal-IPN-Checker") ->register() ->pay(); $order->addRelatedObject($invoice); #$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true, "Message"); $order->sendNewOrderEmail(); $order->setEmailSent(true); $order->save(); // ---------------------------- // ---------- // Enable the purchased products for download // Source: http://magento.stackexchange.com/questions/17246/download-link-is-not-showing-for-the-programmatically-added-downloadable-product $orderItems = Mage::getModel('sales/order')->load($order->getId()); foreach ($orderItems->getAllItems() as $itemId => $orderItem) { $product = Mage::getModel('catalog/product')->load($orderItem->getProductId()); if($product->getTypeId()=='downloadable') { $product_links = Mage::getModel('downloadable/product_type')->getLinks( $product ); foreach ($product_links as $link) { $downloadPurchase = Mage::getModel('downloadable/link_purchased') ->setOrderId($orderItem->getOrderId()) ->setOrderIncrementId($orderItems->getIncrementId()) ->setOrderItemId($orderItem->getId()) ->setCreatedAt(date('Y-m-d H:i:s')) ->setUpdatedAt(date('Y-m-d H:i:s')) ->setCustomerId($orderItems->getCustomerId()) ->setProductName($product->getName()) ->setProductSku($product->getSku()) ->setLinkSectionTitle('Click here to download'); $downloadPurchase->save(); $linkHash = strtr(base64_encode(microtime() . $downloadPurchase->getId() . $orderItem->getId() . $product->getId()), '+/=', '-_,'); $downloadItem = Mage::getModel('downloadable/link_purchased_item') ->setProductId($product->getId()) ->setNumberOfDownloadsBought(0) ->setNumberOfDownloadsUsed(0) ->setLinkTitle($link->getTitle()) ->setIsShareable($link->getData('is_shareable')) ->setLinkFile($link->getData('link_file')) ->setLinkUrl($link->getData('link_url')) ->setLinkType(Mage_Downloadable_Helper_Download::LINK_TYPE_URL) ->setStatus('available') ->setCreatedAt(date('Y-m-d H:i:s')) ->setUpdatedAt(date('Y-m-d H:i:s')) ->setLinkHash($linkHash) ->setOrderItemId($orderItem->getId()) ->setPurchasedId($downloadPurchase->getId()); $downloadItem->save(); } } } // -------- } ?>
xvkbd (Danke Wolfgang!) RegEx für UID Plausibilitätsprüfung (EU VAT # Regex)
Comments are currently closed.