Passer au contenu principal




Découvrez comment adapter votre application de paiement Android pour fonctionner avec Web Payments et offrir une meilleure expérience utilisateur aux clients.

Les API de demande de paiement apporte au Web une interface intégrée basée sur un navigateur qui permet aux utilisateurs de saisir les informations de paiement requises plus facilement que jamais. L'API peut également appeler des applications de paiement spécifiques à la plateforme.

Flux de paiement avec l'application Google Pay spécifique à la plate-forme qui utilise Web Payments.

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.
  • Tout mode de paiement peut être intégré, comme les crypto-monnaies, les virements bancaires et plus encore. Les applications de paiement sur les appareils Android peuvent même intégrer des méthodes qui nécessitent un accès à la puce matérielle de l'appareil.

La mise en œuvre des paiements Web dans une application de paiement Android comporte quatre étapes:

  1. Faites découvrir aux commerçants votre application de paiement.
  2. Informez un commerçant si un client a un instrument enregistré (comme une carte de crédit) qu'il est prêt à payer.
  3. Laissez un client effectuer le paiement.
  4. 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 afin que les navigateurs puissent découvrir votre application.

É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 le service est défini dans AIDL. Créez deux fichiers AIDL avec le contenu suivant:

app / src / main / aidl / org / chrome / 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:

  • methodNames
  • methodData
  • topLevelOrigin
  • topLevelCertificateChain
  • topLevelCertificateChain
  • paymentRequestOrigin

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, https://mystore.com/checkout ça passera 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. La chaîne de certificats est nécessaire car une application de paiement peut avoir des exigences de confiance différentes pour les sites 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

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")

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 doit être une liste de chaînes, dont chacune doit être une URL absolue valide avec un schéma HTTPS comme indiqué ici.

