-
Notifications
You must be signed in to change notification settings - Fork 2
Checkout Operations
- Initialization
- Checkout Cart
- setCustomer
- setBillingAddress
- setShippingAddress
- getCountries/getStates
- getShippingOptions/setShippingOptions
- setOrderNote
- redeemCoupon/removeCoupon
- getPaymentOptions/setPaymentOption/getPaymentForm
- createOrder
The default JavaScript checkout can be retrieved through
var checkout = InitializeEcommerceService('Checkout')
IT IS IMPORTANT THAT THIS SERVICE BE CALLED checkout FOR COMPATABILITY WITH CUSTOM PAYMENT METHOD EXTENSIONS
This allows you to set or update the order information, including addresses, payment options, shipping options, discounts and complete the order.
The entire order screen, including all elements can be called in via this View-Component:
@await Component.InvokeAsync("Generic.Ecom.Checkout")You can customize the various views, outlined in the customization wiki page. We will include individual sections though if you wish to have more control.
Along side the order checkout screen is a checkout cart. This is generated through the checkout.getOrder() method which returns the HTML of the checkout cart.
By default, this is called and updated on the update-order event:
document.body.addEventListener("update-order", function (ev) {
checkout.getOrder().then((html) => {
var checkoutTotals = document.querySelector("#checkout-cart");
if (checkoutTotals) {
checkoutTotals.innerHTML = html;
}
});
});This Checkout cart's view can be modified through overwriting the _CheckoutCart.cshtml.
Sets the current Customer's name and email. By default, this is triggered on the change event of elements with the customer class, creates a set-customer event with checkout.setBillingAddressEvent with the data from the #firstName.form-control, #lastName.form-control and #email.form-control elements, this event then calls the repository to update.
you can manually call with
checkout.setCustomer();Once complete, it will dispatch a CustomEvent to the body of type show-alertwith the message in the detail object that you can react to it.
document.body.addEventListener("show-alert", function (ev) {
ecommerceClass.showAlert(ev.detail);
});The setCustomer is integrated within the Generic.Ecom.Checkout view-component.
Sets the billing address. By default, this is triggered on the change event of elements with the billing-address class, creates a set-billing-address event with checkout.setBillingAddressEvent using the values from #billingAddress.form-control, #billingAddress2.form-control, #billingCity.form-control, #billingCountry , "#billingState, and #billingZip.form-control. This event then calls the repository to update.
you can manually call with
checkout.setBillingAddress(address: Address);Once complete, it will dispatch a CustomEvent to the body of type show-alertwith the message in the detail object that you can react to it.
document.body.addEventListener("show-alert", function (ev) {
ecommerceClass.showAlert(ev.detail);
});The setCustomer is integrated within the Generic.Ecom.Checkout view-component.
There is a helper method checkout.getAddresses(shippingID: string, billingID: string) that will load in existing addresses into the given select elements (by id). This is called by default via:
var addresses = document.body.querySelectorAll("#billingAddresses, #shippingAddresses");
if (addresses.length > 0) {
document.body.dispatchEvent(checkout.getAddressesEvent);
}Sets the shipping address. By default, this is triggered on the change event of elements with the shipping-address class, creates a set-shipping-address event with checkout.setShippingAddressEvent using the values from #shippingAddress.form-control, #shippingAddress2.form-control, #shippingCity.form-control, #shippingCountry , "#shippingState, and #shippingZip.form-control. This event then calls the repository to update.
you can manually call with
checkout.setShippingAddress(address: Address);Once complete, it will dispatch a CustomEvent to the body of type show-alertwith the message in the detail object that you can react to it.
document.body.addEventListener("show-alert", function (ev) {
ecommerceClass.showAlert(ev.detail);
});The setCustomer is integrated within the Generic.Ecom.Checkout view-component.
There is a helper method checkout.getAddresses(shippingID: string, billingID: string) that will load in existing addresses into the given select elements (by id). This is called by default via:
var addresses = document.body.querySelectorAll("#billingAddresses, #shippingAddresses");
if (addresses.length > 0) {
document.body.dispatchEvent(checkout.getAddressesEvent);
}These get the available country or states, used in the Billing/Shipping Addresses. By default, these are called on document load for elements #billingCountry/#shippingCountry and #billingState/#shippingState.
you can manually call with
checkout.getCountries(selectId: string);
checkout.getStates(selectId: string, countryId: Number);By default, if select elements with ids billingCountry or shippingCountry are present, the checkout.getCountries(selectId: string) is called, passing the selector for that element. A change event listener is also added that when changed, it will create a get-states event with checkout.getStatesEvent(selectId: string, countryId: Number), which triggers checkout.getStates(selectId: string, countryId: Number) with the selected country.
This way when a country is selected, the change event triggers the logic to populate the states with the ones found in the selected country.
Gets and sets the Shipping Option. By default, this is triggered on a select element with id shippingOption.
you can manually call with
checkout.getShippingOptions(selectId: string);
checkout.setShippingOptions(id: number);Calling checkout.getShippingOptions(selectId: string) will fill the Shipping Options.
By default, a change event listener is added to the select box which dispatches on the body a custom event set-shipping-option with checkout.setShippingOptionEvent(result: number). This event then triggers a checkout.setShippingOption(id: number) to set the shipping option. This triggers a show-alert event which can be caught by:
document.body.addEventListener("show-alert", function (ev) {
ecommerceClass.showAlert(ev.detail);
});Additionally, by default this event is followed by an update-order event which is used to update the checkout-cart.
The getShippingOption is integrated within the Generic.Ecom.Checkout view-component.
Sets the order note. By default, this is triggered on an input with class order-note.
you can manually call with
checkout.setOrderNote(note: string);By default, a change event listener is attached to the body, and when an element with class order-note is changed, it dispatches on the body a custom even set-order-note with checkout.setOrderNoteEvent(note: string). This event then triggers a checkout.setOrderNote(note: string) to set the order note. This triggers a show-alert event which can be caught by:
document.body.addEventListener("show-alert", function (ev) {
ecommerceClass.showAlert(ev.detail);
});The setOrderNote is integrated within the Generic.Ecom.Checkout view-component.
Sets or removes a coupon code from the order. By default, this is triggered on an input with class order-note.
you can manually call with
checkout.redeemCoupon(coupon: string);
checkout.removeCoupon(coupon: string);For redeeming a coupon, by default, a click event listener is attached to the body, and when an element with class redeem-coupon is clicked, it dispatches on the body a custom even redeem-coupon with checkout.redeemCouponEvent(coupon: string), passing the value of the element input.coupon-code. This event then triggers a checkout.redeemCoupon(coupon: string) to add the coupon. Additional javascript also then clears the coupon input and calls the update-order event to update the cart totals.
For removing a coupon, by default, a click event listener is attached to the body, and when an element with class remove-coupon is clicked, it dispatches on the body a custom event remove-coupon with checkout.removeCouponEvent(coupon: string), passing the value of the sibling element .coupon's innerText. This event then triggers a checkout.removeCoupon(coupon: string) to remove the coupon. Additional javascript also then calls the update-order event to update the cart totals.
The setOrderNote is integrated within the Generic.Ecom.Checkout view-component on the CheckoutCart partial view.
Sets the available payment options. By default, if a select with id paymentMethods is present it will fill it with the available options.
you can manually call with
checkout.getPaymentOptions();
checkout.setPaymentOption(id: number);
checkout.getPaymentForm();By default, if a select with id paymentMethods is present, it calls checkout.getPaymentOptions() and sets the values of the payment options to the select.
Then a change event is added to the selection, that on change it dispatches on the body a custom event set-payment-option event with checkout.setPaymentOptionEvent(result: number), passing the paymentMethods selected value. This event then triggers a checkout.setPaymentOption(id: number), followed by checkout.getPaymentForm() which returns the selected payment form's HTML. This gets set into the #paymentForm's innerHTML element, also evaluating any script tag with the data-initialize attribute on it.
The getPaymentOption/setPaymentOption is integrated within the Generic.Ecom.Checkout view-component. The payment forms are a separate module and customization.
Creates the order before processing payment. Usually called from the payment option.
you can manually call with
checkout.createOrder();By default, simply creates the order based on what has already been set. You may customize to include custom body / headers if you wish. It returns a JSON object of the order, with minimum:
{
orderFailed: boolean,
message: string,
orderGUID: string
// Can be customized to include moreIf the order is successfully created, it sets the orderGUID to the checkout and then dispatches the custom event payment which by default calls the checkout.payment if there is a valid orderGUID and the payment method has been set. The checkout.payment is added by the custom Payment form.
Successful payment should dispatch the custom event payment-result with checkout.getPaymentResultEvent(result: object) which can then call either displays an alert message or redirects to thank you through checkout.redirectToThankYouUrl(url: string). The getPaymentResultEvent should contains an object with minimum:
{
detail: {
paymentSuccessful: boolean,
message: string
}The redirection URL is by default a data-thankyouurl attribute on the #checkout-cart element.
- Installation / Setup
- Design Principle
- Basic Usage
- Operations and Interfaces
- Customization Points
- Creating Custom Payment Gateways