Skip to main content




Learn how to adapt your Android payment application to work with Web Payments and provide a better user experience for customers.

the Payment request API brings to the web an integrated browser-based interface that allows users to enter required payment information easier than ever. The API can also invoke platform-specific payment applications.

Payment flow with the platform-specific Google Pay application that uses Web Payments.

Compared to using just Android Intents, web payments allow for better browser integration, security, and user experience:

  • The payment application is launched as modal, in the context of the merchant's website.
  • The implementation is complementary to your existing payment application, allowing you to take advantage of your user base.
  • Payment app signature is checked to avoid
    lateral load.
  • Payment apps can support multiple payment methods.
  • Any payment method can be integrated, such as cryptocurrencies, bank transfers and more. Payment applications on Android devices can even integrate methods that require access to the hardware chip in the device.

There are four steps required to implement web payments in an Android payment application:

  1. Let merchants discover your payment application.
  2. Inform a merchant if a customer has a registered instrument (such as a credit card) that they are ready to pay.
  3. Let a customer make the payment.
  4. Check the signing certificate of the caller.

To see web payments in action, see the
payment-web-android
manifestation.

Step 1: let merchants discover your payment app

For a merchant to use your payment application, they must use the Payment request API and specify the payment method you support using the payment method identifier.

If you have a unique payment method identifier for your payment app, you can set yours payment method manifest so that browsers can discover your application.

Step 2: Inform a merchant if a client has a registered instrument that they are ready to pay

The merchant can call hasEnrolledInstrument () to see if the customer can make a payment. You can implement IS_READY_TO_PAY as an Android service to answer this query.

AndroidManifest.xml

Declare your service with an intent filter with action
org.chromium.intent.action.IS_READY_TO_PAY.

<service
android:yam=".SampleIsReadyToPayService"
android:exported="true">

<intent-filter>
<action android:yam="org.chromium.intent.action.IS_READY_TO_PAY" />
</intent-filter>
</service>

the IS_READY_TO_PAY the service is optional. If there is no such intent handler in the payment application, then the web browser assumes that the application can always make payments.

AIDL

The API for IS_READY_TO_PAY the service is defined in AIDL. Create two AIDL files with the following content:

app / src / main / aidl / org / chromium / IsReadyToPayServiceCallback.aidl

package org.chromium;
interface IsReadyToPayServiceCallback {
oneway void handleIsReadyToPay(boolean isReadyToPay);
}

app / src / main / aidl / org / chromium / IsReadyToPayService.aidl

package org.chromium;
import org.chromium.IsReadyToPayServiceCallback;

interface IsReadyToPayService {
oneway void isReadyToPay(IsReadyToPayServiceCallback callback);
}

Implement IsReadyToPayService

The simplest implementation of IsReadyToPayService shown in the following example:

class SampleIsReadyToPayService : Service() {
private val binder = object : IsReadyToPayService.Stub() {
override fun isReadyToPay(callback: IsReadyToPayServiceCallback?) {
callback?.handleIsReadyToPay(true)
}
}

override fun onBind(I tried: Intent?): IBinder? {
return binder
}
}

Parameters

Pass the following parameters to onBind as Intent extras:

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

override fun onBind(I tried: Intent?): IBinder? {
val extras: Bundle? = I tried?.extras
}

methodNames

The names of the methods that are queried. The elements are the keys in the
methodData dictionary and indicate the methods that the payment application supports.

val methodNames: List<String>? = extras.getStringArrayList("methodNames")

methodData

A mapping of each input of methodNames to the
methodData.

val methodData: Bundle? = extras.getBundle("methodData")

topLevelOrigin

The origin of the merchant without the schema (the origin without the schema of the top-level navigation context). For example, https://mystore.com/checkout it will pass like mystore.com.

val topLevelOrigin: String? = extras.getString("topLevelOrigin")

topLevelCertificateChain

The merchant's certificate chain (the certificate chain from the top-level navigation context). Null for localhost and file on disk, which are secure contexts without SSL certificates. The certificate chain is necessary because a payment application may have different trust requirements for websites.

val topLevelCertificateChain: Array<Parcelable>? =
extras.getParcelableArray("topLevelCertificateChain")

Every Parcelable is a Bundle with a "certificate" key and a byte array value.

