Aprenda a adaptar su aplicación de pago de Android para que funcione con Pagos web y brinde una mejor BenutzererfahrungEl término experiencia de usuario (UX) se refiere a la experiencia que un usuario tiene con un producto o servicio. En cuanto a Internet, el término se usa frecuentemente al examinar la experiencia que los usuarios disponen con una web. Esto además puede ser en referencia al uso de un dispositivo smartphone (UX smartphone). Items de la experiencia del usuario La experiencia del usuario y la usabilidad se usan frecuentemente Plus a los clientes.
das Zahlungsanforderungs-API trae a la web una interfaz integrada basada en BrowserUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los Plus que permite a los usuarios ingresar la información de pago requerida más fácil que nunca. La APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene Plus también puede invocar aplicaciones de pago específicas de la plataforma.
Im Vergleich zur Verwendung von nur Android Intents ermöglichen Webzahlungen eine bessere Browserintegration, Sicherheit und Benutzererfahrung:
- Die Zahlungsanwendung wird modal im Kontext der Website des Händlers gestartet.
- Die Implementierung ergänzt Ihre bestehende Zahlungsanwendung und ermöglicht es Ihnen, Ihre Benutzerbasis zu nutzen.
- Die Signatur der Zahlungs-App wird überprüft, um dies zu vermeiden
seitliche Belastung. - Zahlungs-Apps können mehrere Zahlungsmethoden unterstützen.
- Se puede integrar cualquier método de pago, como criptomonedas, transferencias bancarias y más. Las aplicaciones de pago en dispositivos Android pueden incluso integrar métodos que requieren acceso al chip de Hardware-En informática, el término hardware se refiere a cualquier componente de un sistema informático que sea un objeto físico real, al contrario que el software que existe en forma digital. Esto incluye el disco duro y las unidades incorporadas, es decir, todos los componentes que son "duros", de ahí su nombre. Desarrollo El desarrollo del hardware informático comienza con la creación de los primeros ordenadores y tiene su verdadero origen Plus en el dispositivo.
Es sind vier Schritte erforderlich, um Webzahlungen in einer Android-Zahlungsanwendung zu implementieren:
- Lassen Sie Händler Ihre Zahlungsanwendung entdecken.
- Informieren Sie einen Händler, wenn ein Kunde über ein registriertes Instrument (z. B. eine Kreditkarte) verfügt, dass er zur Zahlung bereit ist.
- Lassen Sie einen Kunden die Zahlung leisten.
- Überprüfen Sie das Signaturzertifikat des Anrufers.
Informationen zum Anzeigen von Webzahlungen in Aktion finden Sie unter
Zahlung-Web-Android
Manifestation.
Schritt 1: Lassen Sie Händler Ihre Zahlungs-App entdecken
Damit ein Händler Ihre Zahlungsanwendung verwenden kann, muss er die verwenden Zahlungsanforderungs-API und geben Sie die Zahlungsmethode an, die Sie mit dem unterstützen Kennung der Zahlungsmethode.
Wenn Sie eine eindeutige Zahlungsmethoden-ID für Ihre Zahlungs-App haben, können Sie Ihre festlegen Zahlungsmethode manifest para que los BrowserConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet Plus puedan descubrir su aplicación.
Schritt 2: Informieren Sie einen Händler, wenn ein Kunde ein registriertes Instrument hat, dass er bereit ist zu zahlen
Der Händler kann anrufen hasEnrolledInstrument () um zu sehen, ob der Kunde eine Zahlung leisten kann. Sie können implementieren IS_READY_TO_PAY als Android-Dienst zur Beantwortung dieser Frage.
AndroidManifest.xml
Deklarieren Sie Ihren Service mit einem Absichtsfilter mit Aktion
org.chromium.intent.action.IS_READY_TO_PAY.
<Bedienung
android:Süßkartoffel=".SampleIsReadyToPayService"
android:exported="wahr">
<intent-filter>
<Aktion android:Süßkartoffel="org.chromium.intent.action.IS_READY_TO_PAY" />
</intent-filter>
</Bedienung>
das IS_READY_TO_PAY Der Service ist optional. Wenn die Zahlungsanwendung keinen solchen Intent-Handler enthält, geht der Webbrowser davon aus, dass die Anwendung jederzeit Zahlungen ausführen kann.
AIDL
Die API für IS_READY_TO_PAY el servicio está definido en AIDL. Cree dos archivos AIDL con el siguiente InhaltEl contenido puede ser muy difícil de definir con precisión. Es una definición que se refiere a las declaraciones contenidas en un documento o publicación de cualquier tipo y puede incluir las tecnologías de la información y la comunicación. Esto cubre todos los tipos de medios como imágenes y texto. A parte de esto, en el campo de la optimización de motores de búsqueda, los términos duplicar contenido, contenido único, Plus:
AppConcepto de APP¿Qué es una APP?Una App es todo aquel programa que se ejecuta desde una interfaz teléfono celular, es decir, desde un móvil o una tablet. Consiste en la herramienta principal para cualquier usuario que tenga un teléfono teléfono celular, de todo el software que se mueve en tiendas digitales como Google Play Store o la App Store y que tanto se adentra en cualquier terminal moderno.Es un concepto Plus / src / main / aidl / org / chromium / IsReadyToPayServiceCallback.aidl
package org.chromium;
interface IsReadyToPayServiceCallback {
oneway void handleIsReadyToPay(boolean isReadyToPay);
}
app / src / main / aidl / org / chrom / IsReadyToPayService.aidl
package org.chromium;
importieren org.chromium.IsReadyToPayServiceCallback;interface IsReadyToPayService {
oneway void isReadyToPay(IsReadyToPayServiceCallback callback);
}
Implementieren IsReadyToPayService
Die einfachste Implementierung von IsReadyToPayService im folgenden Beispiel gezeigt:
Klasse SampleIsReadyToPayService : Service() {
private val binder = object : IsReadyToPayService.Stub() {
override fun isReadyToPay(Rückrufen: IsReadyToPayServiceCallback?) {
Rückrufen?.handleIsReadyToPay(wahr)
}
}override fun onBind(Ich habe es versucht: Absicht?): IBinder? {
Rückkehr binder
}
}
Parameter
Übergeben Sie die folgenden Parameter an onBind als Absichts-Extras:
methodNamesmethodDatatopLevelOrigintopLevelCertificateChaintopLevelCertificateChainpaymentRequestOrigin
override fun onBind(Ich habe es versucht: Absicht?): IBinder? {
val extras: Bündeln? = Ich habe es versucht?.extras
}
methodNames
Die Namen der abgefragten Methoden. Die Elemente sind die Schlüssel in der
methodData Wörterbuch und geben Sie die Methoden an, die die Zahlungsanwendung unterstützt.
val methodNames: Liste<String>? = extras.getStringArrayList("methodNames")
methodData
Eine Zuordnung jeder Eingabe von methodNames zum
methodData.
val methodData: Bündeln? = extras.getBundle("methodData")
topLevelOrigin
Der Ursprung des Händlers ohne das Schema (der Ursprung ohne das Schema des Navigationskontexts der obersten Ebene). Zum Beispiel, httpsHTTPS (protocolo de Transferencia de Hiper-Texto) es un protocolo que permite determinar una conexión segura entre el servidor y el cliente, que no puede ser interceptada por personas no autorizadas. En resumidas cuentas, es la versión segura de el http (Hyper Text Transfer Protocol) Cómo funciona Una conexión HTTP estándar en Internet puede ser fácilmente secuestrada por partes no autorizadas. El propósito de una conexión HTTPS es evitar esto: encriptar Plus://mystore.com/checkout es wird wie vergehen mystore.com.
val topLevelOrigin: String? = extras.getString("topLevelOrigin")
topLevelCertificateChain
La cadena de certificados del comerciante (la cadena de certificados del contexto de navegación de nivel superior). Nulo para localhost y archivo en disco, que son contextos seguros sin certificados SSLLa encriptación SSL (Secure Socket Layer) proporciona una conexión segura entre el cliente y el servidor. Consiste en un protocolo de Internet que permite encriptar datos sensibles (como información de pago, datos de tarjetas de crédito) y hacerlos ilegibles a terceros. Al mismo tiempo, un certificado confirma que el servidor es fiable. En este momento, además se le llama TLS (Transport Layer Security). Relevancia SSL es un método de cifrado Plus. La cadena de certificados es necesaria porque una aplicación de pago puede tener diferentes requisitos de confianza para los sitios web.
val topLevelCertificateChain: Array<Paketierbar>? =
extras.getParcelableArray("topLevelCertificateChain")
Jeder Paketierbar ist ein Bündeln mit einer "Zertifikat" Schlüssel und ein Byte-Array-Wert.
val list: Liste<ByteArray>? = topLevelCertificateChain?.mapNotNull { p ->
(p As Bündeln).getByteArray("Zertifikat")
}
paymentRequestOrigin
El origen sin esquema del contexto de navegación de iframeConcepto de Iframe¿Qué es un Iframe?Un Iframe es un documento de una web que se inserta en otra página web. Consiste en un elemento que puede albergar cualquier tipo de contenido en su interior y que ayuda, entre otras cosas, a ampliar el mensaje que se ofrece con fuentes externas o con material complementario que pueda resultar de interés para el usuario que entra.Este elemento web se usa especialmente al Plus que invocaba neue PaymentRequest (methodData, Details, Optionen) constructor en JavaScriptJavaScript es un lenguaje de programación que funciona en el lado del cliente y con el que las webs pueden ser más funcionales. Incorporación en código HTML El código JavaScript puede ser incrustado en las páginas HTML, para que adquieran funcionalidad. Existen varias opciones. Puede estar entre las etiquetas <SCRIPT> y </SCRIPT>, puede estar contenido en un archivo externo, puede ser un parámetro de las etiquetas HTML, y puede estar Plus. Si el constructor fue invocado desde el contexto de nivel superior, entonces el valor de este parámetro es igual al valor de topLevelOrigin Parameter.
val paymentRequestOrigin: String? = extras.getString("paymentRequestOrigin")
Antworten
Der Dienst kann seine Antwort durch senden handleIsReadyToPay (Boolean) Methode.
Rückrufen?.handleIsReadyToPay(wahr)
Entschuldigen Sie mich
Sie können verwenden Binder.getCallingUid () um zu überprüfen, wer der Anrufer ist. Beachten Sie, dass Sie dies in der tun müssen isReadyToPay Methode, nicht die onBind Methode.
override fun isReadyToPay(Rückrufen: IsReadyToPayServiceCallback?) {
try {
val callingPackage = packageManager.getNameForUid(Binder.getCallingUid())
Informationen zum Überprüfen, ob das anrufende Paket die richtige Signatur hat, finden Sie unter Überprüfen des Signaturzertifikats des Anrufers.
Schritt 3: Lassen Sie einen Kunden auschecken
Der Händler ruft an Show() um den Zahlungsantrag zu starten, damit der Kunde eine Zahlung leisten kann. Die kostenpflichtige App wird über eine Android-Absicht aufgerufen ZAHLEN mit Transaktionsinformationen in den Intent-Parametern.
Der Zahlungsantrag antwortet mit Methodenname y Einzelheiten, die spezifisch für die Zahlungsanwendung sind und für den Browser undurchsichtig sind. Der Browser konvertiert die Einzelheiten
Zeichenfolge in einem JavaScript-Objekt für den Händler über JSON-Deserialisierung, aber darüber hinaus keine Gültigkeit. Der Browser ändert das nicht
Einzelheiten;; Der Wert dieses Parameters wird direkt an den Händler übergeben.
AndroidManifest.xml
Die Aktivität mit dem ZAHLEN Der Absichtsfilter muss a haben Ein Tag, das die Standardkennung der Zahlungsmethode für die Anwendung angibt.
Fügen Sie a hinzu, um mehrere Zahlungsmethoden zu unterstützen Etikett mit a
Ressource.
<activity
android:Süßkartoffel=".PaymentActivity"
android:Thema="@style/Theme.SamplePay.Dialog">
<intent-filter>
<Aktion android:Süßkartoffel="org.chromium.intent.action.PAY" />
</intent-filter><meta-data
android:Süßkartoffel="org.chromium.default_payment_method_name"
android:Wert="https://bobpay.xyz/pay" />
<meta-data
android:Süßkartoffel="org.chromium.payment_method_names"
android:Ressource="@array/method_names" />
</activity>
das Ressource debe ser una lista de cadenas, cada una de las cuales debe ser una UrlEl URL (Localizador Uniforme de Recursos), es una dirección definida que apunta a la posición de un archivo en un servidor y lo recupera. Las URL se introducen en un navegador web para ingresar a documentos en la web o se incrustan como hipervínculos dentro de un documento. Se puede usar un Permalink para que una URL esté disponible de forma permanente. Componentes de una URL • prefijo de protocolo Plus absoluta válida con un esquema HTTPS como se muestra aquí.
<?xml version="1.0" encoding="utf-8"?>
<Ressourcen>
<string-array Süßkartoffel="method_names">
<Artikel>https://alicepay.com/put/optional/path/here</Artikel>
<Artikel>https://charliepay.com/put/optional/path/here</Artikel>
</string-array>
</Ressourcen>
Parameter
Die folgenden Parameter werden als Absichts-Extras an die Aktivität übergeben:
methodNamesmethodDatatopLevelOrigintopLevelCertificateChainpaymentRequestOrigingesamtModifikatorenpaymentRequestId
val extras: Bündeln? = Ich habe es versucht?.extras
methodNames
Die Namen der verwendeten Methoden. Die Elemente sind die Schlüssel in der
methodData Wörterbuch. Dies sind die Methoden, die die Zahlungsanwendung unterstützt.
val methodNames: Liste<String>? = extras.getStringArrayList("methodNames")
methodData
Eine Zuordnung von jedem der methodNames zum
methodData.
val methodData: Bündeln? = extras.getBundle("methodData")
Händlername
Der Inhalt der Etikette HTMLHTML (Hypertext Markup Language) se usa para estructurar el contenido de texto de un documento web. No sólo se marca el contenido, sino además la meta-información que describe este contenido. Las páginas HTML se almacenan normalmente en el directorio raíz del servidor. Cómo se creó En la era digital, a los usuarios les resulta difícil hallar su camino en las webs y hacer un seguimiento de las estructuras de las Plus de la página de pago del comerciante (el contexto de navegación de nivel superior del navegador).
val merchantName: String? = extras.getString("merchantName")
topLevelOrigin
Der Ursprung des Händlers ohne das Schema (Der Ursprung ohne das Schema des Navigationskontexts der obersten Ebene). Zum Beispiel, https://mystore.com/checkout es passiert wie mystore.com.
val topLevelOrigin: String? = extras.getString("topLevelOrigin")
topLevelCertificateChain
Die Zertifikatkette des Händlers (die Zertifikatkette aus dem Navigationskontext der obersten Ebene). Null für localhost und Datei auf der Festplatte, die sichere Kontexte ohne SSL-Zertifikate sind. Jeder Paketierbar Es ist ein Paket mit einem
Zertifikat Schlüssel und ein Byte-Array-Wert.
val topLevelCertificateChain: Array<Paketierbar>? =
extras.getParcelableArray("topLevelCertificateChain")
val list: Liste<ByteArray>? = topLevelCertificateChain?.mapNotNull { p ->
(p As Bündeln).getByteArray("Zertifikat")
}
paymentRequestOrigin
Die Nicht-Schema-Quelle des aufgerufenen Iframe-Navigationskontexts neue PaymentRequest (methodData, Details, Optionen) Konstruktor in JavaScript. Wenn der Konstruktor aus dem Kontext der obersten Ebene aufgerufen wurde, entspricht der Wert dieses Parameters dem Wert von topLevelOrigin Parameter.
val paymentRequestOrigin: String? = extras.getString("paymentRequestOrigin")
gesamt
Die JSON-Zeichenfolge, die den Gesamtbetrag der Transaktion darstellt.
val gesamt: String? = extras.getString("total")
Hier ist ein Beispiel für den Inhalt von Zeichenfolgen:
{"currency":"USD","value":"25.00"}
Modifikatoren
Die Ausgabe von JSON.stringify (details.modifiers), wo details.modifiers
nur enthalten unterstützte Methoden y gesamt.
paymentRequestId
das PaymentRequest.id Feld, das Anwendungen für die automatische Zahlung mit dem Status der Transaktion verknüpfen sollen. Händler-Websites verwenden dieses Feld, um "Auto Pay" -Anwendungen nach dem Out-of-Band-Transaktionsstatus abzufragen.
val paymentRequestId: String? = extras.getString("paymentRequestId")
Antworten
Die Aktivität kann ihre Antwort durch senden setResult mit RESULT_OK.
setResult(Activity.RESULT_OK, Absicht().apply {
putExtra("methodName", "https://bobpay.xyz/pay")
putExtra("details", "{"token": "put-some-data-here"}")
})
finish()
Sie müssen zwei Parameter als Absichts-Extras angeben:
Methodenname: Der Name der verwendeten Methode.Einzelheiten: JSON-Zeichenfolge mit den Informationen, die der Händler zum Abschließen der Transaktion benötigt. Wenn Erfolg istwahr, dannEinzelheitenmuss so konstruiert sein, dassJSON.parse (Details)es könnte passieren.
Du kannst passieren RESULT_CANCELED Wenn die Transaktion in der Zahlungsanwendung nicht abgeschlossen wurde, z. B. wenn der Benutzer in der Zahlungsanwendung nicht den richtigen PIN-Code für sein Konto eingegeben hat. Der Browser kann es dem Benutzer ermöglichen, eine andere Zahlungsanwendung auszuwählen.
setResult(RESULT_CANCELED)
finish()
Wenn das Aktivitätsergebnis einer von der aufgerufenen Zahlungsanwendung empfangenen Zahlungsantwort auf gesetzt ist RESULT_OKDann prüft Chrome, ob es nicht leer ist Methodenname y
Einzelheiten in Ihren Extras. Wenn die Validierung fehlschlägt, gibt Chrome ein abgelehntes Versprechen von zurück request.show () mit einer der folgenden Fehlermeldungen für Entwickler:
'Payment app returned invalid response. Missing field "details".'
'Payment app returned invalid response. Missing field "methodName".'
Entschuldigen Sie mich
Die Aktivität kann den Anrufer mit ihrem überprüfen getCallingPackage () Methode.
val caller: String? = callingPackage
Der letzte Schritt besteht darin, das Signaturzertifikat des Anrufers zu überprüfen, um zu bestätigen, dass das anrufende Paket die richtige Signatur hat.
Schritt 4: Überprüfen Sie das Signaturzertifikat des Anrufers
Sie können den Paketnamen des Anrufers mit überprüfen Binder.getCallingUid () im
IS_READY_TO_PAY, und mit Activity.getCallingPackage () im ZAHLEN. Um wirklich zu überprüfen, ob der Anrufer der Browser ist, an den Sie denken, müssen Sie das Signaturzertifikat überprüfen und sicherstellen, dass es mit dem richtigen Wert übereinstimmt.
Si tiene como Ziel¿Qué es un objetivo?En marketing, un objetivo es el resultado que se pretende alcanzar en un periodo de tiempo, a través el uso de los recursos disponibles. Por tanto, se debe formular de una forma clara y hace falta que sea accesible y medible. Plus el nivel de API 28 y superior y se está integrando con un navegador que tiene un solo certificado de firma, puede usar
PackageManager.hasSigningCertificate ().
val packageName: String = …
val Zertifikat: ByteArray = …
val verified = packageManager.hasSigningCertificate(
callingPackage,
Zertifikat,
PackageManager.CERT_INPUT_SHA256
)
PackageManager.hasSigningCertificate () Es wird für einzelne Zertifikatbrowser bevorzugt, da die Zertifikatrotation korrekt ausgeführt wird. (Chrome hat nur ein Signaturzertifikat.) Anwendungen mit mehreren Signaturzertifikaten können diese nicht drehen.
Wenn Sie API-Levels unterstützen müssen, die älter als 27 Jahre oder niedriger sind, oder wenn Sie Browser mit mehreren Signaturzertifikaten verarbeiten müssen, können Sie diese verwenden
PackageManager.GET_SIGNATURES.
val packageName: String = …
val certificates: einstellen<ByteArray> = … val packageInfo = getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
val sha256 = MessageDigest.getInstance("SHA-256")
val signatures = packageInfo.signatures.map { sha256.digest(Artikel.toByteArray()) }
val verified = signatures.Größe == certificates.Größe &AmpereConcepto de AMP¿Qué es el AMP o Accelerated Mobile Pages?El AMP, abreviatura de Accelerated Mobile Pages, es una propuesta que empezó a tomar forma en el año 2016 con la finalidad de mejorar la usabilidad, lectura y, en general, la experiencia de los usuarios de teléfono celular dentro de cualquier página web. Emprendida por Google con un aperturismo total (es de código abierto), lleva en activo desde entonces para facilitar Plus;&
signatures.Dort { s -> certificates.any { Artikel.contentEquals(s) } }




