Purchase Order
What is purchase order?
Purchase Order payment method allows placing orders with a Purchase Order Number (optional) with no wallet balance required and users are invoiced for the total price of the basket. The invoice can be paid at a later time and the campaigns are actually sent to the job boards even before the invoice has been paid. Purchase Order requires a wallet to be created as explained in End User Payments and user needs to enter their billing details in the Billing Portal.
How does it compare to Wallet and Direct Charge?
It can be summarized as:
- Wallet Balance
- User can add balance in any amount (not less than the campaign total price)
- User can reuse balance in subsequent campaign orders
- User can add balance before, during or after campaign checkout
- Direct Charge
- User pays for the campaign total price, not less, not more
- User pays during the campaign checkout
- Purchase Order
- User pays after the campaign checkout
As an ATS, how can we start using purchase order?
Purchase Order is not enabled by default for all ATSs. The ATS needs to talk with VONQ Partner Account Manager to get it enabled so their end users can start using it.
For an end user to use the purchase order, the user needs to enter their billing information such as name, email, billing address & tax number before being able to order.
On our testing environments such as Acceptance and Sandbox, money related transactions such as "topping-up a wallet" are done using test credit card and the invoices are not sent when to the end user.
Caveats to know when using purchase order
Purchase Order requires a wallet to be created as explained in End User Payments and user needs to enter their billing details in the Billing Portal.
When a user orders with purchase order, the wallet's balance is deducted equal to the total of items in the campaign order (the basket). When user pays the invoice later, the wallet's balance is restored to the initial value before the purchase order was made. If the wallet balance is not enough, then the wallet balance will be negative.
You can ask VONQ to set up a maximum purchase order amount per currency for your partner account and when the basket total exceeds this amount, user will not be able to select Purchase Order method in Payment Method step of the order journey.
Please note that if you have programmatically set the payment method to be purchase order, if user adds/removes products to/from the basket, and basket total (indicated by totalExceedsMaxPurchaseOrder
) exceeds the maxPurchaseOrderAmount
, we will do:
- If you have hidden the payment method step
- We will fall back to ATS Managed Payment Method as the user won't be able to see the step to choose another option
- If you have NOT hidden the payment method step
- We will fall back to
null
so that the user is enforced to select a different payment method because Purchase Order method will be disabled and user won't be able to select it unless they reduce basket total price
- We will fall back to
Example case with enough wallet balance:
- User has 1000$ Wallet Balance that they have had previously topped-up
- User orders a campaign with 500$ basket total; the balance of 1000$ will get 500$ deducted, thus wallet balance will be 500$
- User will pay for the invoice, then the wallet balance will be restored to 1000$
Example case with not enough wallet balance:
- User has 300$ (or zero) Wallet Balance
- User orders a campaign with 500$ basket total; the balance of 300$ (or zero) will get 500$ deducted, thus the wallet balance will be -200$ (or -500$ when zero)
- User will pay for the invoice, then the wallet balance will be restored back to 300$ (or zero if it was zero initially)
Ordering with purchase order
Purchasing a campaign with wallet balance requires at least one paid product meaning that the end user needs at least one "product" (not contract) added to their basket to purchase with wallet. If the end user has basket comprised of "only contracts", the basket total will be 0$ thus the backend order endpoint will throw an error saying "at least one paid product is required". To circumvent this, Payment Method step is hidden automatically by HAPI Elements and ATS Managed Payment Method is enforced automatically.
Ordering a campaign with only "contracts" in the basket with wallet
HAPI Elements, when end user has "all contracts" in their basket, will automatically fall back to using "ATS Managed" option and end user will not see the "Payment Method" step of the Order Journey and the ATS developer will not be able to override the paymentMethod
parameter of the CampaignCreateForm
object.
How can we track purchase orders?
Using window.hapi.campaign.service.orderCampaign.onStart
callback, you can check the payload being sent to the backend as such:
window.hapi.campaign.service.orderCampaign.onStart(payload => {
if (payload.paymentMethod === window.hapi.orderJourney.utils.paymentMethodKeys.purchaseOrder) {
// order is made using purchase order
// if user entered a Purchase Order Number, then there is also `poNumber` inside the payload, otherwise null
}
})
How can we programmatically manage payment method for a user
Refer to Payment Methods Configuration for enabling/disabling some payment methods based on your business requirements.
Please refer to Using Purchase Order Payment Method recipe for more information on how to use "purchase order" payment method programmatically.