LoginSignup
4

More than 5 years have passed since last update.

POSレジAPIでiOSアプリに決済機能を追加しよう

Posted at

POSレジAPIはWeb APIではなくiOS/Androidアプリに対してSquareの決済機能を追加できるAPIになります。実際の動作については下の動画を見てもらうのが早いと思います。

自分たちで開発するアプリに対して、Squareのレジアプリを呼び出すことで決済を行ってもらえます。そしてアプリ側に決済完了のコールバックが送られてくる仕組みです。

今回はiOSでの実装方法を紹介します。

SDKの導入

POSレジAPIを扱うためのSDK、SquarePointOfSaleSDKを導入する方法は3つ用意しています。

CocoaPods

platform :ios, '9.0'
pod 'SquarePointOfSaleSDK'

Carthage

github "Square/SquarePointOfSaleSDK-iOS"

Gitサブモジュール

https://github.com/square/SquarePointOfSaleSDK-iOS.git をクローンして SquarePointOfSaleSDK.xcodeproj をXcodeプロジェクトに追加してください。

Info.plistの更新

次にInfo.plistを開いて2つ追加を行います。

LSApplicationQueriesSchemesの追加

新しく LSApplicationQueriesSchemes を追加します。TypeArray で、値は square-commerce-v1 になります。

Squareレジアプリにて決済後、その結果をコールバックしますのでURLスキーマを登録します。

Property Value
Identifier Square
URL Schemes 設定したURLスキーマ
Role Editor

開発者ポータルでアプリ登録

最後に開発者ポータルへ行き、アプリを登録します。Point of Sale APIを選ぶとiOSアプリのバンドルIDとURLスキーマを登録する画面になりますので、開発しているアプリの情報を登録してください。

組み込む

アプリへの組み込み方です。今回はSwiftで紹介します。 your-url-scheme は自分のURLスキーマに置き換えてください。 YOUR_CLIENT_ID はアプリケーションIDです。

let yourCallbackURL = URL(string: "your-url-scheme://")!

SCCAPIRequest.setClientID("YOUR_CLIENT_ID")

do {
    // Specify the amount of money to charge.
    let money = try SCCMoney(amountCents: 1000, currencyCode: "JPY")

    // Create the request.
    let apiRequest =
        try SCCAPIRequest(
            callbackURL: yourCallbackURL,
            amount: money,
            userInfoString: nil,
            merchantID: nil,
            notes: "Coffee",
            customerID: nil,
            supportedTenderTypes: .all,
            clearsDefaultFees: false,
            returnAutomaticallyAfterPayment: false
        )

    // Open Point of Sale to complete the payment.
    try SCCAPIConnection.perform(apiRequest)

} catch let error as NSError {
    print(error.localizedDescription)
}

そしてコールバックされてきた時の処理を書きます。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    guard let sourceApplication = options[.sourceApplication] as? String,
        sourceApplication.hasPrefix("com.squareup.square") else {
        return false
    }

    do {
        let response = try SCCAPIResponse(responseURL: url)

        if let error = response.error {
            // エラー時の処理です
            print(error.localizedDescription)
        } else {
            // 成功時の処理です
        }

    } catch let error as NSError {
        // 例外発生時の処理です
        print(error.localizedDescription)
    }

    return true
}

レスポンスで受け取るデータはJSONですが、次のような内容になっています。

項目 内容
transaction_id 文字列 処理した取引ID。ユニーク
client_transaction_id 文字列 オフラインモード時での取引ID
status 文字列 処理が正常であればokと入ります
error_code 文字列 エラー時のコード。詳細はエラーコード一覧を参考にしてください
state 文字列 リクエスト時にstateに与えた値と同じものが入ります

このような処理でiOSにレジ機能が組み込めるようになります。なお、利用に際してSquareのレジアプリが必須になりますのでご注意ください。使えるAPIがレジアプリのバージョンによって異なりますので、なるべく最新のものを使い続けるようにしてください。

Point of Sale API setup

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4