Printing

Printing configuration

Our SDK exposes APIs to print receipts after a payment. If printing capabilities are required for your use case, ensure you set up printer configuration after SDK initialisation or before making a payment.

Use the PrinterConfig class to pass in desired functionality for printing.

Supported PrinterProvider values

Here is a list of supported print providers:

PrinterProviderValueBehaviour
None (default)PrinterProvider.NONENo print button shown.
SDKPrinterProvider.SDKPrint button shown if integrated printer available.
ExternalPrinterProvider.EXTERNALPrint button shown always, printing handled externally by integrator.
Basic printing configuration
1YocoSDK.setPrinterConfig(
2 PrinterConfig(
3 printerProvider = PrinterProvider.SDK
4 )
5)

When using PrinterProvider.SDK, the SDK will automatically detect attached and integrated printers, and will show the print option on the payment receipt screen.

Print button

Set up PrintParameters when creating a charge.

Lookup with print in charge flow
1val printParams = PrintParameters(
2 clientTransactionId = null, // Provide a clientTransactionId when setting up printing for refund or lookup of a transaction
3 merchantInfo = MerchantInfo(
4 "merchant-id",
5 "merchant-name",
6 "123-456-789",
7 "business address"
8 ),
9 transactionType = TransactionType.GOODS,
10 signature = null,
11 receiptType = ReceiptCopyType.BOTH,
12 printStartListener = ::printStartListener,
13 printerStatusListener = ::printerStatusUpdate,
14 printResultListener = ::printResultUpdate,
15 metadata = null
16)
17
18YocoSDK.charge(
19 // required parameters
20 context = context,
21 amountInCents = amount,
22 paymentType = PaymentType.CARD,
23 currency = SupportedCurrency.ZAR,
24 // optional: parameters
25 tippingConfig = this.tippingConfig, //defaults to TippingConfig.DO_NOT_ASK_FOR_TIP
26 printerConfig = this.printerConfig,
27 paymentParameters = paymentParams,
28 printParameters = printParams
29)
30
31private fun printStartListener(paymentResult: PaymentResult, progress: UpdatePrintProgress) {
32 lifecycleScope.launch {
33 delay(1000)
34 progress(PrintState.InProgress("Printing"))
35 delay(1000)
36 if (printSuccess) {
37 progress(PrintState.Complete())
38 } else {
39 progress(PrintState.Error("No printer"))
40 }
41 }
42}
43
44private fun printerStatusUpdate(status: PrinterStatus) {
45 println("Print Update status: $status")
46}
47
48private fun printResultUpdate(result: PrintResult) {
49 println("Print Update result: $result")
50}

To print receipts for older transactions, a standalone printing flow is provided that takes in a clientTransactionId parameter in PrintParameters to perform both lookup and print.

Lookup with print usage
1private val printResult: ActivityResultLauncher<Intent> =
2 registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
3 System.err.println("Result Code: ${result.resultCode}") // PaymentSDK.Response.ResultCode
4 val printResult: PrintResult? =
5 result.data?.getSerializableExtra(PaymentResultInfo.ResultKeys.Print) as PrintResult?
6 System.err.println("Print Result: $printResult")
7 }
8
9YocoSDK.print(
10 requireContext(),
11 PrintParameters(
12 clientTransactionId = transactionIdStr,
13 printerConfig = PrinterConfig(
14 autoPrint = false
15 ),
16 merchantInfo = MerchantInfo("merchant-id", "merchant-name", "123-456-789", "business address"),
17 transactionType = TransactionType.GOODS,
18 signature = null,
19 metadata = null
20 ),
21 result = printResult
22)