Aprenda a adaptar su aplicación de pago de Android para que funcione con Pagos web y brinde una mejor expérience utilisateurEl 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 Suite a los clientes.
Les API de demande de paiement trae a la web una interfaz integrada basada en le navigateurUn 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 Suite 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 Suite también puede invocar aplicaciones de pago específicas de la plataforma.
Par rapport à l'utilisation d'Android Intents uniquement, les paiements Web permettent une meilleure intégration du navigateur, une meilleure sécurité et une meilleure expérience utilisateur:
- L'application de paiement est lancée en mode modal, dans le cadre du site Internet du commerçant.
- La mise en œuvre est complémentaire à votre application de paiement existante, vous permettant de profiter de votre base d'utilisateurs.
- La signature de l'application de paiement est vérifiée pour éviter
charge latérale. - Les applications de paiement peuvent prendre en charge plusieurs méthodes de paiement.
- 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 MatérielEn 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 Suite en el dispositivo.
La mise en œuvre des paiements Web dans une application de paiement Android comporte quatre étapes:
- Faites découvrir aux commerçants votre application de paiement.
- Informez un commerçant si un client a un instrument enregistré (comme une carte de crédit) qu'il est prêt à payer.
- Laissez un client effectuer le paiement.
- Vérifiez le certificat de signature de l'appelant.
Pour voir les paiements Web en action, consultez le
paiement-web-android
manifestation.
Étape 1: laissez les marchands découvrir votre application de paiement
Pour qu'un commerçant utilise votre application de paiement, il doit utiliser le API de demande de paiement et spécifiez le mode de paiement que vous prenez en charge en utilisant le identifiant du moyen de paiement.
Si vous disposez d'un identifiant de mode de paiement unique pour votre application de paiement, vous pouvez définir le vôtre manifeste du mode de paiement para que los navigateursConcepto 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 Suite puedan descubrir su aplicación.
Étape 2: Informer un commerçant si un client a un instrument enregistré qu'il est prêt à payer
Le commerçant peut appeler hasEnrolledInstrument () pour voir si le client peut effectuer un paiement. Vous pouvez mettre en œuvre IS_READY_TO_PAY en tant que service Android pour répondre à cette requête.
AndroidManifest.xml
Déclarez votre service avec un filtre d'intention avec action
org.chromium.intent.action.IS_READY_TO_PAY.
<un service
android:patate douce=".SampleIsReadyToPayService"
android:exported="vrai">
<intent-filter>
<action android:patate douce="org.chromium.intent.action.IS_READY_TO_PAY" />
</intent-filter>
</un service>
Les IS_READY_TO_PAY le service est facultatif. Si un tel gestionnaire d'intention n'existe pas dans l'application de paiement, le navigateur Web suppose que l'application peut toujours effectuer des paiements.
AIDL
L'API pour IS_READY_TO_PAY el servicio está definido en AIDL. Cree dos archivos AIDL con el siguiente ContenuEl 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, Suite:
appliConcepto 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 Suite / src / main / aidl / org / chromium / IsReadyToPayServiceCallback.aidl
package org.chromium;
interface IsReadyToPayServiceCallback {
oneway void handleIsReadyToPay(boolean isReadyToPay);
}
app / src / main / aidl / org / chrome / IsReadyToPayService.aidl
package org.chromium;
importer org.chromium.IsReadyToPayServiceCallback;interface IsReadyToPayService {
oneway void isReadyToPay(IsReadyToPayServiceCallback callback);
}
Mettre en œuvre IsReadyToPayService
La mise en œuvre la plus simple de IsReadyToPayService illustré dans l'exemple suivant:
classer SampleIsReadyToPayService : Service() {
private val binder = object : IsReadyToPayService.Stub() {
override fun isReadyToPay(rappeler: IsReadyToPayServiceCallback?) {
rappeler?.handleIsReadyToPay(vrai)
}
}override fun onBind(J'ai essayé: Intention?): IBinder? {
revenir binder
}
}
Paramètres
Passez les paramètres suivants à onBind comme extras Intent:
methodNamesmethodDatatopLevelOrigintopLevelCertificateChaintopLevelCertificateChainpaymentRequestOrigin
override fun onBind(J'ai essayé: Intention?): IBinder? {
val extras: Empaqueter? = J'ai essayé?.extras
}
methodNames
Les noms des méthodes interrogées. Les éléments sont les clés du
methodData dictionnaire et indiquez les méthodes prises en charge par l'application de paiement.
val methodNames: Lister<Chaîne>? = extras.getStringArrayList("methodNames")
methodData
Un mappage de chaque entrée de methodNames au
methodData.
val methodData: Empaqueter? = extras.getBundle("methodData")
topLevelOrigin
L'origine du marchand sans le schéma (l'origine sans le schéma du contexte de navigation de niveau supérieur). Par exemple, 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 Suite://mystore.com/checkout ça passera comme mystore.com.
val topLevelOrigin: Chaîne? = 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 Suite. 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<Colisable>? =
extras.getParcelableArray("topLevelCertificateChain")
Chaque Colisable c'est un Empaqueter avec un "certificat" key et une valeur de tableau d'octets.
val list: Lister<ByteArray>? = topLevelCertificateChain?.mapNotNull { p ->
(p as Empaqueter).getByteArray("certificat")
}
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 Suite que invocaba new PaymentRequest (methodData, détails, options) 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 Suite. Si el constructor fue invocado desde el contexto de nivel superior, entonces el valor de este parámetro es igual al valor de topLevelOrigin paramètre.
val paymentRequestOrigin: Chaîne? = extras.getString("paymentRequestOrigin")
Répondre
Le service peut envoyer sa réponse via handleIsReadyToPay (booléen) méthode.
rappeler?.handleIsReadyToPay(vrai)
Permis
Vous pouvez utiliser Binder.getCallingUid () pour vérifier qui est l'appelant. Notez que vous devez le faire dans le isReadyToPay méthode, pas la onBind méthode.
override fun isReadyToPay(rappeler: IsReadyToPayServiceCallback?) {
try {
val callingPackage = packageManager.getNameForUid(Binder.getCallingUid())
Voir Vérifier le certificat de signature de l'appelant pour savoir comment vérifier que le paquet appelant a la signature correcte.
Étape 3: laissez un client vérifier
Le commerçant appelle Spectacle() pour démarrer l'application de paiement afin que le client puisse effectuer un paiement. L'application payante est appelée via une intention Android PAYER avec les informations de transaction dans les paramètres d'intention.
L'application de paiement répond avec methodName y des détails, qui sont spécifiques à l'application de paiement et sont opaques pour le navigateur. Le navigateur convertit le des détails
Chaîne dans un objet JavaScript pour le marchand via la désérialisation JSON, mais elle n'applique aucune validité au-delà de cela. Le navigateur ne modifie pas le
des détails; la valeur de ce paramètre est transmise directement au commerçant.
AndroidManifest.xml
L'activité avec le PAYER Le filtre d'intention doit avoir un Une balise qui identifie l'identifiant du mode de paiement par défaut pour l'application.
Pour prendre en charge plusieurs modes de paiement, ajoutez un étiquette avec un
Ressource.
<activity
android:patate douce=".PaymentActivity"
android:thème="@style/Theme.SamplePay.Dialog">
<intent-filter>
<action android:patate douce="org.chromium.intent.action.PAY" />
</intent-filter><meta-data
android:patate douce="org.chromium.default_payment_method_name"
android:valeur="https://bobpay.xyz/pay" />
<meta-data
android:patate douce="org.chromium.payment_method_names"
android:Ressource="@array/method_names" />
</activity>
Les 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 Suite absoluta válida con un esquema HTTPS como se muestra aquí.
<?xml version="1.0" encoding="utf-8"?>
<Ressources>
<string-array patate douce="method_names">
<Objet>https://alicepay.com/put/optional/path/here</Objet>
<Objet>https://charliepay.com/put/optional/path/here</Objet>
</string-array>
</Ressources>
Paramètres
Les paramètres suivants sont transmis à l'activité en tant que suppléments d'intention:
methodNamesmethodDatatopLevelOrigintopLevelCertificateChainpaymentRequestOriginle totalmodificateurspaymentRequestId
val extras: Empaqueter? = J'ai essayé?.extras
methodNames
Les noms des méthodes utilisées. Les éléments sont les clés du
methodData dictionnaire. Voici les méthodes prises en charge par l'application de paiement.
val methodNames: Lister<Chaîne>? = extras.getStringArrayList("methodNames")
methodData
Une cartographie de chacun des methodNames au
methodData.
val methodData: Empaqueter? = extras.getBundle("methodData")
Nom du commerçant
Le contenu du Hashtag 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 Suite de la página de pago del comerciante (el contexto de navegación de nivel superior del navegador).
val merchantName: Chaîne? = extras.getString("merchantName")
topLevelOrigin
L'origine du marchand sans le schéma (L'origine sans le schéma du contexte de navigation de niveau supérieur). Par exemple, https://mystore.com/checkout ça se passe comme mystore.com.
val topLevelOrigin: Chaîne? = extras.getString("topLevelOrigin")
topLevelCertificateChain
La chaîne de certificats du commerçant (la chaîne de certificats du contexte de navigation de niveau supérieur). Null pour l'hôte local et le fichier sur le disque, qui sont des contextes sécurisés sans certificats SSL. Chaque Colisable c'est un paquet avec un
certificat key et une valeur de tableau d'octets.
val topLevelCertificateChain: Array<Colisable>? =
extras.getParcelableArray("topLevelCertificateChain")
val list: Lister<ByteArray>? = topLevelCertificateChain?.mapNotNull { p ->
(p as Empaqueter).getByteArray("certificat")
}
paymentRequestOrigin
La source non-schéma du contexte de navigation iframe qui invoquait new PaymentRequest (methodData, détails, options) constructeur en JavaScript. Si le constructeur a été appelé à partir du contexte de niveau supérieur, la valeur de ce paramètre est égale à la valeur de topLevelOrigin paramètre.
val paymentRequestOrigin: Chaîne? = extras.getString("paymentRequestOrigin")
le total
La chaîne JSON qui représente le montant total de la transaction.
val le total: Chaîne? = extras.getString("total")
Voici un exemple de contenu de chaîne:
{"currency":"USD","value":"25.00"}
modificateurs
La sortie de JSON.stringify (details.modifiers), où détails.modificateurs
contenir seulement Méthodes prises en charge y le total.
paymentRequestId
Les PaymentRequest.id champ que les applications de «paiement automatique» doivent associer au statut de la transaction. Les sites Web marchands utiliseront ce champ pour interroger les applications de «paiement automatique» sur l'état des transactions hors bande.
val paymentRequestId: Chaîne? = extras.getString("paymentRequestId")
Répondre
L'activité peut envoyer sa réponse via setResult avec RESULT_OK.
setResult(Activity.RESULT_OK, Intention().apply {
putExtra("methodName", "https://bobpay.xyz/pay")
putExtra("details", "{"token": "put-some-data-here"}")
})
finish()
Vous devez spécifier deux paramètres comme extras d'intention:
methodName: Le nom de la méthode utilisée.des détails: Chaîne JSON contenant les informations nécessaires au commerçant pour terminer la transaction. Si le succès estvrai, ensuitedes détailsdoit être construit de telle manière queJSON.parse (détails)ça pourrait arriver.
Tu peux passer RESULT_CANCELED si la transaction n'a pas été effectuée dans l'application de paiement, par exemple si l'utilisateur n'a pas saisi le code PIN correct pour son compte dans l'application de paiement. Le navigateur peut permettre à l'utilisateur de choisir une autre application de paiement.
setResult(RESULT_CANCELED)
finish()
Si le résultat de l'activité d'une réponse de paiement reçue de l'application de paiement appelée est défini sur RESULT_OK, alors Chrome vérifiera s'il n'est pas vide methodName y
des détails dans vos extras. Si la validation échoue, Chrome renverra une promesse rejetée de request.show () avec l'un des messages d'erreur suivants rencontrés par les développeurs:
'Payment app returned invalid response. Missing field "details".'
'Payment app returned invalid response. Missing field "methodName".'
Permis
L'activité peut vérifier l'appelant avec son getCallingPackage () méthode.
val caller: Chaîne? = callingPackage
La dernière étape consiste à vérifier le certificat de signature de l'appelant pour confirmer que le paquet appelant a la signature correcte.
Étape 4: vérifier le certificat de signature de l'appelant
Vous pouvez vérifier le nom du package de l'appelant avec Binder.getCallingUid () au
IS_READY_TO_PAY, et avec Activity.getCallingPackage () au PAYER. Pour vraiment vérifier que l'appelant est le navigateur que vous avez à l'esprit, vous devez vérifier son certificat de signature et vous assurer qu'il correspond à la valeur correcte.
Si tiene como objectif¿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. Suite 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: Chaîne = …
val certificat: ByteArray = …
val verified = packageManager.hasSigningCertificate(
callingPackage,
certificat,
PackageManager.CERT_INPUT_SHA256
)
PackageManager.hasSigningCertificate () Il est préférable pour les navigateurs de certificats uniques car il gère correctement la rotation des certificats. (Chrome n'a qu'un seul certificat de signature.) Les applications qui ont plusieurs certificats de signature ne peuvent pas les faire pivoter.
Si vous devez prendre en charge des niveaux d'API plus anciens que 27 et inférieurs, ou si vous devez gérer des navigateurs avec plusieurs certificats de signature, vous pouvez utiliser
PackageManager.GET_SIGNATURES.
val packageName: Chaîne = …
val certificates: Ensemble<ByteArray> = … val packageInfo = getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
val sha256 = MessageDigest.getInstance("SHA-256")
val signatures = packageInfo.signatures.map { sha256.digest(it.toByteArray()) }
val verified = signatures.Taille == certificates.Taille &Concepto 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 Suite;&
signatures.là { s -> certificates.any { it.contentEquals(s) } }




