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?

  • 1
    It depends. What exactly do you wish to accomplish (e.g. charge customer for the new order)? – benmarks Feb 20 '13 at 20:21
  • Precisely. I've informed the customer and they are aware of the adjustment, but I do no want to also ask them to re-enter their credit card. I am using auth.net – kevando Feb 20 '13 at 23:34
  • 1
    Is performing an online credit memo/refund for the items that are out of stock not an option? – pspahn Feb 20 '13 at 23:55
  • If you've authorized only (which you should be doing), many gateways will allow you to present a different amount for capture that is less than the amount authorized. – benmarks Feb 21 '13 at 2:39
  • I have developed an extension that copy entire order data to the new one. I will put this in github and share to improveement. – Eduardo Luz May 20 '13 at 13:51

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).

| improve this answer | |
  • Actually this answer assumes that the full order has been invoiced... you shouldn't need to credit memo if you haven't invoiced, just do a partial capture (issue an invoice for only the two items + shipping) – mprototype Dec 24 '13 at 22:38

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.

| improve this answer | |

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' ) );
| improve this answer | |
  • We already handled this through auth.net, but I would like to think this will work if the issue comes up again! – kevando Feb 21 '13 at 6:16
  • Most gateways hold auths for up to 60 days and you can partial capture multiple times until the auth total is reached... this is exactly the problem that the common payment gateway auth / capture workflow was designed to handle. Magento was built accordingly. – mprototype Feb 21 '13 at 6:51
  • 1
    I was under the impression that Authorize.net held captures for five days. And "Magento being built accordingly" should probably not apply 100% of the time to "Magento". 1.7x has made major improvements in the native payment gateways, and there are still improvements to be made. The differences between 1.6x and 1.7x are enough to suggest YMMV. – pspahn Feb 21 '13 at 7:10
  • Its really simple, capturing on an existing authorization request on most gateways doesn't drop the auth off the gateway unless the capture is for the full auth amount. You can not capture for more than the auth amount. Magento has had multiple invoices per order since sometime around 1.3, possibly early... I'm not quite sure... but this is an area of transaction requests that I've found a lot of developers ( even at the gateways themselves ) aren't very clear on the work flow for the api requests. – mprototype Feb 21 '13 at 7:38
  • Paypal allows up 29 days and upto 115% of intial auth capped at $75. Braintree auths drop off at 7 days for AMEX,10 days for Visa and Mastercard, other authorizations will be marked as expired after 30 days. Braintree does allow for a pseudo-storing of a tokenized card in a local 'vault' in its Magento extension, though an extended auth/or non-vaulted re-auth are not doable currently. articles.braintreepayments.com/control-panel/transactions/… – Joshua Chavanne Feb 20 '15 at 8:38

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.

| improve this answer | |

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

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.