Woocommerce: Place order, but accept payment later? - woocommerce

Step 1: My WooCommerce shop is attached to a warehouse. I need customers to add products to cart, and then to place their order without making any payment or selecting any shipping.
Next, someone from my warehouse receives the order, and makes edits to the order, and then manually adds a shipping cost to the total invoice.
Step 2: The updated order is then sent back to the customer notifying them of the total cost of the order and then asks the customer to make payment via credit cart or bank transfer.
What I have done so far:
I have configured Step 1 to work correctly - using cheque as Gateway method. What I cannot do is Step 2, accept Payment via a different gateway,
Plugin: WooCommerce Purchase Order Gateway, but that doesn't allow for payment to be captured via WooCommerce later on
What's the best practice here?

I solved this by using WooCommerce Request a Quote plugin, and configuring it to replace the "Add to Cart" button.
Once the Quote list has been submitted, someone from my end confirms the order and uses the Order's Action menu to send Customer Invoice which provides a hyperlink back to the payment gateway: Paypal, Credit Card, Direct Deposit etc.

Looking for same feature, this plugin helped me. but it allow you to send your client invoice

Related

How to charge different amount on an order after processing via WooCommerce API

Take this example:
A user places an order for 2 items on a WooCommerce shop. The order is picked up (using REST) by a POS (Point-of-Sale) system. The owner discovers that only one of the items is available (for whatever reason) and decides to amend the order by removing the non-existing item.
How does the POS system tell WooCommerce (via REST API) that the order is "completed" (so that WooCommerce plug-in can do the capture (charge) of the payment at the payment provider), but at the same time tells WooCommerce that it should only charge the price for the one item, and not the price registered on the order?
In another shop we manage, we can tell the shop the amount to charge when we change the order status to "completed" - how do we do this properly in WooCommerce?
Option 1:
Some payment methods e.g. PayPal allows you to authorize (reserve the amount) without capturing it right away, so this could be used to address your issue in the following flow:
Payment method payment action is set to Authorize to reserve the funds on customers account.
Customer places an online order.
POS system calls GET /wp-json/wc/v3/orders/<id> to retrieve order details.
Optional. Changes are made to order items and PUT /wp-json/wc/v3/orders/<id> Rest API endpoint called to update the order details.
Another PUT /wp-json/wc/v3/orders/<id> request is made to change order status from processing to completed. This will trigger payment method to capture the funds based on current order total.
Note: It might be possible to combine steps 4 and 5.
Option 2:
If payment method you are using does not support authorizations, your other option is refunds.
Payment method configured to capture the funds.
Customer places an online order.
POS system calls GET /wp-json/wc/v3/orders/<id> to retrieve order details.
PUT /wp-json/wc/v3/orders/<id> request is made to change order status from processing to completed.
A refund in desired amount can be created by calling POST /wp-json/wc/v3/orders/<id>/refunds end point.
Note: Some payment methods do not support partial refunds. A REST API call will be needed to update order and remove products that could not be shipped. You may need to test when it is the best time to make such call so it does not affect refund/order totals.

Woocommerce subscription: seperate tax rate, one for the signup fee and second for the recurring payment

We have a website that sells subscriptions.
The customer will get a physical product and then will be charged each month for the service.
We use WooCommerce Subscriptions plugin. We set the subscription product so the "Signup fee" will be used to charge for the physical device, and the subscription fee is for the service.
On some US states, the Tax for service and tangibles is different. For us it means different tax rate for the product (one time) and another tax rate for the recurring payment (service).
Since there is only one option to have Tax Class, I could not find a way to make it happen. Any ideas?
So...
The answer is to separate the subscription into two products. one as service and one as tangible.
We add the tangible on-the-fly.

Woocommerce checkout process creating new order at payment

I'm having a problem with WordPress/Woocommerce creating a second order for customers. This is leading to a couple issues that I'll outline below. Here is the process I am following:
Create and populate new Woocommerce Subscription object
Create new renewal order (this will be ID 1033 below) and send invoice to customer
Customer logs in and finds the pending order in My Account page
Customer opens the pending order and it is populated with the correct products and price. Customer pays the correct amount
After payment, customer is on the receipt screen but it is for a new order. The old order is still sitting on their account as pending.
After looking at the access log, I can see this:
Here is the entry link (pre-payment): /checkout/order-pay/1033
And here is the review link (post-payment): /checkout/order-received/1055
The problems I am encountering are:
I have tested completing payments more than dozen times and was only able to replicate it the first time. I have followed those same steps as much as possible to no avail (all other transactions are processing as expected without creating extra orders)
The initial order is connected to a subscription, and upon completed payment the subscription is set to automatic payments. This issue of having a new order is detaching it, and automatic payments cannot be enabled until after the next payment is processed (a month later), and will rely on the customer manually submitting the order again.
Does anyone have any idea why WordPress/Woocommerce is creating a second order upon payment.
I was having the same issue with renewal payments getting applied to a new order. In my case, I was consistently having this issue with manually added subscriptions, as well as with imported subscriptions.
After working with Woocommerce Subscriptions Support, they came out with an update (version 2.1.0) solving the issue for me. Their change log references the fix.
Fix: Do not create new orders when processing a renewal and resubscribe payment with different details to the original order by ensuring the cart hash used by WooCommerce is updated when creating the order. (PR#1687)
Try updating Woocommerce Subscriptions to version 2.1.0.

How to handle multiple checkout flows in Google Enhanced Ecommerce funnels?

I'm setting up Enhanced Ecommerce for Analytics, and I'm trying to figure out the right way to represent my checkout flow in terms of the checkout funnel, given that there are several different possible flows depending on how the customer wants to pay.
Step 1: Open the cart. So far so good.
Step 2: Select payment method.
Step 3: Now I'm unsure. If the payment method in step 2 was "Credit Card", the next step is a form where the customer enters all their credit card and shipping info, which should probably break down into several steps. But if the payment method was "PayPal", they're whisked off to the PayPal site to authorize payment, then back to me to review their info and commit the order.
Customers who selected PayPal never see the Credit Card form (and never complete any of those steps), and customers who select Credit Card never see the PayPal review form. So numbering the steps linearly (ie. the credit card form is steps 3-4-5 and the PayPal return form is step 6) doesn't make sense.
I can send the payment type to Google as a "checkout option", but that doesn't seem to solve the issue of numbering the checkout steps.
I can't find any information about multiple checkout flows in the Enhanced Ecommerce documentation. What is the standard way to handle this?

ubercart + paypal payments... 2 questions

I'm planning to use paypal payment method together with ubercart, in order to not have to take care about security issues.
1)
I need to store the customers addresses in order to know where to ship the products.
I was wondering if I can let customer insert the addresses in paypal, and then somehow get them, or I should ask the customer to fill this information in the website instead... how ?
2) I need to test the checkout process. Is paypal offering a "testing proccess" in which I can see what happen without inserting credit cards numbers ?
thanks
1) People must give a delivery and billing adress in ubercart during checkout. There is also a nifty module wich let's user store different adresses and then choose wich one they want when checking out: http://drupal.org/project/uc_addresses
2) Yes, you can choose this option in the ubercart paypal module settings(sandbox mode) and you need to register here: https://developer.paypal.com/

Resources