Configurer le SDK iOS

Avec le SDK iOS, vous pouvez proposer Affirm comme option de paiement dans les applications iOS. Ce guide vous explique la manière de configurer le client iOS sur votre page de paiement.

Aperçu

Commencer un paiement avec Affirm sur un client iOS consiste à créer un formulaire de paiement, à tokeniser les renseignements des clients pour les transmettre en toute sécurité à votre serveur et à utiliser ce jeton pour initier une facturation.

Le SDK iOS est disponible sur Github.


Étapes

1. Configurer Affirm sur iOS

Avec CocoaPods

  1. Installez la dernière version de CocoaPods.
  2. Si vous n'avez pas de Podfile existant, exécutez cette commande pour en créer un :
pod init
  1. Ajoutez cette ligne à votre Podfile :
pod 'AffirmSDK'
  1. Exécutez cette commande :
pod install
  1. Utilisez le fichier .xcworkspace pour ouvrir votre projet dans Xcode, au lieu du fichier .xcodeproj, à partir de maintenant.
  2. À l'avenir, pour mettre à jour vers la dernière version du SDK, vous pouvez exécuter ceci :
pod update AffirmSDK

Avec Carthage

  1. Installez la dernière version de Carthage.
  2. Ajoutez cette ligne à votre Cartfile :
github "Affirm/affirm-merchant-sdk-ios"
  1. Suivez les instructions d'installation de Carthage.
  2. À l'avenir, pour passer à la dernière version du SDK, exécutez cette commande :
carthage update affirm-merchant-sdk-ios --platform ios
🚧

Versions du SDK

Pour en savoir plus sur la dernière version du SDK et les versions antérieures, consultez la page des versions sur GitHub. Surveillez les versions pour que le référentiel reçoive des notifications lorsqu'une nouvelle version est publiée.


2. Initialiser Affirm

Configurez le SDK avec votre clé API publique Affirm afin qu'il puisse effectuer des requêtes vers le serveur Affirm :

ffirmConfiguration.shared.configure(publicKey: "YOUR PUBLIC KEY", environment: .sandbox, merchantName: "Affirm Example Swift")
[[AffirmConfiguration sharedInstance] configureWithPublicKey:@"YOUR PUBLIC KEY" environment:AffirmEnvironmentSandbox merchantName:@"Affirm Example"];

3. Rendu du paiement Affirm

La création d'une caisse est le moment où un client utilise Affirm pour payer un achat intégré à une application. Vous pouvez créer un objet de paiement et lancer le paiement Affirm en utilisant la fonction Checkout :

let dollarPrice = NSDecimalNumber(string: self.amountTextField.text)
        let item = AffirmItem(name: "Affirm Test Item", sku: "test_item", unitPrice: dollarPrice, quantity: 1, url: URL(string: "http://sandbox.affirm.com/item")!)
        let shipping = AffirmShippingDetail.shippingDetail(name: "Chester Cheetah", line1: "633 Folsom Street", line2: "", city: "San Francisco", state: "CA", zipCode: "94107", countryCode: "USA")
        let checkout = AffirmCheckout(items: [item], shipping: shipping, taxAmount: NSDecimalNumber.zero, shippingAmount: NSDecimalNumber.zero, discounts: nil, metadata: nil, financingProgram: nil, orderId: "JKLMO4321")

        let controller = AffirmCheckoutViewController.start(checkout: checkout, useVCN: true, delegate: self)
        present(controller, animated: true, completion: nil)
// initialize an AffirmItem with item details
AffirmItem *item = [AffirmItem itemWithName:@"Affirm Test Item" SKU:@"test_item" unitPrice:price quantity:1 URL:[NSURL URLWithString:@"http://sandbox.affirm.com/item"]];

// initialize an AffirmShippingDetail with the user's shipping address
AffirmShippingDetail *shipping = [AffirmShippingDetail shippingDetailWithName:@"Chester Cheetah" addressWithLine1:@"633 Folsom Street" line2:@"" city:@"San Francisco" state:@"CA" zipCode:@"94107" countryCode:@"USA"];