<?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:

  • methodNames
  • methodData
  • topLevelOrigin
  • topLevelCertificateChain
  • paymentRequestOrigin
  • le total
  • modificateurs
  • paymentRequestId

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 </html></code> Balise HTML de la page de paiement du marchand (le contexte de navigation de niveau supérieur du navigateur).</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> merchantName<span class="token operator">:</span> Chaîne<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"merchantName"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h4 id="toplevelorigin-2"><span class="ez-toc-section" id="topLevelOrigin-2"></span><code>topLevelOrigin</code> <span class="ez-toc-section-end"></span></h4> <p>L'origine du marchand sans le schéma (L'origine sans le schéma du contexte de navigation de niveau supérieur). Par exemple, <code>https://mystore.com/checkout</code> ça se passe comme <code>mystore.com</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> topLevelOrigin<span class="token operator">:</span> Chaîne<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"topLevelOrigin"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h4 id="toplevelcertificatechain-2"><span class="ez-toc-section" id="topLevelCertificateChain-2"></span><code>topLevelCertificateChain</code> <span class="ez-toc-section-end"></span></h4> <p>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 <code>Colisable</code> c'est un paquet avec un<br /> <code>certificat</code> key et une valeur de tableau d'octets.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> topLevelCertificateChain<span class="token operator">:</span> Array<span class="token operator"><</span>Colisable<span class="token operator">></span><span class="token operator">?</span> <span class="token operator">=</span><br>extras<span class="token punctuation">.</span><span class="token function">getParcelableArray</span><span class="token punctuation">(</span><span class="token string">"topLevelCertificateChain"</span><span class="token punctuation">)</span><br><span class="token keyword">val</span> list<span class="token operator">:</span> Lister<span class="token operator"><</span>ByteArray<span class="token operator">></span><span class="token operator">?</span> <span class="token operator">=</span> topLevelCertificateChain<span class="token operator">?</span><span class="token punctuation">.</span><span class="token function">mapNotNull</span> <span class="token punctuation">{</span> p <span class="token operator">-></span><br><span class="token punctuation">(</span>p <span class="token keyword">as</span> Empaqueter<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getByteArray</span><span class="token punctuation">(</span><span class="token string">"certificat"</span><span class="token punctuation">)</span><br><span class="token punctuation">}</span></code></pre> <p></web-copy-code></p> <h4 id="paymentrequestorigin-2"><span class="ez-toc-section" id="paymentRequestOrigin-2"></span><code>paymentRequestOrigin</code> <span class="ez-toc-section-end"></span></h4> <p>La source non-schéma du contexte de navigation iframe qui invoquait <code>new PaymentRequest (methodData, détails, options)</code> 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 <code>topLevelOrigin</code> paramètre.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> paymentRequestOrigin<span class="token operator">:</span> Chaîne<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"paymentRequestOrigin"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h4 id="total"><span class="ez-toc-section" id="total"></span><code>le total</code> <span class="ez-toc-section-end"></span></h4> <p>La chaîne JSON qui représente le montant total de la transaction.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> le total<span class="token operator">:</span> Chaîne<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"total"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p>Voici un exemple de contenu de chaîne:</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token punctuation">{</span><span class="token string">"currency"</span><span class="token operator">:</span><span class="token string">"USD"</span><span class="token punctuation">,</span><span class="token string">"value"</span><span class="token operator">:</span><span class="token string">"25.00"</span><span class="token punctuation">}</span></code></pre> <p></web-copy-code></p> <h4 id="modifiers"><span class="ez-toc-section" id="modifiers"></span><code>modificateurs</code> <span class="ez-toc-section-end"></span></h4> <p>La sortie de <code>JSON.stringify (details.modifiers)</code>, où <code>détails.modificateurs</code><br /> contenir seulement <code>Méthodes prises en charge</code> y <code>le total</code>.</p> <h4 id="paymentrequestid"><span class="ez-toc-section" id="paymentRequestId"></span><code>paymentRequestId</code> <span class="ez-toc-section-end"></span></h4> <p>Les <code>PaymentRequest.id</code> 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.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> paymentRequestId<span class="token operator">:</span> Chaîne<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"paymentRequestId"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h3 id="response-2"><span class="ez-toc-section" id="Respuesta-2"></span>Répondre <span class="ez-toc-section-end"></span></h3> <p>L'activité peut envoyer sa réponse via <code>setResult</code> avec <code>RESULT_OK</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token function">setResult</span><span class="token punctuation">(</span>Activity<span class="token punctuation">.</span>RESULT_OK<span class="token punctuation">,</span> <span class="token function">Intention</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">apply</span> <span class="token punctuation">{</span><br><span class="token function">putExtra</span><span class="token punctuation">(</span><span class="token string">"methodName"</span><span class="token punctuation">,</span> <span class="token string">"https://bobpay.xyz/pay"</span><span class="token punctuation">)</span><br><span class="token function">putExtra</span><span class="token punctuation">(</span><span class="token string">"details"</span><span class="token punctuation">,</span> <span class="token string">"{"token": "put-some-data-here"}"</span><span class="token punctuation">)</span><br><span class="token punctuation">}</span><span class="token punctuation">)</span><br><span class="token function">finish</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p>Vous devez spécifier deux paramètres comme extras d'intention:</p> <ul> <li><code>methodName</code>: Le nom de la méthode utilisée.</li> <li><code>des détails</code>: Chaîne JSON contenant les informations nécessaires au commerçant pour terminer la transaction. Si le succès est <code>vrai</code>, ensuite <code>des détails</code> doit être construit de telle manière que <code>JSON.parse (détails)</code> ça pourrait arriver.</li> </ul> <p>Tu peux passer <code>RESULT_CANCELED</code> 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.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token function">setResult</span><span class="token punctuation">(</span>RESULT_CANCELED<span class="token punctuation">)</span><br><span class="token function">finish</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p>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 <code>RESULT_OK</code>, alors Chrome vérifiera s'il n'est pas vide <code>methodName</code> y<br /> <code>des détails</code> dans vos extras. Si la validation échoue, Chrome renverra une promesse rejetée de <code>request.show ()</code> avec l'un des messages d'erreur suivants rencontrés par les développeurs:</p> <p><web-copy-code></p> <pre class="language-js"><code class="language-js"><span class="token string">'Payment app returned invalid response. Missing field "details".'</span><br><span class="token string">'Payment app returned invalid response. Missing field "methodName".'</span></code></pre> <p></web-copy-code></p> <h3 id="permission-2"><span class="ez-toc-section" id="Permiso-2"></span>Permis <span class="ez-toc-section-end"></span></h3> <p>L'activité peut vérifier l'appelant avec son <code>getCallingPackage ()</code> méthode.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> caller<span class="token operator">:</span> Chaîne<span class="token operator">?</span> <span class="token operator">=</span> callingPackage</code></pre> <p></web-copy-code></p> <p>La dernière étape consiste à vérifier le certificat de signature de l'appelant pour confirmer que le paquet appelant a la signature correcte.</p> <h2 id="step-4:-verify-the-caller's-signing-certificate"><span class="ez-toc-section" id="Paso-4-Verifique-el-certificado-de-firma-de-la-persona-que-llama"></span>Étape 4: vérifier le certificat de signature de l'appelant <span class="ez-toc-section-end"></span></h2> <p>Vous pouvez vérifier le nom du package de l'appelant avec <code>Binder.getCallingUid ()</code> au<br /> <code>IS_READY_TO_PAY</code>, et avec <code>Activity.getCallingPackage ()</code> au <code>PAYER</code>. 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.</p> <p>Si vous ciblez le niveau d'API 28 et plus et que vous vous intégrez à un navigateur doté d'un seul certificat de signature, vous pouvez utiliser<br /> <code>PackageManager.hasSigningCertificate ()</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> packageName<span class="token operator">:</span> Chaîne <span class="token operator">=</span> … <br><span class="token keyword">val</span> certificat<span class="token operator">:</span> ByteArray <span class="token operator">=</span> … <br><span class="token keyword">val</span> verified <span class="token operator">=</span> packageManager<span class="token punctuation">.</span><span class="token function">hasSigningCertificate</span><span class="token punctuation">(</span><br>callingPackage<span class="token punctuation">,</span><br>certificat<span class="token punctuation">,</span><br>PackageManager<span class="token punctuation">.</span>CERT_INPUT_SHA256<br><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p><code>PackageManager.hasSigningCertificate ()</code> 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.</p> <p>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<br /> <code>PackageManager.GET_SIGNATURES</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> packageName<span class="token operator">:</span> Chaîne <span class="token operator">=</span> … <br><span class="token keyword">val</span> certificates<span class="token operator">:</span> Ensemble<span class="token operator"><</span>ByteArray<span class="token operator">></span> <span class="token operator">=</span> … <p><span class="token keyword">val</span> packageInfo <span class="token operator">=</span> <span class="token function">getPackageInfo</span><span class="token punctuation">(</span>packageName<span class="token punctuation">,</span> PackageManager<span class="token punctuation">.</span>GET_SIGNATURES<span class="token punctuation">)</span><br><span class="token keyword">val</span> sha256 <span class="token operator">=</span> MessageDigest<span class="token punctuation">.</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token string">"SHA-256"</span><span class="token punctuation">)</span><br><span class="token keyword">val</span> signatures <span class="token operator">=</span> packageInfo<span class="token punctuation">.</span>signatures<span class="token punctuation">.</span><span class="token function">map</span> <span class="token punctuation">{</span> sha256<span class="token punctuation">.</span><span class="token function">digest</span><span class="token punctuation">(</span>it<span class="token punctuation">.</span><span class="token function">toByteArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><br><span class="token keyword">val</span> verified <span class="token operator">=</span> signatures<span class="token punctuation">.</span>Taille <span class="token operator">==</span> certificates<span class="token punctuation">.</span>Taille <span class="token operator">&&</span><br>signatures<span class="token punctuation">.</span><span class="token function">là</span> <span class="token punctuation">{</span> s <span class="token operator">-></span> certificates<span class="token punctuation">.</span><span class="token function">any</span> <span class="token punctuation">{</span> it<span class="token punctuation">.</span><span class="token function">contentEquals</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></p></code></pre> <p></web-copy-code></p> <p> <web-feedback additional-questions="api"></web-feedback> </div> <div id="ez-toc-container" class="ez-toc-v2_0_67_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction"> <div class="ez-toc-title-container"> <p class="ez-toc-title" >Table des matières</p> <span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewbox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewbox="0 0 24 24" version="1.2" baseprofile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div> <nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Paso-1-permita-que-los-comerciantes-descubran-su-aplicacion-de-pago" title="Étape 1: laissez les marchands découvrir votre application de paiement ">Étape 1: laissez les marchands découvrir votre application de paiement </a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#Paso-2-Informe-a-un-comerciante-si-un-cliente-tiene-un-instrumento-registrado-que-esta-listo-para-pagar" title="Étape 2: Informer un commerçant si un client a un instrument enregistré qu'il est prêt à payer ">Étape 2: Informer un commerçant si un client a un instrument enregistré qu'il est prêt à payer </a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#AndroidManifestxml" title="AndroidManifest.xml ">AndroidManifest.xml </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#AIDL" title="AIDL ">AIDL </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Implementar-IsReadyToPayService" title="Implémenter IsReadyToPayService ">Implémenter IsReadyToPayService </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Parametros" title="Paramètres ">Paramètres </a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-7" href="#methodNames" title="methodNames ">methodNames </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-8" href="#methodData" title="methodData ">methodData </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-9" href="#topLevelOrigin" title="topLevelOrigin ">topLevelOrigin </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-10" href="#topLevelCertificateChain" title="topLevelCertificateChain ">topLevelCertificateChain </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-11" href="#paymentRequestOrigin" title="paymentRequestOrigin ">paymentRequestOrigin </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#Respuesta" title="Répondre ">Répondre </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Permiso" title="Permis ">Permis </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#Paso-3-deje-que-un-cliente-realice-el-pago" title="Étape 3: laissez un client vérifier ">Étape 3: laissez un client vérifier </a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#AndroidManifestxml-2" title="AndroidManifest.xml ">AndroidManifest.xml </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#Parametros-2" title="Paramètres ">Paramètres </a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-17" href="#methodNames-2" title="methodNames ">methodNames </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-18" href="#methodData-2" title="methodData ">methodData </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-19" href="#Nombre-del-comerciante" title="Nom du commerçant ">Nom du commerçant </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-20" href="#topLevelOrigin-2" title="topLevelOrigin ">topLevelOrigin </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-21" href="#topLevelCertificateChain-2" title="topLevelCertificateChain ">topLevelCertificateChain </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-22" href="#paymentRequestOrigin-2" title="paymentRequestOrigin ">paymentRequestOrigin </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-23" href="#total" title="le total ">le total </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-24" href="#modifiers" title="modificateurs ">modificateurs </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-25" href="#paymentRequestId" title="paymentRequestId ">paymentRequestId </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-26" href="#Respuesta-2" title="Répondre ">Répondre </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-27" href="#Permiso-2" title="Permis ">Permis </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-28" href="#Paso-4-Verifique-el-certificado-de-firma-de-la-persona-que-llama" title="Étape 4: vérifier le certificat de signature de l'appelant ">Étape 4: vérifier le certificat de signature de l'appelant </a></li></ul></nav></div> <script type="rocketlazyloadscript" async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- before contente - R Marketing --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9047562926713908" data-ad-slot="3528200093" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div class='yarpp yarpp-related yarpp-related-website yarpp-template-yarpp-template-example-9473814'> <!-- YARPP List --> <h5>Articles Similaires</h3><ol> <li><a href="https://rmarketingdigital.com/fr/dev/apercu-des-applications-de-paiement-basees-sur-le-web/" rel="bookmark" title="Présentation des applications de paiement Web" data-wpel-link="internal">Présentation des applications de paiement Web</a></li> <li><a href="https://rmarketingdigital.com/fr/dev/habiliter-applications-de-paiement-avec-paiements-web/" rel="bookmark" title="Boostez les applications de paiement avec les paiements Web" data-wpel-link="internal">Boostez les applications de paiement avec les paiements Web</a></li> <li><a href="https://rmarketingdigital.com/fr/plantilla-excel/vacanciers/" rel="bookmark" title="Calcul des heures supplémentaires" data-wpel-link="internal">Calcul des heures supplémentaires</a></li> <li><a href="https://rmarketingdigital.com/fr/elementor/plugins-et-plugins-pour-elementor/" rel="bookmark" title="Plugins et plugins pour Elementor" data-wpel-link="internal">Plugins et plugins pour Elementor</a></li> </ol> </div> <div class='yarpp yarpp-related yarpp-related-website yarpp-template-yarpp-template-example-2698285'> <!-- YARPP List --> <h5>Articles Similaires</h3><ol> <li><a href="https://rmarketingdigital.com/fr/dev/apercu-des-applications-de-paiement-basees-sur-le-web/" rel="bookmark" title="Présentation des applications de paiement Web" data-wpel-link="internal">Présentation des applications de paiement Web</a></li> <li><a href="https://rmarketingdigital.com/fr/dev/habiliter-applications-de-paiement-avec-paiements-web/" rel="bookmark" title="Boostez les applications de paiement avec les paiements Web" data-wpel-link="internal">Boostez les applications de paiement avec les paiements Web</a></li> <li><a href="https://rmarketingdigital.com/fr/plantilla-excel/vacanciers/" rel="bookmark" title="Calcul des heures supplémentaires" data-wpel-link="internal">Calcul des heures supplémentaires</a></li> <li><a href="https://rmarketingdigital.com/fr/elementor/plugins-et-plugins-pour-elementor/" rel="bookmark" title="Plugins et plugins pour Elementor" data-wpel-link="internal">Plugins et plugins pour Elementor</a></li> </ol> </div> </div> </div><!--/post-content--> </div><!--/inner-wrap--> </article> </div><!--/post-area--> <div id="sidebar" data-nectar-ss="1" class="col span_3 col_last"> <div id="custom_html-9" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><center><script type="rocketlazyloadscript" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- Sidebar Widget - R Marketing --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9047562926713908" data-ad-slot="9140386366" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center></div></div><div id="custom_html-24" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><center><script type="rocketlazyloadscript" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- Sidebar Widget - R Marketing --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9047562926713908" data-ad-slot="9140386366" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center></div></div> </div><!--/sidebar--> </div><!--/row--> <div class="row"> <div class="row vc_row-fluid full-width-section related-post-wrap" data-using-post-pagination="false" data-midnight="dark"> <div class="row-bg-wrap"><div class="row-bg"></div></div> <h3 class="related-title hidden" data-no-translation="" data-trp-gettext="">Articles Similaires</h3><div class="row span_12 blog-recent related-posts columns-3" data-style="material" data-color-scheme="light"> <div class="col span_4"> <div class="inner-wrap post-81486 post type-post status-publish format-standard has-post-thumbnail category-dev"> <a href="https://rmarketingdigital.com/fr/dev/donner-des-super-pouvoirs-aux-variables-css/" class="img-link" data-wpel-link="internal"><span class="post-featured-img"><img width="600" height="360" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20600%20360'%3E%3C/svg%3E" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="héros-7923897-5622351-jpg" title="" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-7923897-600x360.jpg" /><noscript><img width="600" height="360" src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-7923897-600x360.jpg" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="héros-7923897-5622351-jpg" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/fr/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/fr/dev/donner-des-super-pouvoirs-aux-variables-css/" aria-label="Donner des super pouvoirs aux variables CSS" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Donner des super pouvoirs aux variables CSS</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='Marketing numérique' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2070%2070'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async' data-lazy-src="https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g"/><noscript><img alt='Marketing numérique' src='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async'/></noscript><div class="text"> <a href="https://rmarketingdigital.com/fr/author/r-marketing-digital/" data-wpel-link="internal">Marketing numérique</a><span>22/10/2022</span></div></div> </div> </div> </div> <div class="col span_4"> <div class="inner-wrap post-83979 post type-post status-publish format-standard has-post-thumbnail category-dev"> <a href="https://rmarketingdigital.com/fr/dev/fix-an-overloaded-server/" class="img-link" data-wpel-link="internal"><span class="post-featured-img"><img width="600" height="360" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20600%20360'%3E%3C/svg%3E" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="héros-2836929-1047989-jpg" title="" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-2836929-600x360.jpg" /><noscript><img width="600" height="360" src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-2836929-600x360.jpg" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="héros-2836929-1047989-jpg" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/fr/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/fr/dev/fix-an-overloaded-server/" aria-label="Réparer un serveur surchargé" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Réparer un serveur surchargé</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='Marketing numérique' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2070%2070'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async' data-lazy-src="https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g"/><noscript><img alt='Marketing numérique' src='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async'/></noscript><div class="text"> <a href="https://rmarketingdigital.com/fr/author/r-marketing-digital/" data-wpel-link="internal">Marketing numérique</a><span>22/10/2022</span></div></div> </div> </div> </div> <div class="col span_4"> <div class="inner-wrap post-92984 post type-post status-publish format-standard has-post-thumbnail category-dev"> <a href="https://rmarketingdigital.com/fr/dev/quoi-de-neuf-dans-le-phare-6-0/" class="img-link" data-wpel-link="internal"><span class="post-featured-img"><img width="1" height="1" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="phare-logo-5769199-svg_-3706970-svgxml" title="" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2020/10/lighthouse-logo-5769199.svg.svg+xml" /><noscript><img width="1" height="1" src="https://rmarketingdigital.com/wp-content/uploads/2020/10/lighthouse-logo-5769199.svg.svg+xml" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="phare-logo-5769199-svg_-3706970-svgxml" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/fr/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/fr/dev/quoi-de-neuf-dans-le-phare-6-0/" aria-label="What’s New in Lighthouse 6.0" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Nouveautés de Lighthouse 6.0</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='Marketing numérique' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2070%2070'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async' data-lazy-src="https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g"/><noscript><img alt='Marketing numérique' src='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async'/></noscript><div class="text"> <a href="https://rmarketingdigital.com/fr/author/r-marketing-digital/" data-wpel-link="internal">Marketing numérique</a><span>20/10/2022</span></div></div> </div> </div> </div> </div></div> <div class="comments-section" data-author-bio="false"> <div class="comment-wrap" data-midnight="dark" data-comments-open="false"> <!-- If comments are closed. --> <!--<p class="nocomments">Comments are closed.</p>--> </div> </div> </div><!--/row--> </div><!--/container main-content--> </div><!--/container-wrap--> <div id="footer-outer" data-midnight="light" data-cols="3" data-custom-color="true" data-disable-copyright="false" data-matching-section-color="false" data-copyright-line="true" data-using-bg-img="false" data-bg-img-overlay="0.3" data-full-width="1" data-using-widget-area="true" data-link-hover="default"> <div id="footer-widgets" data-has-widgets="true" data-cols="3"> <div class="container"> <div class="row"> <div class="col span_4"> <div id="media_image-2" class="widget widget_media_image"><img width="150" height="55" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20150%2055'%3E%3C/svg%3E" class="image wp-image-67039 attachment-thumbnail size-thumbnail" alt="" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2018/10/headerlogo-blanco-footer-1-150x55.png" /><noscript><img width="150" height="55" src="https://rmarketingdigital.com/wp-content/uploads/2018/10/headerlogo-blanco-footer-1-150x55.png" class="image wp-image-67039 attachment-thumbnail size-thumbnail" alt="" style="max-width: 100%; height: auto;" decoding="async" /></noscript></div><div id="text-5" class="widget widget_text"> <div class="textwidget"><p>R Marketing numérique: Whatsapp Marketing. Gestion des médias sociaux, conception et gestion de sites Web, publicité en ligne, SEM et SEO, marketing par e-mail.</p> </div> </div><div id="media_image-4" class="widget widget_media_image"><img width="220" height="110" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20220%20110'%3E%3C/svg%3E" class="image wp-image-67115 attachment-full size-full" alt="partenaire facebook" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage-1.jpg" /><noscript><img width="220" height="110" src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage-1.jpg" class="image wp-image-67115 attachment-full size-full" alt="partenaire facebook" style="max-width: 100%; height: auto;" decoding="async" /></noscript></div><div id="media_image-3" class="widget widget_media_image"><img width="220" height="110" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20220%20110'%3E%3C/svg%3E" class="image wp-image-67114 attachment-full size-full" alt="partenaire google" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage.png" /><noscript><img width="220" height="110" src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage.png" class="image wp-image-67114 attachment-full size-full" alt="partenaire google" style="max-width: 100%; height: auto;" decoding="async" /></noscript></div> </div> <div class="col span_4"> <div id="custom_html-3" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><h4>Tutoriels et formation</h4> <ul> <li><a href="https://rmarketingdigital.com/fr/formacion/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Formation</a></li> <li><a href="https://rmarketingdigital.com/fr/blog-power-bi/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Puissance Bi</a></li> <li><a href="https://rmarketingdigital.com/fr/marketing/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Le marketing</a></li> <li><a href="https://rmarketingdigital.com/fr/dev/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Dev</a></li> <li><a href="https://rmarketingdigital.com/fr/elementor/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Elementor</a></li> <li><a href="https://rmarketingdigital.com/fr/seo/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">SEO</a></li> <li><a href="https://rmarketingdigital.com/fr/elementor/outils/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Des outils</a></li> <li><a href="https://rmarketingdigital.com/fr/excel-templates/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Modèles Excel</a></li> <li><a href="https://rmarketingdigital.com/fr/negocios/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Affaires</a></li> </ul> <p><br></p></div></div> </div> <div class="col span_4"> <div id="custom_html-2" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><h4>Wordpress</h4> <ul> <ul> <li><a href="https://rmarketingdigital.com/fr/wordpress/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Wordpress 101</a></li> </ul> </ul> <h4>Réseaux sociaux</h4> <ul> <ul> <li><a href="https://rmarketingdigital.com/fr/facebook/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Facebook</a></li> <li><a href="https://rmarketingdigital.com/fr/instagram/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Instagram</a></li> <li><a href="https://rmarketingdigital.com/fr/whatsapp/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">WhatsApp</a></li> <li><a href="https://rmarketingdigital.com/fr/telecharger-torrents/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Torrents</a></li> <li><a href="https://rmarketingdigital.com/fr/cine-series/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Films et séries</a></li> </ul> </ul></div></div><div id="nav_menu-4" class="widget widget_nav_menu"><h4>langage</h4><div class="menu-lenguaje-switcher-container"><ul id="menu-lenguaje-switcher" class="menu"><li id="menu-item-93714" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-93714"><a href="https://rmarketingdigital.com/dev/guia-para-desarrolladores-de-aplicaciones-de-pago-de-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Español</span></span></a></li> <li id="menu-item-110873" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-110873"><a href="https://rmarketingdigital.com/de/dev/entwickler-leitfaden-fur-android-kostenpflichtige-apps/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Deutsch</span></span></a></li> <li id="menu-item-129688" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129688"><a href="https://rmarketingdigital.com/en/dev/developer-guide-for-android-paid-apps/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">English</span></span></a></li> <li id="menu-item-129689" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher current-language-menu-item menu-item-129689"><a href="https://rmarketingdigital.com/fr/dev/guide-du-developpeur-pour-applications-payantes-android/" data-wpel-link="internal"><span data-no-translation><span class="trp-ls-language-name">Français</span></span></a></li> </ul></div></div><div id="custom_html-23" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><h4>Utilisateur</h4> <ul> <li style="list-style-type: none;"> <ul> <li class="cookie-policy-p"><a href="https://rmarketingdigital.com/fr/politica-de-privacidad/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Politique de confidentialité</a></li> <li><a href="https://rmarketingdigital.com/fr/politica-de-cookies/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Politique de cookies</a></li> </ul> </li> </ul> </div></div> </div> </div> </div><!--/container--> </div><!--/footer-widgets--> <div class="row" id="copyright" data-layout="centered"> <div class="container"> <div class="col span_5"> <div class="widget"> </div> <p>© 2024 R Marketing numérique. </p> </div><!--/span_5--> <div class="col span_7 col_last"> <ul class="social"> </ul> </div><!--/span_7--> </div><!--/container--> </div><!--/row--> </div><!--/footer-outer--> <div id="slide-out-widget-area-bg" class="slide-out-from-right solid"> </div> <div id="slide-out-widget-area" class="slide-out-from-right" data-dropdown-func="separate-dropdown-parent-link" data-back-txt="Retour" data-no-translation-data-back-txt=""> <div class="inner" data-prepend-menu-mobile="false"> <a class="slide_out_area_close" href="#"><span class="screen-reader-text" data-no-translation="" data-trp-gettext="">Fermer le menu</span> <span class="icon-salient-x icon-default-style"></span> </a> <div class="off-canvas-menu-container" role="navigation"> <ul class="menu"> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-67249"><a href="https://rmarketingdigital.com/fr/blog/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Blogue</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-105292"><a>Développement</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105258"><a href="https://rmarketingdigital.com/fr/android/" data-wpel-link="internal">Android</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-post menu-item-129712467"><a href="https://rmarketingdigital.com/fr/chatgpt/chatgpt-enfocado-al-marketing-digital-y-al-seo/" data-wpel-link="internal">ChatGPT</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-105261"><a href="https://rmarketingdigital.com/fr/dev/" data-wpel-link="internal">Dev</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105268"><a href="https://rmarketingdigital.com/fr/freeware/" data-wpel-link="internal">Logiciel gratuit</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105273"><a href="https://rmarketingdigital.com/fr/javascript/" data-wpel-link="internal">Javascript</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105282"><a href="https://rmarketingdigital.com/fr/servidores-vps/" data-wpel-link="internal">Serveurs / VPS</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129672"><a href="https://rmarketingdigital.com/fr/vpn/" data-wpel-link="internal">VPN</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105287"><a href="https://rmarketingdigital.com/fr/windows-10/" data-wpel-link="internal">Windows 10</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105276"><a href="https://rmarketingdigital.com/fr/negocios/" data-wpel-link="internal">Affaires</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105264"><a href="https://rmarketingdigital.com/fr/emprendedores/" data-wpel-link="internal">Entrepreneurs</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105265"><a href="https://rmarketingdigital.com/fr/estrategias/" data-wpel-link="internal">Stratégies</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105267"><a href="https://rmarketingdigital.com/fr/formacion/" data-wpel-link="internal">Formation</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105275"><a href="https://rmarketingdigital.com/fr/marketing/" data-wpel-link="internal">Le marketing</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-105637"><a href="https://rmarketingdigital.com/fr/excel-templates/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Modèles Excel</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-106686"><a href="https://rmarketingdigital.com/fr/blog-power-bi/" data-wpel-link="internal">Power BI</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-109500"><a href="https://rmarketingdigital.com/fr/software-gestion/" data-wpel-link="internal">Logiciel de gestion</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-109498"><a href="https://rmarketingdigital.com/fr/crm/" data-wpel-link="internal">CRM</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-109499"><a href="https://rmarketingdigital.com/fr/erp/" data-wpel-link="internal">ERP</a></li> </ul> </li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105270"><a href="https://rmarketingdigital.com/fr/guias/" data-wpel-link="internal">Guides</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-132612"><a href="https://rmarketingdigital.com/fr/files/" data-wpel-link="internal">🗂️Fichiers</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-132614"><a href="https://rmarketingdigital.com/fr/files/exe/" data-wpel-link="internal">EXE</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-132613"><a href="https://rmarketingdigital.com/fr/files/dll/" data-wpel-link="internal">dll</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105271"><a href="https://rmarketingdigital.com/fr/herramientas/" data-wpel-link="internal">Outils</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-135948"><a href="https://rmarketingdigital.com/fr/marketing-deportivo/" data-wpel-link="internal">Marketing sportif</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105280"><a href="https://rmarketingdigital.com/fr/redes-sociales/" data-wpel-link="internal">Réseaux sociaux</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105266"><a href="https://rmarketingdigital.com/fr/facebook/" data-wpel-link="internal">Facebook</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105272"><a href="https://rmarketingdigital.com/fr/instagram/" data-wpel-link="internal">Instagram</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105274"><a href="https://rmarketingdigital.com/fr/linkedin/" data-wpel-link="internal">LinkedIn</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-106055"><a href="https://rmarketingdigital.com/fr/streaming/" data-wpel-link="internal">Diffusion</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105283"><a href="https://rmarketingdigital.com/fr/tiktok/" data-wpel-link="internal">TitTok</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105286"><a href="https://rmarketingdigital.com/fr/whatsapp/" data-wpel-link="internal">WhatsApp</a></li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-129667"><a href="#">Loisirs</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129668"><a href="https://rmarketingdigital.com/fr/cine-series/" data-wpel-link="internal">Cinéma et séries</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129669"><a href="https://rmarketingdigital.com/fr/gaming/" data-wpel-link="internal">Jeux</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129670"><a href="https://rmarketingdigital.com/fr/tv-online/" data-wpel-link="internal">Télévision en ligne</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-108306"><a href="https://rmarketingdigital.com/fr/telecharger-torrents/" data-wpel-link="internal">Torrents</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105285"><a href="https://rmarketingdigital.com/fr/webs/" data-wpel-link="internal">Webs</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105263"><a href="https://rmarketingdigital.com/fr/elementor/" data-wpel-link="internal">Elementor</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105262"><a href="https://rmarketingdigital.com/fr/ecommerce/" data-wpel-link="internal">Commerce électronique</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105288"><a href="https://rmarketingdigital.com/fr/wordpress/" data-wpel-link="internal">WordPress</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105281"><a href="https://rmarketingdigital.com/fr/seo/" data-wpel-link="internal">SEO</a></li> </ul> </li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-67232"><a>Les services</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-78763"><a href="https://rmarketingdigital.com/fr/agence-de-referencement/" data-wpel-link="internal">Positionnement Web</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67229"><a href="https://rmarketingdigital.com/fr/publicite-reseaux-sociaux-facebook-instagram/" data-wpel-link="internal">Publicité sur les réseaux sociaux</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67230"><a href="https://rmarketingdigital.com/fr/gestionnaire-de-communaute/" data-wpel-link="internal">Gestionnaire de communauté</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67228"><a href="https://rmarketingdigital.com/fr/abonne-boost-comptes-instagram/" data-wpel-link="internal">Boost suiveur</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67231"><a href="https://rmarketingdigital.com/fr/ecommerce-tienda-online/" data-wpel-link="internal">Commerce électronique</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67710"><a href="https://rmarketingdigital.com/fr/solutions-e-learning/" data-wpel-link="internal">Solutions d'apprentissage en ligne</a></li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-93606"><a href="https://rmarketingdigital.com/fr/glossaire-marketing-digital/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Glossaire</a></li> </ul> </div> <div id="nav_menu-3" class="widget widget_nav_menu"><div class="menu-r-pop-up-menu-container"><ul id="menu-r-pop-up-menu" class="menu"><li id="menu-item-66980" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-66980"><a href="https://m.me/rmarketingdigital" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Demandez votre budget</a></li> <li id="menu-item-78761" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-78761"><a href="https://rmarketingdigital.com/fr/travaille-avec-nous/" data-wpel-link="internal">Travaille avec nous</a></li> <li id="menu-item-129594" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-129594"><a href="#">langage</a> <ul class="sub-menu"> <li id="menu-item-129687" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129687"><a href="https://rmarketingdigital.com/en/dev/developer-guide-for-android-paid-apps/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">English</span></span></a></li> <li id="menu-item-129591" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129591"><a href="https://rmarketingdigital.com/de/dev/entwickler-leitfaden-fur-android-kostenpflichtige-apps/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Deutsch</span></span></a></li> <li id="menu-item-129593" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129593"><a href="https://rmarketingdigital.com/dev/guia-para-desarrolladores-de-aplicaciones-de-pago-de-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Español</span></span></a></li> <li id="menu-item-129635" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher current-language-menu-item menu-item-129635"><a href="https://rmarketingdigital.com/fr/dev/guide-du-developpeur-pour-applications-payantes-android/" data-wpel-link="internal"><span data-no-translation><span class="trp-ls-language-name">Français</span></span></a></li> </ul> </li> </ul></div></div> </div> <div class="bottom-meta-wrap"><ul class="off-canvas-social-links"><li><a target="_self" rel="noopener nofollow external noreferrer" href="https://www.facebook.com/R-Marketing-Digital-1995820950678942/" data-wpel-link="external"><i class="fa fa-facebook"></i></a></li><li><a target="_self" rel="noopener nofollow external noreferrer" href="https://www.linkedin.com/company/r-marketing-digital/" data-wpel-link="external"><i class="fa fa-linkedin"></i></a></li><li><a target="_self" rel="noopener nofollow external noreferrer" href="https://www.instagram.com/rmarketingdigital/" data-wpel-link="external"><i class="fa fa-instagram"></i></a></li><li><a target="_self" rel="noopener nofollow external noreferrer" href="http://m.me/rmarketingdigital" data-wpel-link="external"><i class="fa fa-phone"></i></a></li><li><a target="_blank" rel="noopener" href="mailto:hola@rmarketingdigital.com"><i class="fa fa-envelope"></i></a></li></ul></div><!--/bottom-meta-wrap--> </div> </div> <!--/ajax-content-wrap--> <template id="tp-language" data-tp-language="fr_FR"></template> <!-- Lockers: user tracker for visibility filters OnePress, bizpanda.com --> <script type="rocketlazyloadscript"> window.__bp_session_timeout = '900'; window.__bp_session_freezing = 0; window.bizpanda||(window.bizpanda={}),window.bizpanda.bp_can_store_localy=function(){return!1},window.bizpanda.bp_ut_get_cookie=function(e){for(var n=e+"=",i=document.cookie.split(";"),o=0;o<i.length;o++){for(var t=i[o];" "==t.charAt(0);)t=t.substring(1);if(0==t.indexOf(n))return decodeURIComponent(t.substring(n.length,t.length))}return!1},window.bizpanda.bp_ut_set_cookie=function(e,n,i){var o=new Date;o.setTime(o.getTime()+24*i*60*60*1e3);var t="expires="+o.toUTCString();document.cookie=e+"="+encodeURIComponent(n)+"; "+t+"; path=/"},window.bizpanda.bp_ut_get_obj=function(e){var n=null;if(!(n=window.bizpanda.bp_can_store_localy()?window.localStorage.getItem("bp_ut_session"):window.bizpanda.bp_ut_get_cookie("bp_ut_session")))return!1;n=(n=n.replace(/\-c\-/g,",")).replace(/\-q\-/g,'"');try{n=JSON.parse(n)}catch(e){return!1}return n.started+1e3*e<(new Date).getTime()&&(n=null),n},window.bizpanda.bp_ut_set_obj=function(e,n){e.started&&window.__bp_session_freezing||(e.started=(new Date).getTime()),(e=JSON.stringify(e))&&(e=(e=e.replace(/\"/g,"-q-")).replace(/\,/g,"-c-")),window.bizpanda.bp_can_store_localy()?window.localStorage.setItem("bp_ut_session",e):window.bizpanda.bp_ut_set_cookie("bp_ut_session",e,5e3)},window.bizpanda.bp_ut_count_pageview=function(){var e=window.bizpanda.bp_ut_get_obj(window.__bp_session_timeout);e||(e={}),e.pageviews||(e.pageviews=0),0===e.pageviews&&(e.referrer=document.referrer,e.landingPage=window.location.href,e.pageviews=0),e.pageviews++,window.bizpanda.bp_ut_set_obj(e)},window.bizpanda.bp_ut_count_locker_pageview=function(){var e=window.bizpanda.bp_ut_get_obj(window.__bp_timeout);e||(e={}),e.lockerPageviews||(e.lockerPageviews=0),e.lockerPageviews++,window.bizpanda.bp_ut_set_obj(e)},window.bizpanda.bp_ut_count_pageview(); </script> <!-- / --> <link data-minify="1" data-pagespeed-no-defer data-nowprocket data-wpacu-skip data-no-optimize data-noptimize rel='stylesheet' id='main-styles-non-critical-css' href='https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/css/build/style-non-critical.css?ver=1718893866' type='text/css' media='all' /> <link data-minify="1" data-pagespeed-no-defer data-nowprocket data-wpacu-skip data-no-optimize data-noptimize rel='stylesheet' id='fancyBox-css' href='https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/css/build/plugins/jquery.fancybox.css?ver=1718893866' type='text/css' media='all' /> <link data-minify="1" data-pagespeed-no-defer data-nowprocket data-wpacu-skip data-no-optimize data-noptimize rel='stylesheet' id='nectar-ocm-core-css' href='https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/css/build/off-canvas/core.css?ver=1718893866' type='text/css' media='all' /> <script type="text/javascript" id="trp-dynamic-translator-js-extra"> /* <![CDATA[ */ var trp_data = {"trp_custom_ajax_url":"https:\/\/rmarketingdigital.com\/wp-content\/plugins\/translatepress-multilingual\/includes\/trp-ajax.php","trp_wp_ajax_url":"https:\/\/rmarketingdigital.com\/wp-admin\/admin-ajax.php","trp_language_to_query":"fr_FR","trp_original_language":"es_ES","trp_current_language":"fr_FR","trp_skip_selectors":["[data-no-translation]","[data-no-dynamic-translation]","[data-trp-translate-id-innertext]","script","style","head","trp-span","translate-press","[data-trp-translate-id]","[data-trpgettextoriginal]","[data-trp-post-slug]"],"trp_base_selectors":["data-trp-translate-id","data-trpgettextoriginal","data-trp-post-slug"],"trp_attributes_selectors":{"text":{"accessor":"outertext","attribute":false},"block":{"accessor":"innertext","attribute":false},"image_src":{"selector":"img[src]","accessor":"src","attribute":true},"submit":{"selector":"input[type='submit'],input[type='button'], input[type='reset']","accessor":"value","attribute":true},"placeholder":{"selector":"input[placeholder],textarea[placeholder]","accessor":"placeholder","attribute":true},"title":{"selector":"[title]","accessor":"title","attribute":true},"a_href":{"selector":"a[href]","accessor":"href","attribute":true},"button":{"accessor":"outertext","attribute":false},"option":{"accessor":"innertext","attribute":false},"aria_label":{"selector":"[aria-label]","accessor":"aria-label","attribute":true},"image_alt":{"selector":"img[alt]","accessor":"alt","attribute":true},"meta_desc":{"selector":"meta[name=\"description\"],meta[property=\"og:title\"],meta[property=\"og:description\"],meta[property=\"og:site_name\"],meta[property=\"og:image:alt\"],meta[name=\"twitter:title\"],meta[name=\"twitter:description\"],meta[name=\"twitter:image:alt\"],meta[name=\"DC.Title\"],meta[name=\"DC.Description\"],meta[property=\"article:section\"],meta[property=\"article:tag\"]","accessor":"content","attribute":true},"page_title":{"selector":"title","accessor":"innertext","attribute":false},"meta_desc_img":{"selector":"meta[property=\"og:image\"],meta[property=\"og:image:secure_url\"],meta[name=\"twitter:image\"]","accessor":"content","attribute":true}},"trp_attributes_accessors":["outertext","innertext","src","value","placeholder","title","href","aria-label","alt","content"],"gettranslationsnonceregular":"a76841d6a6","showdynamiccontentbeforetranslation":"","skip_strings_from_dynamic_translation":[],"skip_strings_from_dynamic_translation_for_substrings":{"href":["amazon-adsystem","googleads","g.doubleclick"]},"duplicate_detections_allowed":"100","trp_translate_numerals_opt":"no","trp_no_auto_translation_selectors":["[data-no-auto-translation]"]}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/translatepress-multilingual/assets/js/trp-translate-dom-changes.js?ver=1718893869" id="trp-dynamic-translator-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=1718893866" id="swv-js" defer></script> <script type="text/javascript" id="contact-form-7-js-extra"> /* <![CDATA[ */ var wpcf7 = {"api":{"root":"https:\/\/rmarketingdigital.com\/fr\/wp-json\/","namespace":"contact-form-7\/v1"},"cached":"1"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/contact-form-7/includes/js/index.js?ver=1718893866" id="contact-form-7-js" defer></script> <script type="text/javascript" id="wpcf7-redirect-script-js-extra"> /* <![CDATA[ */ var wpcf7r = {"ajax_url":"https:\/\/rmarketingdigital.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/wpcf7-redirect/build/js/wpcf7r-fe.js?ver=1718893866" id="wpcf7-redirect-script-js" defer></script> <script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra"> /* <![CDATA[ */ var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":""}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.67.1" id="ez-toc-scroll-scriptjs-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js" defer></script> <script type="text/javascript" id="ez-toc-js-js-extra"> /* <![CDATA[ */ var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.67.1-1720133908" id="ez-toc-js-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" id="rocket-browser-checker-js-after"> /* <![CDATA[ */ "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); /* ]]> */ </script> <script type="text/javascript" id="rocket-preload-links-js-extra"> /* <![CDATA[ */ var RocketPreloadLinksConfig = {"excludeUris":"\/fr(\/(?:.+\/)?feed(?:\/(?:.+\/?)?)?$|\/(?:.+\/)?embed\/|\/(index\\.php\/)?wp\\-json(\/.*|$))|\/refer\/|\/go\/|\/recommend\/|\/recommends\/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https:\/\/rmarketingdigital.com\/fr\/","onHoverDelay":"100","rateThrottle":"3"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" id="rocket-preload-links-js-after"> /* <![CDATA[ */ (function() { "use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); }()); /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/jquery.easing.min.js?ver=1.3" id="jquery-easing-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/jquery.mousewheel.min.js?ver=3.1.13" id="jquery-mousewheel-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/priority.js?ver=1718893866" id="nectar_priority-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/transit.min.js?ver=0.9.9" id="nectar-transit-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/waypoints.js?ver=1718893866" id="nectar-waypoints-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/salient-portfolio/js/third-party/imagesLoaded.min.js?ver=4.1.4" id="imagesLoaded-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/hoverintent.min.js?ver=1.9" id="hoverintent-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/jquery.fancybox.js?ver=1718893866" id="fancyBox-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/anime.min.js?ver=4.5.1" id="anime-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/stickkit.js?ver=1718893869" id="stickykit-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/superfish.js?ver=1718893866" id="superfish-js" defer></script> <script type="text/javascript" id="nectar-frontend-js-extra"> /* <![CDATA[ */ var nectarLove = {"ajaxurl":"https:\/\/rmarketingdigital.com\/wp-admin\/admin-ajax.php","postID":"93401","rooturl":"https:\/\/rmarketingdigital.com\/fr\/","disqusComments":"false","loveNonce":"5998fdbd86","mapApiKey":""}; var nectarOptions = {"delay_js":"false","quick_search":"false","react_compat":"disabled","header_entrance":"false","dropdown_hover_intent":"default","simplify_ocm_mobile":"0","mobile_header_format":"default","ocm_btn_position":"default","left_header_dropdown_func":"default","ajax_add_to_cart":"0","ocm_remove_ext_menu_items":"remove_images","woo_product_filter_toggle":"0","woo_sidebar_toggles":"true","woo_sticky_sidebar":"0","woo_minimal_product_hover":"default","woo_minimal_product_effect":"default","woo_related_upsell_carousel":"false","woo_product_variable_select":"default","woo_using_cart_addons":"false"}; var nectar_front_i18n = {"menu":"Menu","next":"Next","previous":"Previous","close":"Close"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/init.js?ver=1718893866" id="nectar-frontend-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/salient-core/js/third-party/touchswipe.min.js?ver=1.0" id="touchswipe-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/select2.min.js?ver=4.0.1" id="select2-js" defer></script> <script type="rocketlazyloadscript"></script><script>window.lazyLoadOptions=[{elements_selector:"img[data-lazy-src],.rocket-lazyload",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}},{elements_selector:".rocket-lazyload",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,}];window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(var i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){continue} if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){continue} images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1} if(is_iframe){iframe_count+=1}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update()}});var b=document.getElementsByTagName("body")[0];var config={childList:!0,subtree:!0};observer.observe(b,config)}},!1)</script><script data-no-minify="1" async src="https://rmarketingdigital.com/wp-content/plugins/wp-rocket/assets/js/lazyload/17.5/lazyload.min.js"></script></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1722071855 --><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="f901ab29c8336b5510d71a2f-|49" defer></script>