Auto-invoice order upon payment confirmation.

This commit is contained in:
Japhet Stevens 2013-03-12 21:41:12 -04:00
parent 4212490404
commit 0b9fa99865
3 changed files with 33 additions and 13 deletions

View File

@ -61,6 +61,4 @@ class Bitpay_Bitcoins_Block_Iframe extends Mage_Checkout_Block_Onepage_Payment
return $invoice['url'].'&view=iframe';
}
}
?>
}

View File

@ -124,10 +124,33 @@ class Bitpay_Bitcoins_Model_PaymentMethod extends Mage_Payment_Model_Method_Abst
// order status will be PAYMENT_REVIEW instead of PROCESSING
$payment->setIsTransactionPending(true);
}
else
{
$this->MarkOrderPaid($payment->getOrder());
}
return $this;
}
function MarkOrderPaid($order)
{
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
if (!count($order->getInvoiceCollection()))
{
$invoice = $order->prepareInvoice()
->setTransactionId(1)
->addComment('Invoiced automatically by Bitpay/Bitcoins/controllers/IndexController.php')
->register()
->pay();
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder());
$transactionSave->save();
}
}
function CreateInvoiceAndRedirect($payment, $amount)
{
include 'lib/bitpay/bp_lib.php';

View File

@ -8,13 +8,16 @@ class Bitpay_Bitcoins_IndexController extends Mage_Core_Controller_Front_Action
$params = $this->getRequest()->getParams();
$quoteId = $params['quote'];
$paid = Mage::getModel('Bitcoins/ipn')->GetQuotePaid($quoteId);
print json_encode(array('paid' => $paid));
print json_encode(array('paid' => $paid));
exit();
}
// bitpay's IPN lands here
public function indexAction() {
require 'lib/bitpay/bp_lib.php';
Mage::log(file_get_contents('php://input'));
$apiKey = Mage::getStoreConfig('payment/Bitcoins/api_key');
$invoice = bpVerifyNotification($apiKey);
@ -32,20 +35,16 @@ class Bitpay_Bitcoins_IndexController extends Mage_Core_Controller_Front_Action
}
// save the ipn so that we can find it when the user clicks "Place Order"
Mage::getModel('Bitcoins/ipn')->Record($invoice);
Mage::getModel('Bitcoins/ipn')->Record($invoice);
// update the order if it exists already
if ($order->getId())
switch($invoice['status']) {
case 'confirmed':
case 'complete':
foreach($order->getInvoiceCollection() as $i)
$i->pay()
->save();
$order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)
->save();
case 'complete':
$method = Mage::getModel('Bitcoins/paymentMethod');
$method->MarkOrderPaid($order);
break;
}
}