# One-Click Checkout

&#x20;This guide allows you to achieve a significant speedup of the checkout process by re-using the data a customer entered for a previous transaction/registration. It's based on one of these two guides:

* The [PrimeiroPay Tokenization Tutorial](https://primeiropay.docs.oppwa.com/widget-tokenisation)
* The [Server-to-Server Tokenization Tutorial](https://primeiropay.docs.oppwa.com/tokenisation)

After the customer account details are stored, as part of the initial transaction/registration, you will need to keep a record of the associated registration IDs (token) that you can then use in step 1 below.

### How it works

### 1. Prepare the checkout

NOTE: For demonstration purposes we have created a registration, which will be used in your one-click checkout, with id(s): 8ac7a4a0739e4f720173a048387d7a7c,8ac7a49f739e470f0173a048391e1c24. Following the guides above, you may add additional registrations options to the checkout.

First perform a server-to-server POST request to prepare the checkout, this should include the registration IDs of the customer as shown below.

The registration IDs should be sent in the `registrations[n].id` parameter, where n is a sequence number from zero, incrementing for each of the customer's registration IDs. For example, if the customer has two accounts on file, you would send `registrations[0].id = {first registration.id}` and `registrations[1].id = {second registration.id}`.

```
curl https://test.oppwa.com/v1/checkouts \
 -d "entityId=8a8294184e736012014e78a17a5615ac" \
 -d "amount=92.00" \
 -d "currency=EUR" \
 -d "paymentType=DB" \
 -d "registrations[0].id=8ac7a4a0739e4f720173a048387d7a7c" \
 -d "registrations[1].id=8ac7a49f739e470f0173a048391e1c24" \
 -d "createRegistration=true" \
 -H "Authorization: Bearer OGE4Mjk0MTg0ZTczNjAxMjAxNGU3OGExN2E2YTE1YjB8ZjJGRUtacXRCUA=="
```

Response:

```
{
  "result":{
    "code":"000.200.100",
    "description":"successfully created checkout"
  },
  "buildNumber":"982467e36fd8bc9e74f536ba375c5d0be4fe48eb@2020-07-30 03:42:32 +0000",
  "timestamp":"2020-07-30 15:23:37+0000",
  "ndc":"B20EFF3A508805D585492DDFFE381BCC.uat01-vm-tx03",
  "id":"B20EFF3A508805D585492DDFFE381BCC.uat01-vm-tx03"
}
```

### 2. Create the payment form

Then, to show the payment form you just need to add the following lines of HTML/Javascript to your page and populating the following variables

* The checkout's `id` that you got in the response from step 1

  ```
  <script src="https://test.oppwa.com/v1/paymentWidgets.js?checkoutId={checkoutId}"></script>
  ```
* The `shopperResultUrl`, which is the page on your site where the customer should be redirected to after the payment is processed and the brands that will be available.

  ```
  <form action="{shopperResultUrl}" class="paymentWidgets">VISA MASTER AMEX</form>
  ```

When Primeiro Pay builds up the payment form it automatically fetches the registrations data from the server and displays the pre-filled widgets to the shopper.

Require CVVShow initial payment from

* html

```
<form action="https://primeiropay.docs.oppwa.com/tutorials/integration-guide/one-click#" class="paymentWidgets">VISA MASTER AMEX</form>
```

* css

```
body {background-color:#f6f6f5;}
```

* js

```
var wpwlOptions = { registrations: { requireCvv: false, hideInitialPaymentForms: true } }
```

* result

![](/files/-MGjnuePcsxwd0F6MRC3)

### 3. Get the payment status <a href="#getstatus" id="getstatus"></a>

As usual, once the payment has been processed, the customer is redirected to your `shopperResultUrl` along with a GET parameter `resourcePath`.

IMPORTANT: The baseUrl must end in a "/", e.g. "<https://test.oppwa.com/>".

Then, to get the status of the payment, you should make a GET request to the `baseUrl + resourcePath`, including your authentication parameters.

Example for a resourcePath:

```
resourcePath=/v1/checkouts/{checkoutId}/payment
```

<https://test.oppwa.com/v1/checkouts//payment>

```
curl -G https://test.oppwa.com/v1/checkouts/{id}/payment \
 -d "entityId=8a8294184e736012014e78a17a5615ac" \
 -H "Authorization: Bearer OGE4Mjk0MTg0ZTczNjAxMjAxNGU3OGExN2E2YTE1YjB8ZjJGRUtacXRCUA=="
```

We recommend that you verify the following fields from the Payment Status response, by comparing the returned values with expected:

* ID(s)
* Amount
* Currency
* Brand
* Type


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.primeiropay.com/one-click-checkout-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