val list: List<ByteArray>? = topLevelCertificateChain?.mapNotNull { p ->
(p ace Bundle).getByteArray("certificate")
}

paymentRequestOrigin

The non-schema source of the iframe navigation context that was invoking new PaymentRequest (methodData, details, options) constructor in JavaScript. If the constructor was invoked from the top-level context, then the value of this parameter is equal to the value of topLevelOrigin parameter.

val paymentRequestOrigin: String? = extras.getString("paymentRequestOrigin")

Answer

The service can send its response through handleIsReadyToPay (Boolean) method.

callback?.handleIsReadyToPay(true)

Excuse me

You can use Binder.getCallingUid () to check who the caller is. Note that you have to do this in the isReadyToPay method, not the onBind method.

override fun isReadyToPay(callback: IsReadyToPayServiceCallback?) {
try {
val callingPackage = packageManager.getNameForUid(Binder.getCallingUid())

See Verify the caller's signing certificate for how to verify that the calling packet has the correct signature.

Step 3: let a customer check out

The merchant calls Show() to start the payment application so that the customer can make a payment. The paid app is invoked through an Android intent PAY with transaction information in the intent parameters.

The payment application responds with methodName and details, which are specific to the payment application and are opaque to the browser. The browser converts the details
String in a JavaScript object for the merchant via JSON deserialization, but it doesn't apply any validity beyond that. The browser does not modify the
details; the value of that parameter is passed directly to the merchant.

AndroidManifest.xml

The activity with the PAY The intent filter must have a A tag that identifies the default payment method identifier for the application.

To support multiple payment methods, add a label with a
resource.

<activity
android:yam=".PaymentActivity"
android:theme="@style/Theme.SamplePay.Dialog">

<intent-filter>
<action android:yam="org.chromium.intent.action.PAY" />
</intent-filter>

<meta-data
android:yam="org.chromium.default_payment_method_name"
android:value="https://bobpay.xyz/pay" />

<meta-data
android:yam="org.chromium.payment_method_names"
android:resource="@array/method_names" />

</activity>

the resource must be a list of strings, each of which must be a valid absolute URL with an HTTPS scheme as shown here.

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array yam="method_names">
<item>https://alicepay.com/put/optional/path/here</item>
<item>https://charliepay.com/put/optional/path/here</item>
</string-array>
</resources>

Parameters

The following parameters are passed to the activity as intent extras:

  • methodNames
  • methodData
  • topLevelOrigin
  • topLevelCertificateChain
  • paymentRequestOrigin
  • total
  • modifiers
  • paymentRequestId

val extras: Bundle? = I tried?.extras

methodNames

The names of the methods that are used. The elements are the keys in the
methodData dictionary. These are the methods that the payment application supports.

val methodNames: List<String>? = extras.getStringArrayList("methodNames")

methodData

A mapping of each of the methodNames to the
methodData.

val methodData: Bundle? = extras.getBundle("methodData")

Merchant name

The content of the </html></code> HTML tag of the merchant checkout page (the top-level navigation context of the browser).</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> String<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>The origin of the merchant without the schema (The origin without the schema of the top-level navigation context). For example, <code>https://mystore.com/checkout</code> it happens like <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> String<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>The merchant's certificate chain (the certificate chain from the top-level navigation context). Null for localhost and file on disk, which are secure contexts without SSL certificates. Every <code>Parcelable</code> it's a package with a<br /> <code>certificate</code> key and a byte array value.</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>Parcelable<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> List<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">ace</span> Bundle<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">"certificate"</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>The non-schema source of the iframe navigation context that was invoking <code>new PaymentRequest (methodData, details, options)</code> constructor in JavaScript. If the constructor was invoked from the top-level context, then the value of this parameter is equal to the value of <code>topLevelOrigin</code> parameter.</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> String<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>total</code> <span class="ez-toc-section-end"></span></h4> <p>The JSON string that represents the total amount of the transaction.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> total<span class="token operator">:</span> String<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>Here is an example of string content:</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>modifiers</code> <span class="ez-toc-section-end"></span></h4> <p>The output of <code>JSON.stringify (details.modifiers)</code>, where <code>details.modifiers</code><br /> contain only <code>supportedMethods</code> and <code>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>the <code>PaymentRequest.id</code> field that “automatic payment” applications should associate with the status of the transaction. Merchant websites will use this field to query "auto pay" applications for out-of-band transaction status.</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> String<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>Answer <span class="ez-toc-section-end"></span></h3> <p>The activity can send its response through <code>setResult</code> with <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">Intent</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>You must specify two parameters as intent extras:</p> <ul> <li><code>methodName</code>: The name of the method that is being used.</li> <li><code>details</code>: JSON string containing the information necessary for the merchant to complete the transaction. If success is <code>true</code>, then <code>details</code> must be constructed in such a way that <code>JSON.parse (details)</code> it could happen.</li> </ul> <p>You can pass <code>RESULT_CANCELED</code> if the transaction was not completed in the payment application, for example if the user did not enter the correct PIN code for their account in the payment application. The browser may allow the user to choose a different payment application.</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>If the activity result of a payment response received from the invoked payment application is set to <code>RESULT_OK</code>, then Chrome will check if it is not empty <code>methodName</code> and<br /> <code>details</code> in your extras. If validation fails, Chrome will return a rejected promise of <code>request.show ()</code> with one of the following error messages faced by developers:</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>Excuse me <span class="ez-toc-section-end"></span></h3> <p>The activity can check the caller with their <code>getCallingPackage ()</code> method.</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> String<span class="token operator">?</span> <span class="token operator">=</span> callingPackage</code></pre> <p></web-copy-code></p> <p>The last step is to verify the caller's signing certificate to confirm that the calling packet has the correct signature.</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>Step 4: Verify the caller's signing certificate <span class="ez-toc-section-end"></span></h2> <p>You can check the caller's package name with <code>Binder.getCallingUid ()</code> in<br /> <code>IS_READY_TO_PAY</code>, and with <code>Activity.getCallingPackage ()</code> in <code>PAY</code>. To really verify that the caller is the browser you have in mind, you need to check their signing certificate and make sure it matches the correct value.</p> <p>If you are targeting API level 28 and above and you are integrating with a browser that has a single signing certificate, you can use<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> String <span class="token operator">=</span> … <br><span class="token keyword">val</span> certificate<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>certificate<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> It is preferred for single certificate browsers as it handles certificate rotation correctly. (Chrome has only one signing certificate.) Applications that have multiple signing certificates cannot rotate them.</p> <p>If you need to support API levels older than 27 and lower, or if you need to handle browsers with multiple signing certificates, you can use<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> String <span class="token operator">=</span> … <br><span class="token keyword">val</span> certificates<span class="token operator">:</span> Set<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>Item<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>size <span class="token operator">==</span> certificates<span class="token punctuation">.</span>size <span class="token operator">&&</span><br>signatures<span class="token punctuation">.</span><span class="token function">there</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> Item<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" >Contents</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="Step 1: let merchants discover your payment app ">Step 1: let merchants discover your payment app </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="Step 2: Inform a merchant if a client has a registered instrument that they are ready to pay ">Step 2: Inform a merchant if a client has a registered instrument that they are ready to pay </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="Implement IsReadyToPayService ">Implement 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="Parameters ">Parameters </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="Answer ">Answer </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="Excuse me ">Excuse me </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="Step 3: let a customer check out ">Step 3: let a customer check out </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="Parameters ">Parameters </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="Merchant name ">Merchant name </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="total ">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="modifiers ">modifiers </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="Answer ">Answer </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="Excuse me ">Excuse me </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="Step 4: Verify the caller's signing certificate ">Step 4: Verify the caller's signing certificate </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-4831575'> <!-- YARPP List --> <h5>Related Posts</h3><ol> <li><a href="https://rmarketingdigital.com/en/dev/overview-of-web-based-payment-applications/" rel="bookmark" title="Web-based payment applications overview" data-wpel-link="internal">Web-based payment applications overview</a></li> <li><a href="https://rmarketingdigital.com/en/dev/empower-payment-applications-with-web-payments/" rel="bookmark" title="Boost payment applications with web payments" data-wpel-link="internal">Boost payment applications with web payments</a></li> <li><a href="https://rmarketingdigital.com/en/plantilla-excel/vacation-employees/" rel="bookmark" title="Calculation of overtime" data-wpel-link="internal">Calculation of overtime</a></li> <li><a href="https://rmarketingdigital.com/en/elementor/plugins-and-plugins-for-elementor/" rel="bookmark" title="Plugins and Plugins for Elementor" data-wpel-link="internal">Plugins and Plugins for Elementor</a></li> </ol> </div> <div class='yarpp yarpp-related yarpp-related-website yarpp-template-yarpp-template-example-8257458'> <!-- YARPP List --> <h5>Related Posts</h3><ol> <li><a href="https://rmarketingdigital.com/en/dev/overview-of-web-based-payment-applications/" rel="bookmark" title="Web-based payment applications overview" data-wpel-link="internal">Web-based payment applications overview</a></li> <li><a href="https://rmarketingdigital.com/en/dev/empower-payment-applications-with-web-payments/" rel="bookmark" title="Boost payment applications with web payments" data-wpel-link="internal">Boost payment applications with web payments</a></li> <li><a href="https://rmarketingdigital.com/en/plantilla-excel/vacation-employees/" rel="bookmark" title="Calculation of overtime" data-wpel-link="internal">Calculation of overtime</a></li> <li><a href="https://rmarketingdigital.com/en/elementor/plugins-and-plugins-for-elementor/" rel="bookmark" title="Plugins and Plugins for Elementor" data-wpel-link="internal">Plugins and Plugins for 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="">Related Posts</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/en/dev/giving-superpowers-to-css-variables/" 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="hero-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="hero-7923897-5622351-jpg" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/en/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/en/dev/giving-superpowers-to-css-variables/" aria-label="Giving superpowers to CSS variables" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Giving superpowers to CSS variables</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='R Digital Marketing' 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='R Digital Marketing' 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/en/author/r-marketing-digital/" data-wpel-link="internal">R Digital Marketing</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/en/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="hero-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="hero-2836929-1047989-jpg" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/en/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/en/dev/fix-an-overloaded-server/" aria-label="Fix an overloaded server" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Fix an overloaded server</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='R Digital Marketing' 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='R Digital Marketing' 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/en/author/r-marketing-digital/" data-wpel-link="internal">R Digital Marketing</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/en/dev/whats-new-in-lighthouse-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="lighthouse-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="lighthouse-logo-5769199-svg_-3706970-svgxml" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/en/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/en/dev/whats-new-in-lighthouse-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">What's New in Lighthouse 6.0</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='R Digital Marketing' 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='R Digital Marketing' 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/en/author/r-marketing-digital/" data-wpel-link="internal">R Digital Marketing</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 Digital Marketing: Whatsapp Marketing. Social media management, web design and management, online advertising, SEM and SEO, E-mail Marketing.</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="facebook partner" 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="facebook partner" 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="google partner" 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="google partner" 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>Tutorials and training</h4> <ul> <li><a href="https://rmarketingdigital.com/en/formacion/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Training</a></li> <li><a href="https://rmarketingdigital.com/en/power-bi-blog/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Power Bi</a></li> <li><a href="https://rmarketingdigital.com/en/marketing/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Marketing</a></li> <li><a href="https://rmarketingdigital.com/en/dev/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Dev</a></li> <li><a href="https://rmarketingdigital.com/en/elementor/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Elementor</a></li> <li><a href="https://rmarketingdigital.com/en/seo/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">SEO</a></li> <li><a href="https://rmarketingdigital.com/en/elementor/tools/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Tools</a></li> <li><a href="https://rmarketingdigital.com/en/excel-templates/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Excel Templates</a></li> <li><a href="https://rmarketingdigital.com/en/negocios/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Business</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/en/wordpress/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Wordpress 101</a></li> </ul> </ul> <h4>Social networks</h4> <ul> <ul> <li><a href="https://rmarketingdigital.com/en/facebook/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Facebook</a></li> <li><a href="https://rmarketingdigital.com/en/instagram/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Instagram</a></li> <li><a href="https://rmarketingdigital.com/en/whatsapp/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">WhatsApp</a></li> <li><a href="https://rmarketingdigital.com/en/download-torrents/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Torrents</a></li> <li><a href="https://rmarketingdigital.com/en/cine-series/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Movies and series</a></li> </ul> </ul></div></div><div id="nav_menu-4" class="widget widget_nav_menu"><h4>Language</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 current-language-menu-item menu-item-129688"><a href="https://rmarketingdigital.com/en/dev/developer-guide-for-android-paid-apps/" data-wpel-link="internal"><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 menu-item-129689"><a href="https://rmarketingdigital.com/fr/dev/guide-du-developpeur-pour-applications-payantes-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><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>User</h4> <ul> <li style="list-style-type: none;"> <ul> <li class="cookie-policy-p"><a href="https://rmarketingdigital.com/en/privacy-policy/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Privacy Policy</a></li> <li><a href="https://rmarketingdigital.com/en/cookies-policy/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Cookies policy</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 Digital Marketing. </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="Back" 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="">Close 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/en/blog/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Blog</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>💻Development</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/en/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/en/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/en/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/en/freeware/" data-wpel-link="internal">Freeware</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105273"><a href="https://rmarketingdigital.com/en/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/en/servidores-vps/" data-wpel-link="internal">Servers / VPS</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129672"><a href="https://rmarketingdigital.com/en/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/en/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/en/negocios/" data-wpel-link="internal">💼Business</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/en/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/en/estrategias/" data-wpel-link="internal">Strategies</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105267"><a href="https://rmarketingdigital.com/en/formacion/" data-wpel-link="internal">Training</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105275"><a href="https://rmarketingdigital.com/en/marketing/" data-wpel-link="internal">Marketing</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-105637"><a href="https://rmarketingdigital.com/en/excel-templates/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Excel Templates</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-106686"><a href="https://rmarketingdigital.com/en/power-bi-blog/" 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/en/software-gestion/" data-wpel-link="internal">Management Software</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/en/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/en/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/en/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/en/files/" data-wpel-link="internal">🗂️Files</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/en/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/en/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/en/herramientas/" data-wpel-link="internal">🧰Tools</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-135948"><a href="https://rmarketingdigital.com/en/marketing-deportivo/" data-wpel-link="internal">⚽Sports Marketing</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/en/redes-sociales/" data-wpel-link="internal">📱Social networks</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/en/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/en/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/en/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/en/streaming/" data-wpel-link="internal">Streaming</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105283"><a href="https://rmarketingdigital.com/en/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/en/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="#">📺Leisure</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/en/cine-series/" data-wpel-link="internal">Cinema and Series</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129669"><a href="https://rmarketingdigital.com/en/gaming/" data-wpel-link="internal">Gaming</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129670"><a href="https://rmarketingdigital.com/en/tv-online/" data-wpel-link="internal">Online tv</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-108306"><a href="https://rmarketingdigital.com/en/download-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/en/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/en/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/en/ecommerce/" data-wpel-link="internal">Ecommerce</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105288"><a href="https://rmarketingdigital.com/en/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/en/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>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/en/agency-seo/" data-wpel-link="internal">Web positioning</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67229"><a href="https://rmarketingdigital.com/en/advertising-social-networks-facebook-instagram/" data-wpel-link="internal">Advertising on social networks</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67230"><a href="https://rmarketingdigital.com/en/community-manager/" data-wpel-link="internal">Community manager</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67228"><a href="https://rmarketingdigital.com/en/follower-boost-instagram-accounts/" data-wpel-link="internal">Follower boost</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67231"><a href="https://rmarketingdigital.com/en/ecommerce/" data-wpel-link="internal">Ecommerce</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67710"><a href="https://rmarketingdigital.com/en/solutions-elearning/" data-wpel-link="internal">E-Learning Solutions</a></li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-93606"><a href="https://rmarketingdigital.com/en/glossary-digital-marketing-2/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Glossary</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">Ask for 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/en/work-with-us/" data-wpel-link="internal">Work with us</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="#">Language</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 current-language-menu-item menu-item-129687"><a href="https://rmarketingdigital.com/en/dev/developer-guide-for-android-paid-apps/" data-wpel-link="internal"><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 menu-item-129635"><a href="https://rmarketingdigital.com/fr/dev/guide-du-developpeur-pour-applications-payantes-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><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="en_US"></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":"en_US","trp_original_language":"es_ES","trp_current_language":"en_US","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\/en\/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":"\/en(\/(?:.+\/)?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\/en\/","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\/en\/","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@1722072137 --><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="9bbd221e8a678f5eab7fd5d6-|49" defer></script>