I have a customer that ordered 5 products, but 2 are out of stock and cannot fulfill the full order. However, when I edit the order (delete it and create a new one) to remove the two SKUs, the credit card information gets removed. Is there a way to keep that so I do not need to call the customer?
In the scenario given, you are removing items that you can't fill. Since you are using Authorize.net, you should be able to issue a credit memo from the line items on the order's invoice to refund the charges for those specific line items, then ship the remaining items.
If it were a case where you need to change or add items to the order, then you would need to use one of the 3rd party CIM implementations or the EE Payment Bridge (assuming you are on Enterprise).
You need to use a payment gateway like Braintree, authorize.net with the CIM (customer information manager) option or some other gateway that stores a payment token in Magento and a token at the gateway and then stores the customer credit card information on the gateway level. Without this it's impossible to capture more funds than the customer authorizes in the initial transaction. Storing credit card information yourself is a violation of PCI compliance unless you go through some rigorous PA-DSS certification which is very cost prohibitive.
Braintree has a free payment gateway extension available for Magento. I have not checked out the recent version but we had to fix several bugs in previous versions. It works quite well after some bug fixes though.
There's a few payment gateway extensions for Auth.net CIM. I've used http://www.magentocommerce.com/magento-connect/idp-authorizecim-2-1-payment-module.html in the past. Looks like there's a few new ones now. Stay away from the cheap Silver Touch one, it looks scary.
Ping me if you want to try Braintree and notice it's buggy. I can send you some recent code from one of our repos.
This is a really simple problem to solve:
Take note in the Magento admin you can create multiple INVOICES for an order. If your configuration is properly set you can invoice only for the products which are available. When you create an invoice you choose the items that you want to capture on and Magento makes the partial capture.
Likewise you can manage multiple shipments per order.
Of course, all of this can be done programatically as well.
$service = Mage::getModel('sales/service_order', $order); $service->prepareInvoice( array( 'qty' => 'sku' ) );
Avoid storing the payment data if you can - its not worth it. You will need to put PCI controls around it, which will cost money. And if you don't protect it properly and get hacked - it happens a LOT - then your PCI costs end up looking like nothing in comparison with the costs of dealing with a breach.
So - find out if your payment gateway can help. Some good answers above. My advice is do not store the payment data - it is not worth the hassle.
We have developed an extension for partial payment facility. It allows your customer to collect partial payment for product services. Customer will collect rest of the amount on/before shipment. Partial payment extension allows customers to buy your product from your web-store by paying only small amount of price of the product.Customer can pay remaining amount in multiple installments as defined by admin.
- Admin can set the product label to this extension according to that it will be display on the front-end.
- Partial Payment can configure as Optional or Mandatory.
- Admin can set fixed amount or percentage amount to pay by customer while purchasing product from your store.
- Partial Payment can apply to all products, selected products, out of stock products or even on whole cart.
- Admin may define some credit limit for customers. That credit amount will be the maximum amount for customer as remaining installment.
For full description and features visit our magento extension store:
indieswebs.com website for partial payment facility