Create a Charge

Utilisez l'API Frais d'Affirm et votre action côté serveur pour traiter les frais.

Autoriser les frais

Le point de terminaison crée un prêt et réserve les fonds. Lorsque vous autorisez, Affirm génère un charge_id que vous utiliserez pour faire référence à la charge à l'avenir. Vous devez autoriser une charge pour le créer entièrement.

❗️

Si vous n'autorisez pas un débit, il ne sera pas considéré comme actif. 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 un prélèvement, vous aurez besoin du checkout_token renvoyé par votre intégration client.

curl https://sandbox.affirm.com/api/v2/charges/
     -X POST
     -u "{public_api_key}:{private_api_key}"
     -H "Content-Type: application/json"
     -d '{"checkout_token": "{checkout_token}","order_id": "{order_id}"}'
$endpoint = "https://sandbox.affirm.com/api/v2/charges";
$data = '{"checkout_token": "' . $_POST["checkout_token"] . '"}';
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/v2/charges")) {
		var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("<public_api_key>:<private_api_key>"));
		request.Headers.TryAddWithoutValidation("Authorization", $ "Basic {base64authorization}");
		request.Content = new StringContent("{\"checkout_token\":\"<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 qui ressemble à ceci avec le charge_id.

{
   "id":"ALO4-UVGR",
   "created":"2016-03-18T19:19:04Z",
   "currency":"USD",
   "amount":6100,
   "auth_hold":6100,
   "payable":0,
   "void":false,
   "expires": "2016-04-18T19:19:04Z",
   "order_id":"JKLM4321",
   "events":[
      {
         "created":"2014-03-20T14:00:33Z",
         "currency":"USD",
         "id":"UI1ZOXSXQ44QUXQL",
         "transaction_id":"TpR3Xrx8TkvuGio0",
         "type":"auth"
      }
   ],
   "details":{
      "items":{
         "sweater-a92123":{
            "sku":"sweater-a92123",
            "display_name":"Sweater",
            "qty":1,
            "item_type":"physical",
            "item_image_url":"http://placehold.it/350x150",
            "item_url":"http://placehold.it/350x150",
            "unit_price":5000
         }
      },
      "order_id":"JKLM4321",
      "shipping_amount":400,
      "tax_amount":700,
      "shipping":{
         "name":{
            "full":"John Doe"
         },
         "address":{
            "line1":"325 Pacific Ave",
            "city":"San Francisco",
            "state":"CA",
            "zipcode":"94112",
            "country":"USA"
         },
        "phone_number": "4153334567",
        "email": "[email protected]"
      },
      "discounts": {
        "RETURN5": {
          "discount_amount":    500,
          "discount_display_name": "Returning customer 5% discount"
        },
        "PRESDAY10": {
          "discount_amount":    1000,
          "discount_display_name": "President's Day 10% off"
        }
      }
   }
}

Une fois que vous avez autorisé des frais 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
  • Conserver le charge_id
  • Marquez le paiement de la commande comme étant en attente

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

📘

Vous ne devez autoriser un prêt Affirm donné qu'une seule fois pour le montant total de la transaction en cours d'achat. Si vous avez un cas d'utilisation spécifique où cela peut être difficile, veuillez communiquer avec nous à l'adresse [email protected] ou utiliser le widget au bas de la page.

Capturer une charge

Une fois qu'une commande a été traitée, vous devez envoyer une requête API Capture à Affirm afin de capturer ou de régler les fonds. Vous voudrez effectuer cette activité à partir de vos systèmes back-end sécurisés. Pour capturer une transaction autorisée, vous aurez besoin de l'charge_id fourni dans la réponse API Authorization. Il n'y a pas de champs obligatoires qui doivent être enregistrés à partir de la réponse Capture.

La capture des fonds est similaire à celle d'une transaction par carte de crédit. Après avoir capturé le prêt, nous procédons comme suit :

  • Nous informons le client que le prêt a été prélevé et que son premier paiement est dû à Affirm dans 30 jours
  • Payer le commerçant dans 2 à 3 jours ouvrables
curl https://sandbox.affirm.com/api/v2/charges/{CHARGE_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"}'
$endpoint = "https://sandbox.affirm.com/api/v2/charges";
$url = $endpoint . "/" . $_GET["id"] . "/capture";
$data = '';
try {
 $response = callAffirm($url, $data);
// Handle the response
} catch (Exception $e) {
 // Handle the exception

Vous recevrez ensuite une réponse avec la confirmation.

{
  "fee": 600,
  "created": "2016-03-18T00:03:44Z",
  "order_id": "JKLM4321",
  "currency": "USD",
  "amount": 6100,
  "type": "capture",
  "id": "O5DZHKL942503649",
  "transaction_id": "6dH0LrrgUaMD7Llc"
}