PaymentsService Example

Here’s a basic example of a Lightning web component minimal HTML template that includes a button that initiates collecting payment.
1<template>
2    <lightning-card title="Payment Processing">
3        <div class="slds-m-around_medium">
4            <lightning-button 
5                label="Validate Supported Methods" 
6                onclick={handleValidateMethods} 
7                variant="neutral"
8                class="slds-m-right_x-small">
9            </lightning-button>
10            <lightning-button 
11                label="Collect Payment" 
12                onclick={handleCollectPayment} 
13                variant="brand">
14            </lightning-button>
15        </div>
16<div class="slds-var-m-around_medium">
17      <div if:true={spinnerEnabled} class="spinnerHolder">
18        <lightning-spinner alternative-text="Processing" size="large"></lightning-spinner>
19      </div>
20      <lightning-formatted-rich-text value={paymentsServiceResponse}></lightning-formatted-rich-text>
21    </div>
22    </lightning-card>
23</template>

This example uses PaymentsService to let the user collect a payment.

1import { LightningElement, track } from 'lwc';
2import { ShowToastEvent } from 'lightning/platformShowToastEvent';
3import { getPaymentsService } from 'lightning/mobileCapabilities';
4
5
6export default class PaymentsService extends LightningElement {
7    myPaymentsService;
8    paymentServiceUnavailable = false;
9    tapToPayUnAvailable = true;
10    
11    paymentsServiceResponse = '';
12    spinnerEnabled = false;
13    amountValue = '150.00';
14    currencyCodeValue = 'USD';
15    paymentMethodValue = 'TAP_TO_PAY';
16    merchantNameValue = 'Play Board';
17    merchantAccountIdValue = '8zbXXXXXXXXXXXXX';
18    payerAccountIdValue = '001XXXXXXXXXXXXX';
19    sourceObjectIdValue = 'XXXXXXXXXXXXXXXX';
20
21
22    showSpinner() { this.spinnerEnabled = true; }
23    hideSpinner() { this.spinnerEnabled = false; }
24
25
26    // When the component is initialized, determine whether to enable the buttons
27    connectedCallback() {
28        this.myPaymentsService = getPaymentsService();
29        if (!this.myPaymentsService?.isAvailable()) {
30            this.paymentServiceUnavailable = true;
31            this.paymentsServiceResponse = 'Payments Service is unavailable.';
32        }
33    }
34
35
36    processResult(result) {
37		var confirmationId = JSON.stringify(result.guid, undefined, 2);
38		var confirmationStatus = JSON.stringify(result.status, undefined, 2);
39        this.paymentsServiceResponse = "Confirmation Status: " + confirmationStatus + ", Confirmation ID: " + confirmationId;
40    }
41
42
43    processError(error) {
44        // The user canceled the operation
45        if (error.code === 'USER_DISMISSED') {
46            this.dispatchEvent(
47                new ShowToastEvent({
48                    title: 'Operation Canceled',
49                    message: 'Operation canceled by the user.',
50                    mode: 'sticky'
51                })
52            );
53        } 
54        else {
55        // There was some other kind of error so inform the user we ran into something unexpected
56
57
58            this.dispatchEvent(
59                new ShowToastEvent({
60                    title: 'Payments Service Error',
61                    message: 'Message: ${error.message}\nCode: ${error.code}',
62                    variant: 'error',
63                    mode: 'sticky'
64                })
65            );
66        }
67    }
68
69
70    handleBeginSupportedMethodsClick() {
71        let options = {
72            'countryIsoCode': this.currencyCodeValue,
73            'merchantAccountId': this.merchantAccountIdValue
74        }
75
76
77        this.paymentsServiceResponse = '';
78        this.showSpinner();
79
80
81        this.myPaymentsService.getSupportedPaymentMethods(options)
82        .then((result) => {
83			if (result.contains("TAP_TO_PAY")) {
84            		this.tapToPayUnAvailable = false;
85}
86            
87        })
88        .catch((error) => {
89            this.tapToPayUnAvailable = true;
90        })
91        .finally(() => this.hideSpinner());
92    }
93
94
95    handleBeginCollectPaymentClick() {
96        
97        let options = {
98            'amount': Number(this.amountValue),
99            'currencyIsoCode': this.currencyCodeValue,
100            'paymentMethod': this.paymentMethodValue,
101            'merchantName': this.merchantNameValue,
102            'merchantAccountId': this.merchantAccountIdValue,
103            'payerAccountId': this.payerAccountIdValue,
104            'sourceObjectIds': [this.sourceObjectIdValue]
105        }
106
107
108        this.paymentsServiceResponse = '';
109        this.showSpinner();
110        
111        this.myPaymentsService.collectPayment(options)
112        .then((result) => this.processResult(result))
113        .catch((error) => this.processError(error))
114        .finally(() => this.hideSpinner());
115    }
116}