// initialize an AffirmCheckout object with the item(s), shipping details, tax amount, shipping amount, discounts, financing program, and order ID
AffirmCheckout *checkout = [[AffirmCheckout alloc] initWithItems:@[item] shipping:shipping taxAmount:[NSDecimalNumber zero] shippingAmount:[NSDecimalNumber zero] discounts:nil metadata:nil financingProgram:nil orderId:@"JKLMO4321"];

// The minimum requirements are to initialize the AffirmCheckout object with the item(s), shipping details, and payout Amount
AffirmCheckout *checkout = [AffirmCheckout checkoutWithItems:@[item] shipping:shipping payoutAmount:price];

// initialize an UINavigationController with the checkout object and present it
UINavigationController *nav = [AffirmCheckoutViewController startCheckoutWithNavigation:checkout useVCN:YES getReasonCodes:NO delegate:self];
[self presentViewController:nav animated:YES completion:nil];

// It is recommended that you round the total in the checkout request to two decimal places. Affirm SDK converts the float total to integer cents before initiating the checkout, so may round up or down depending on the decimal places. Ensure that the rounding in your app uses the same calculation across your other backend systems, otherwise, it may cause an error of 1 cent or more in the total validation on your end.

Ajouter un message promotionnel d'Affirm

Les composants de messagerie promotionnelle d’Affirm montrent aux clients comment ils peuvent utiliser Affirm pour financer leurs achats. Des messages promotionnels correctement placés contribuent à augmenter la valeur moyenne des commandes et la conversion.

A. Configurer la messagerie promotionnelle :

1. Pour afficher la messagerie promotionnelle, utilisez la classe AffirmPromotionalButton, qui vous oblige uniquement à configurer et à ajouter à votre vue pour l'implémentation. Pour mettre en œuvre le AffirmPromotionalButton :

self.promotionalButton = [[AffirmPromotionalButton alloc] initWithPromoID:@"promo_set_ios"
                                                                  showCTA:YES
                                                                 pageType:AffirmPageTypeProduct
                                                 presentingViewController:self
                                                                    frame:CGRectMake(0, 0, 315, 34)];
[self.stackView insertArrangedSubview:self.promotionalButton atIndex:0];

2. Utilisez ce qui suit pour afficher ou actualiser a la messagerie promotionnelle :

[self.promotionalButton configureByHtmlStylingWithAmount:[NSDecimalNumber decimalNumberWithString:amountText]
                                          affirmLogoType:AffirmLogoTypeName
                                             affirmColor:AffirmColorTypeBlue
                                           remoteFontURL:[NSURL URLWithString:@"https://fonts.googleapis.com/css?family=Saira+Stencil+One&display=swap"]
                                            remoteCssURL:url];
self.promotionalButton.configure(amount: NSDecimalNumber(string: amountText),
                         affirmLogoType: .name,
                            affirmColor: .blue,
                                   font: UIFont.italicSystemFont(ofSize: 15),
                              textColor: .gray)

3. Pour utiliser des polices locales :

  • Tout d'abord, ajoutez les fichiers de polices à votre projet. Assurez-vous que les fichiers sont correctement ciblés sur votre application.
  • Ensuite, ajoutez les fichiers de police à votre App-Info.plist.
  • Enfin, utilisez la police dans votre fichier CSS. Par exemple :
@font-face
{
font-family: 'OpenSansCondensed-Bold';
src: local('OpenSansCondensed-Bold'),url('OpenSansCondensed-Bold.ttf') format('truetype');
}

body {
font-family: 'OpenSansCondensed-Light';
font-weight: normal;
!important;
}
📘

Si aucun message promotionnel n'est renvoyé, nous masquons automatiquement le bouton.

