Skip to main content

Printing

Printing configuration

Set up printer configuration after SDK intialisation or before making payment, if printing capabilities are required or external printing is required on press of print button.

Use PrinterConfig class to pass in desired functionality for printing

Parameters

  • printerProvider: PrinterProvider - NONE, SDK, or EXTERNAL

Supported PrinterProviders

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 integator
YocoSDK.setPrinterConfig(
PrinterConfig(
printerProvider = PrinterProvider.SDK
)
)

info

Attached and integrated printers (now supported with NEO plus bundle) are auto-detected presenting the print option on payment receipt screen when PrinterProvider.SDK is configured.

Set up PrintParameters when creating a charge

Parameters

  • clientTransactionId: String - Client transaction id returned when creating charge
  • merchantInfo: MerchantInfo - Merchant information
  • transactionType: TransactionType - TransactionType.GOODS for a charge and TransactionType.REFUND for printing of refunds
  • signature: Bitmap - signature bitmap if available
  • printStartListener: ((paymentResult: PaymentResult, progress: UpdatePrintProgress)) - start listener allows control of displaying printing progress using the UpdatePrintProgress callback. Used with EXTERNAL PrinterProvider.
  • printerStatusListener: ((status: PrinterStatus)) - listens for printer status updates for integrated printers
  • printResultListener: ((result: PrintResult)) - listens for print result
import com.yoco.payments.sdk.data.params.MerchantInfo
import com.yoco.payments.sdk.data.params.PrintParameters
import com.yoco.payments.sdk.data.params.PrinterConfig
...
// A charge was created here
YocoSDK.charge(
// required parameters
context = context,
amountInCents = amount,
paymentType = PaymentType.CARD,
currency = SupportedCurrency.ZAR,
// optional: parameters
tippingConfig = this.tippingConfig, //defaults to TippingConfig.DO_NOT_ASK_FOR_TIP
printerConfig = this.printerConfig,
paymentParameters = paymentParams,
printParameters = PrintParameters(
clientTransactionId = null, // Provide a clientTransactionId when setting up printing for refund or lookup of a transaction
merchantInfo = MerchantInfo(
"merchant-id",
"merchant-name",
"123-456-789",
"business address"
),
transactionType = TransactionType.GOODS,
signature = null,
printStartListener = ::printStartListener,
printerStatusListener = ::printerStatusUpdate,
printResultListener = ::printResultUpdate,
metadata = null
)
)

private fun printStartListener(paymentResult: PaymentResult, progress: UpdatePrintProgress) {
lifecycleScope.launch {
delay(1000)
progress(PrintState.InProgress("Printing"))
delay(1000)
if (printSuccess) {
progress(PrintState.Complete())
} else {
progress(PrintState.Error("No printer"))
}
}
}

private fun printerStatusUpdate(status: PrinterStatus) {
println("Print Update status: $status")
}

private fun printResultUpdate(result: PrintResult) {
println("Print Update result: $result")
}

In order to print receipts for older transactions, a standalone printing flow is provided that takes in clientTransactionId param in PrintParameters to perform lookup and print. Example usage is given below:

Parameters

  • context: Context - activity/fragment context
  • printParameters: PrintParameters - parameters required to complete print job
  • result: ActivityResultLauncher<Intent> - activity result handler to receive activity result
import com.yoco.payments.sdk.data.result.PrintResult
import com.yoco.payments.sdk.data.params.MerchantInfo
import com.yoco.payments.sdk.data.params.PrintParameters
import com.yoco.payments.sdk.data.params.PrinterConfig
import com.yoco.payments.sdk.data.delegates.UpdateReceiptProgress
import com.yoco.payments.sdk.data.enums.ReceiptState
import com.yoco.payments.sdk.data.enums.SupportedReceiptType

...
private val printResult: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
System.err.println("Result Code: ${result.resultCode}") // PaymentSDK.Response.ResultCode
val printResult: PrintResult? =
result.data?.getSerializableExtra(PaymentResultInfo.ResultKeys.Print) as PrintResult?
System.err.println("Print Result: $printResult")
}
...
YocoSDK.print(
requireContext(),
PrintParameters(
clientTransactionId = transactionIdStr,
printerConfig = PrinterConfig(
autoPrint = false
),
merchantInfo = MerchantInfo("merchant-id", "merchant-name", "123-456-789", "business address"),
transactionType = TransactionType.GOODS,
signature = null,
metadata = null
),
result = printResult
)