Authorize and Capture Transactions

Apprendre le flux d'autorisation et de capture.

Authorize Transaction

The Authorize Transaction endpoint creates a loan and reserves the funds. When you authorize, Affirm generates a unique id that you’ll use to reference the transaction moving forward. You must authorize a transaction before capturing it.

Diagram showcasing the authorize and capture flow.

Cela représente le flux d'autorisation et de capture.

❗️

Si vous n'autorisez pas une transaction, elle ne sera pas considérée comme active. Cela signifie que l'utilisateur ne verra pas le prêt et que vous ne pourrez pas récupérer les fonds. Pour cette raison, vous devez autoriser le prêt dès que vous recevez un checkout_token.

Pour autoriser une transaction, vous aurez besoin du checkout_token renvoyé par votre intégration du passage à la caisse pour le transmettre dans le paramètre transaction_id .

curl https://sandbox.affirm.com/api/v1/transactions
     -X POST
     -u "{public_api_key}:{private_api_key}"
     -H "Content-Type: application/json"
     -d '{"transaction_id": "{checkout_token}","order_id": "{order_id}"}'
$endpoint = "https://sandbox.affirm.com/api/v1/transactions";
$data = '{"transaction_id": "' . $_POST["transactions_id"] . '"}';
try {
 $response = callAffirm($endpoint, $data);
 // Handle the response
} catch (Exception $e) {
 // Handle the exception
}
using(var httpClient = new HttpClient()) {
	using(var request = new HttpRequestMessage(new HttpMethod("POST"), "https://sandbox.affirm.com/api/v1/transactions")) {
		var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("<public_api_key>:<private_api_key>"));
		request.Headers.TryAddWithoutValidation("Authorization", $ "Basic {base64authorization}");
		request.Content = new StringContent("{\"transaction_id\":\"<checkout_token>\"}");
		request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
		var response = await httpClient.SendAsync(request);
		HttpContent responseContent = response.Content;
		using(var reader = new StreamReader(await responseContent.ReadAsStreamAsync())) {
			Console.WriteLine(await reader.ReadToEndAsync());
		}
		Console.ReadKey();
	}
}

Vous devriez recevoir une réponse contenant un identifiant unique (« AMLC-5X0W » dans cet exemple).

{
    "status": "authorized",
    "amount_refunded": 0,
    "provider_id": 1,
    "created": "2021-06-23T23:25:55Z",
    "order_id": "ABC123",
    "checkout_id": "7WYDR0M83CGE47GJ",
    "currency": "USD",
    "amount": 49999,
    "events": [
        {
            "currency": "USD",
            "amount": 49999,
            "type": "auth",
            "id": "7WYDR0M83CGE47GJ",
            "created": "2021-06-23T23:26:28Z"
        }
    ],
    "remove_tax": false,
    "authorization_expiration": "2021-07-23T23:26:28Z",
    "id": "AMLC-5X0W"
}

Une fois que vous avez autorisé une transaction et reçu l'objet de réponse, votre site doit effectuer les opérations suivantes :

  • Valider que le montant autorisé est égal au total de la commande
  • Store the id (transaction identifier).
  • Mark the order payment as pending.

Si l'autorisation échoue, votre site peut potentiellement enregistrer cette tentative de paiement, car elle n'est pas requise de notre côté.

📘

Authorization Guidelines

Authorize each Affirm loan only once for the full amount of the transaction being purchased. If you have a specific use case where this may be difficult, please contact us at [email protected] or use the widget at the bottom of the page.


Capture a Transaction

Once an order has been fulfilled, you must send a Capture Transaction request to Affirm in order to capture or settle the funds. You will want to perform this activity from your secure back-end systems. To capture an authorized transaction, you'll need the id provided in the Authorization API response. There are no required fields that need to be stored from the Capture response.

La capture des fonds est similaire à celle d'une transaction par carte de crédit. Après avoir saisi le prêt, voici ce qui se produit :

  • Affirm notifies the customer that the loan has been captured and that their first payment is due to Affirm in 30 days (for monthly installments) or 2 weeks (for Pay in 4), or any other payment timeline.
  • Affirm pays the merchant within 2-3 business days via ACH transfer to the provided bank account.
curl https://sandbox.affirm.com/api/v1/transactions/{id}/capture
     -X POST
     -u {public_api_key}:{private_api_key}"
     -H "Content-Type: application/json"
     -d '{"order_id": "{order_id}", "shipping_carrier": "USPS", "shipping_confirmation": "1Z23223", "amount":49999}'
$endpoint = "https://sandbox.affirm.com/api/v1/transactions";
$url = $endpoint . "/" . $_GET["id"] . "/capture";
$data = '';
try {
 $response = callAffirm($url, $data);
// Handle the response
} catch (Exception $e) {
 // Handle the exception

📘

Partial Capture

Note that you can perform a partial capture by specifying a value in cents within the amount parameter.
The cumulative sum of partial capture amounts cannot exceed the originally authorized total.

Vous recevrez ensuite une réponse avec la confirmation.

{
    "fee": 1500,
    "created": "2021-06-23T23:27:13Z",
    "order_id": "ABC123",
    "currency": "USD",
    "amount": 49999,
    "reference_id": "6789",
    "type": "capture",
    "id": "7WYDR0M83CGE47GJ"
}