Appuyer sur le bouton Promotionnel ouvre automatiquement une fenêtre modale dans un AffirmPrequalModalViewController avec plus de renseignements, y compris (si vous l'avez configuré) un bouton qui invite l'utilisateur à se préqualifier pour le financement Affirm.

B. Récupérer la chaîne brute du message promotionnel :

Vous pouvez récupérer une chaîne brute en utilisant AffirmDataHandler.

NSDecimalNumber *dollarPrice = [NSDecimalNumber decimalNumberWithString:self.amountTextField.text];
[AffirmDataHandler getPromoMessageWithPromoID:@"promo_set_ios"
                                       amount:dollarPrice
                                      showCTA:YES
                                     pageType:AffirmPageTypeBanner
                                     logoType:AffirmLogoTypeName
                                    colorType:AffirmColorTypeBlue
                                         font:[UIFont boldSystemFontOfSize:15]
                                    textColor:[UIColor grayColor]
                     presentingViewController:self
                            completionHandler:^(NSAttributedString *attributedString, UIViewController *viewController, NSError *error) {
                                [self.promoButton setAttributedTitle:attributedString forState:UIControlStateNormal];
                                self.promoViewController = viewController;
}];

Ensuite, vous pouvez présenter le modal promotionnel en utilisant ce qui suit :

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.promoViewController];
[self presentViewController:nav animated:YES completion:nil];
  • initWithPromoId – Affirm fournit cette ID promotionnelle.

    • showCTA – Pour afficher le lien vers le modal.
    • pageType - Affirm fournit ce type de Page.
  • Bouton Configurer :

    • configureWithAmount: Le prix du produit ou du panier au format NSDecimalNumber.
    • affirmLogoType: AffirmDisplayTypeLogo, AffirmDisplayTypeText, AffirmDisplayTypeSymbol ou AffirmDisplayTypeSymbolHollow
    • affirmColor: AffirmColorTypeBlue, AffirmColorTypeBlack, ou AffirmColorTypeWhite.

C. Ajouter un modal éducatif :

En tapant sur AffirmAsLowAsButton ouvre un modal éducatif basé sur les éléments suivants :

  • Lorsque alaEnabled est défini sur true et que le montant est supérieur ou égal à 50, le client voit un modal de produit avec des informations de tarification
  • Lorsque alaEnabled est défini sur true et que le montant est inférieur à 50, le client voit un modal de site sans les informations de tarification.
  • Lorsque alaEnabled est défini sur false, le client voit un modal de site sans les informations de tarification.

Pour afficher une fenêtre modale ailleurs dans l'application, initialisez et affichez une instance de la VC modale comme suit :

Appuyez sur le bouton Promotionnel pour ouvrir automatiquement un modal dans un AffirmPrequalModalViewController avec plus de renseignements, y compris (si vous l'avez configuré) un bouton qui invite l'utilisateur à se préqualifier pour le financement Affirm.

AffirmPromoModalViewController *viewController = [[AffirmPromoModalViewController alloc] initWithPromoId:@"promo_id" amount:amount delegate:delegate];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.presentingViewController presentViewController:nav animated:YES completion:nil];
  • le prix du produit ou du panier en NSDecather (une valeur inférieure à amount ouvre un site modal sans information sur les prix)
  • promoId: Affirm fournit cette ID promotionnelle

D. Suivi de commande confirmée :

L'événement trackOrderConfirmed s'est déclenché lorsqu'un client effectue l'achat. Le SDK fournit la classe AffirmOrderTrackerViewController pour le suivre, qui nécessite AffirmOrder et un tableau contenant AffirmProduct.

[AffirmOrderTrackerViewController trackOrder:order products:@[product0, product1]];
📘

Cette fonctionnalité s’améliore une fois que le point de terminaison est prêt pour l’application et disparaît après 5 secondes.


5. Gérer les rappels

L'objet AffirmCheckoutDelegate qui reçoit des messages à différentes étapes du processus de paiement. Il renverra checkout_token de ce délégué.

func checkout(_ checkoutViewController: AffirmCheckoutViewController, completedWithToken checkoutToken: String)
- (void)checkout:(AffirmCheckoutViewController *)checkoutViewController completedWithToken:(NSString *)checkoutToken

Pour plus de rappels, consultez la référence du code.

👍

Checkout Token

Une fois que la caisse a été confirmée avec succès par l'utilisateur, l'objet AffirmCheckoutDelegate reçoit un checkout_token. Ce jeton doit être transféré sur votre serveur, qui doit être utilisé pour autoriser des frais sur le compte de l'utilisateur.


6. Créer une charge

Lorsqu'un client réussit à passer à la caisse, c'est enregistré comme une nouvelle tentative d'achat. Cela doit être géré côté serveur pour être rempli via notre API Charges.


Quelle est la prochaine étape?