お客さまから、PayPalまたはcard.ioを使用した決済カードによる1回払いを受け取ります。これは、(1)サーバーがその後に認証する必要がある即時支払い、または(2)サーバーがその後に回収する必要がある支払いの認証、または(3)サーバーがその後に認証および回収する必要がある注文の支払いのいずれかです。
まだ実行していない場合は、プロジェクトにSDKを追加するための基本的な概要と手順のREADMEを参照してください。
-
PayPal iOS SDKは
- ユーザーから支払い情報を集めるためのUIを表示します。
- PayPalと支払いを調整します。
- アプリに支払い応答を返します。
-
コードは
-
オプションとして、アプリで、PayPal iOS SDKがユーザーに配送先住所を選ばせるように指定することもできます。
-
コードは
- PayPal iOS SDKに、アプリで提供された配送先住所および/またはユーザーのPayPalアカウントに登録されている配送先住所を表示するよう命令します。
このドキュメントには、アプリでPayPal iOS SDKの決済APIを使用するためのサンプルコードが記載されています。
-
SDKを初期化してクライアントIDを入力します。この操作は通常、AppDelegateの
didFinishLaunchingWithOptions:
メソッドで行います。- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // ... [PayPalMobile initializeWithClientIdsForEnvironments:@{PayPalEnvironmentProduction : @"YOUR_CLIENT_ID_FOR_PRODUCTION", PayPalEnvironmentSandbox : @"YOUR_CLIENT_ID_FOR_SANDBOX"}]; // ... return YES; }
注: 本番環境からクライアントIDを取得していない場合は、
PayPalEnvironmentProduction
の項目を省略できます。 -
PayPalPaymentDelegateの下位のクラス(UIViewControllerのサブクラスなど)を作成します。
// SomeViewController.h #import "PayPalMobile.h" @interface SomeViewController : UIViewController<PayPalPaymentDelegate> // ... @end
-
PayPalConfiguration
オブジェクトを作成します。このオブジェクトにより、SDKのさまざまな側面を設定できます。// SomeViewController.m @interface SomeViewController () // ... @property (nonatomic, strong, readwrite) PayPalConfiguration *payPalConfiguration; // ... @end @implementation SomeViewController - (instancetype)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { _payPalConfiguration = [[PayPalConfiguration alloc] init]; // 値の詳細とデフォルト値はPayPalConfiguration.hを参照してください。 // 値を変更する必要がある場合は、ここで変更できます。 // たとえば、PayPalを受け付けてカード決済を受け付けない場合は以下を追加します。 _payPalConfiguration.acceptCreditCards = NO; // ユーザーのPayPalアカウントに登録されている配送先住所から // 選択させたい場合は以下を追加します。 _payPalConfiguration.payPalShippingAddressOption = PayPalShippingAddressOptionPayPal; } return self; }
-
環境を確立し、PayPalのサーバーに事前接続します。
ユーザーが支払いを開始する可能性のあるビューコントローラーを最初に表示する際に行うことをおすすめします。 (接続時間は制限されているため、コントローラーの表示よりもかなり前に事前接続することはしないでください。)
// SomeViewController.m - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // テスト環境で作業を開始してください。準備完了後、PayPalEnvironmentProductionに切り替えます。 [PayPalMobile preconnectWithEnvironment:PayPalEnvironmentNoNetwork]; }
-
金額、通貨コード、短い説明、およびインテント(即時販売対承認/回収対注文/承認/回収)を使用して
PayPalPayment
を作成します。invoiceNumber
やPayPalShippingAddress
(PayPalPayment.h
で定義)のようなオプションフィールドを含めることができます。// SomeViewController.m - (IBAction)pay { // PayPal支払いの作成 PayPalPayment *payment = [[PayPalPayment alloc] init]; // 金額、通貨、および説明 payment.amount = [[NSDecimalNumber alloc] initWithString:@"39.95"]; payment.currencyCode = @"USD"; payment.shortDescription = @"Awesome saws"; // intentプロパティを使用して、これが「販売」の支払いであることを示します。 // これは承認と回収の組み合わせを意味します。 // 承認のみを実行し、回収をサーバーで処理する場合は、 // PayPalPaymentIntentAuthorizeを使用します。 // 注文を実行し、承認と回収をサーバーで処理する場合は、 // PayPalPaymentIntentOrderを使用します。 // (PayPalPaymentIntentOrderは、PayPal支払いでのみ有効です。クレジットカード決済の場合は無効です。) payment.intent = PayPalPaymentIntentSale; // アプリがお客さまから配送先住所を収集する場合、 // または配送先住所がサーバーに格納されている場合は、ここで入力します。 payment.shippingAddress = address; // 以前に作成されたPayPalShippingAddressオブジェクト // ここで設定できるその他のオプションフィールドはPayPalPayment.hにドキュメント化されています。 // paymentDetails、items、invoiceNumber、custom、softDescriptorなどがあります。 // 支払いが処理可能かどうかを確認します。 if (!payment.processable) { // たとえば、金額がマイナスの場合やshortDescriptionが空の場合、 // この支払いは処理できません。ここで処理することをおすすめします。 } // 後に続きます
-
PayPalPayment
およびPayPalConfiguration
オブジェクト(上記を参照)を使用してPayPalPaymentViewController
を作成し、表示します。// 上記からの続きです // PayPalPaymentViewControllerを作成します。 PayPalPaymentViewController *paymentViewController; paymentViewController = [[PayPalPaymentViewController alloc] initWithPayment:payment configuration:self.payPalConfiguration delegate:self]; // PayPalPaymentViewControllerを表示します。 [self presentViewController:paymentViewController animated:YES completion:nil]; }
-
完了した支払いまたは支払い取り消しを受信するデリゲートメソッドを記述します。これらのデリゲートメソッドは、モーダルビューコントローラーを破棄する必要があります。
// SomeViewController.m #pragma mark - PayPalPaymentDelegateメソッド - (void)payPalPaymentViewController:(PayPalPaymentViewController *)paymentViewController didCompletePayment:(PayPalPayment *)completedPayment { // 支払いは処理されました。認証とフルフィルメントのためサーバーに送信します。 [self verifyCompletedPayment:completedPayment]; // PayPalPaymentViewControllerを破棄します。 [self dismissViewControllerAnimated:YES completion:nil]; } - (void)payPalPaymentDidCancel:(PayPalPaymentViewController *)paymentViewController { // 支払いが取り消されました。PayPalPaymentViewControllerを破棄します。 [self dismissViewControllerAnimated:YES completion:nil]; }
-
認証、回収、または処理に加えて、注文から発送までの処理(フルフィルメント)などの業務に必要なその他の処理のために、支払い応答をサーバーに送信します。
ヒント: 即時支払いの場合、この時点で支払いは完了し、ユーザーには請求済みです。支払いの承認/回収または注文の場合、サーバーは実際にユーザーに請求する支払いを回収する必要があります。サーバーにアクセスできない場合は、支払い証明を保存し、しばらくしてから再実行してください。
// SomeViewController.m - (void)verifyCompletedPayment:(PayPalPayment *)completedPayment { // 確認ディレクトリ全体を送信します NSData *confirmation = [NSJSONSerialization dataWithJSONObject:completedPayment.confirmation options:0 error:nil]; // サーバーに確認を送信します。サーバーは支払い証明を認証し、 // ユーザーに商品またはサービスを提供します。サーバーにアクセスできない場合は、確認を保存し、 // しばらくしてから再実行してください。 }
不正の防止 即時支払いの場合は、必ず支払い証明を認証してください。
支払いの承認/回収の場合、サーバーは支払いを回収する必要があります。
注文の場合、サーバーは注文を処理する必要があります。