Detección del fin del pago

Para detectar el fin del pago, es necesario analizar las distintas URL que pasan por WebView.

En función de la URL, la aplicación móvil podrá:

  • Aceptar la propagación de la URL y mostrar la página en WebView
    (por ejemplo, durante una solicitud de pago, para permitir que el comprador realice su pago)
  • Rechazar la propagación de la URL y retomar el control.
    (por ejemplo, al final de un pago exitoso, para permitir que el comprador regrese a la aplicación nativa)

Gracias a un mecanismo de vigilancia de las URL, usted mantiene el control sobre la cinemática de pago y puede decidir en qué momento se vuelve a su aplicación nativa.

Extracto del ejemplo de código para Android (Kotlin)

private fun checkUrl(view: WebView, url: String): Boolean {
	val isCallBack = isCallbackUrl(url)

	when {
		// payment is finish
		isCallBack -> {
			view.stopLoading()
			goToFinalActivity(url)
		}		
		else -> view.loadUrl(url)
	}
	return (!isCallBack)
}		

Extracto del ejemplo de código para iOS (Swift):

/// Notify end of payment, find payment status and notify to LyraPaymentService
func notifyPaymentFinish(navigationAction: WKNavigationAction){
	let webViewUrlResponse = self.buildWebviewUrlResponse(navigationAction: navigationAction)
	var error: NSError?
	switch webViewUrlResponse.paymentStatus {
		case "success":
			error = nil
		case "cancel":
			error = NSError.init(domain: PayZenPayment.ERROR_DOMAIN, code: PayZenPayment.ERROR_PAYMENT_CANCELATION.errorCode, userInfo: [NSLocalizedFailureReasonErrorKey: PayZenPayment.ERROR_PAYMENT_CANCELATION.errorMsg])
		case "refused":
			error = NSError.init(domain:PayZenPayment.ERROR_DOMAIN, code: PayZenPayment.ERROR_PAYMENT_REFUSED.errorCode, userInfo: [NSLocalizedFailureReasonErrorKey: PayZenPayment.ERROR_PAYMENT_REFUSED.errorMsg])
		default:
			error = NSError.init(domain:PayZenPayment.ERROR_DOMAIN, code: PayZenPayment.ERROR_UNKNOW.errorCode, userInfo: [NSLocalizedFailureReasonErrorKey: PayZenPayment.ERROR_UNKNOW.errorMsg])

	}
	self.dismiss(animated: true) {
		self.paymentDelegate?.didPaymentProcessFinish(error: error)
	}
}