...
Table of Contents | ||
---|---|---|
|
Considerations
...
Platform wide change, this should work on every market;
Identify Payment Methods as Online or Physical Payment
We should identify on both Frontend (WhitelabelApp) and in the backend (Payment Service). The main implementation and first barrier should be the frontend (hidding the Physical Payments from the payment methods dropdown). In other hand, the backend should grant that, even somehow the Frontend allow the Physical Payment, it will be blocked.
Frontend: Add onlinePayment at Payment Method Interface
Add a new property called onlinePayment at this interface
Update the constants that implement this interface adding the onlinePayment method here, the configuration should be:
const | onlinePayment value |
---|---|
PAYPAL_PAYMENT_METHOD_PLACEHOLDER | true |
BLIK_PAYMENT_METHOD_PLACEHOLDER | true |
SODEXO_VOUCHER_PAYMENT_METHOD_PLACEHOLDER | false |
CHEQUE_GOURMET_VOUCHER_PAYMENT_METHOD_PLACEHOLDER | false |
SODEXO_PAYMENT_METHOD_PLACEHOLDER | true |
CHEQUE_GOURMET_PAYMENT_METHOD_PLACEHOLDER | true |
PAYMENT_ON_DELIVERY_CARD_PAYMENT_METHOD_PLACEHOLDER | false |
BIZUM_PAYMENT_METHOD_PLACEHOLDER | true |
WAYLET_PAYMENT_METHOD_PLACEHOLDER | true |
Create a new method to verify if a payment type is online or not. This method should grant that cash will always be considered false regardless the configuration. (as you can see, there’s no configuration for cash in the table above, that represents the state/payment/constats.ts file)
This should only affect delivery orders.
Frontend Preparation
Status colour Blue title Ready for dev
Rules Implementation
For the first order with a value >= X €, only online payment will be allowed, where X is configurable. The initial intention is to set it to 20 €.
Questions:
How can we identify the first order of a user? Is there any mechanism in place?
Solution
We can get advantage of gateway query getUserOrders, this query returns all orders from the logged user with a count. We query this when the browser loads the payment method screen. This is the response:
New user without any order.
...
Status colour Blue title Ready for dev Rule 2 - Physical Payment Amount Limit
For subsequent orders with a value >= X €, only online payment will be allowed, where X is configurable. The initial intention is to set it to 50 euros.
Solution:
We already have a cash payment limit, but it’s only for cash. We should create a new flag to all Physical Payments and verify before we show the payment methods dropdown to our customer, removing all physical payment.
Create feature flag for this limit
Evaluate when creating PaymetMethods
Status colour Blue title Ready for dev
...
If the last order was paid in Physical Payments and there was a delivery failure (e.g. a joke order), the next order will only allow online payment
...
Status colour Red title BLOCKED