決済APIを使って決済してみる

決済のしくみについて

Intentを使用することで、決済アプリケーションとの連携をすることができます。

決済アプリケーションでは、下記の機能を提供しています。

■決済アプリケーション機能

・取引の実行

・過去の決済の再印字の実行

・一括日計の実行

決済アプリケーションとの連携はAndroid™のIntentを用いて行います。

どのような決済ができるのか

決済APIを使用すると、下記の決済機能を使用することができます。

■決済アプリケーション機能詳細

・取引(決済)

売上、取消、返品ができます。

金種はクレジットカード決済、電子マネー決済、QRコード決済から選択できます。(開発するアプリケーション上から、決済方法の指定はできません)

練習モードでの呼び出しもできます。

・再印字

過去の取引情報を再印字することができます。

決済アプリケーション上から該当の取引を選択し、レシートに印字します。

・一括日計

一括日計処理を実施できます。

決済コードを書いてみよう

決済時にはIntent経由で決済情報のパラメータを渡します。

パラメータを設定する際には、putExtraメソッドを使用します。

設定可能なパラメータは下記のとおりです。

 

■startActivityForResult() 呼び出し時の Intent.putExtra()の設定:

表の詳細については横スクロールさせて確認することができます。

Key

取引モード

TransactionMode

通常

”1”

 

練習

”2”

 

表の詳細については横スクロールさせて確認することができます。

Key

取引種別

TransactionType

売上

”1”

 

取消

”2”

 

返品

”3”

 

表の詳細については横スクロールさせて確認することができます。

Key

金額

Amount

金額

1~99999999

Tax

税・その他

0~9999999

 

表の詳細については横スクロールさせて確認することができます。

Key

伝票番号

SlipNumber

1~99999</

”00001”~”99999”

 

決済実行後の結果はonActivityResultメソッドから取得できます。

取得可能なパラメータは下記のとおりです。

 

■onActivityResult()呼び出し時の Intent.getExtra()での取り出し:

表の詳細については横スクロールさせて確認することができます。

Key

決済種別

PaymentType

クレジット

”01”

 

電子マネー

”02”

 

QR

”03”

 

表の詳細については横スクロールさせて確認することができます。

Key

エラーコード

ErrorCode

あり

”FFFFFFFF”

 

なし

””

 

表の詳細については横スクロールさせて確認することができます。

Key

伝票番号

SlipNumber

1

”00001”

 

...

...

 

99999

”99999”

 

表の詳細については横スクロールさせて確認することができます。

Key

取引種別

TransactionType

売上

”1”

 

取消

”2”

 

返品

”3”

 

表の詳細については横スクロールさせて確認することができます。

Key

金額

Amount

金額

”1~99999999”

Tax

税・その他

”0~99999999”

 

表の詳細については横スクロールさせて確認することができます。

Key

カードブランド

CreditCardBrand

MS/マニュアル入力

”00”

 

VISA

”01”

 

Mastercard

”02”

 

JCB

”03”

 

AmericanExpress

”04”

 

Diners

”05”

 

銀聯

”06”

 

表の詳細については横スクロールさせて確認することができます。

Key

会員番号

CreditCardMaskedPAN

*でマスクされた番号

”123456******3456”

 

表の詳細については横スクロールさせて確認することができます。

Key

通貨コード

CurrencyCode

”JPY”

 

表の詳細については横スクロールさせて確認することができます。

Key

電子マネー種別

EMoneyType

iD

”01”

 

交通系IC

”02”

 

楽天Edy

”03”

 

WAON

”04”

 

nanaco

”05”

 

QUICPay plus

”06”

 

PiTaPa

”07”

決済の一連の流れは下記のように進みます。

1. 作成するアプリケーション上から、決済アプリケーションのIntentを作成します。

Intent作成後、putExtraメソッドでIntentへ渡すパラメータを設定します。

サンプルコードでは下記パラメータを設定しています。

 ・TransactionMode(取引モード):2(練習モード)

 ・TransactionType(取引種別):1(売上)

 ・Amount(金額):100(円)

 ・Tax(税):10(円)

 

startActivityForResultメソッドを実行すると、決済アプリケーションへ遷移します。

コードは横スクロールさせて確認することができます。

// 決済アプリアプリケーション用Intentの作成
Intent intentResult = new Intent();
intentResult.setClassName("com.panasonic.smartpayment.android.salesmenu",
        "com.panasonic.smartpayment.android.salesmenu.MainActivity");

// リクエスト用パラメータの設定(例では取引を指定)
intentResult.putExtra("TransactionMode", "2");
intentResult.putExtra("TransactionType", "1");
intentResult.putExtra("Amount", "100");
intentResult.putExtra("Tax", "10");

// 決済アプリケーションへ遷移
startActivityForResult(intentResult, 2);

2.決済アプリケーション上で決済を実行します

 

決済アプリケーションの画面は下記のようになります。

 

決済アプリケーションの画面

 

1で設定した取引モード、取引種別、金額が連携されており、決済アプリケーションに従って決済を進めます。

決済アプリケーション上での決済が完了/キャンセルすると、作成中のアプリケーションへ制御が戻ります。

 

3. 決済アプリケーションからの戻り値を取得する

決済アプリケーションの実行が終了すると、onActivityResultメソッドが実行されます。

このonActivityResultメソッド内に戻り値に応じたハンドリングを実装してください。

 

下のサンプルコードでは、getStringExtraメソッドで取得した“PaymentType”の値と、resultCodeの値により次に遷移するページを切替えています。

コードは横スクロールさせて確認することができます。

    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

        Log.d(TAG, "[in] onActivityResult()");
        Log.d(TAG, "requestCode=" + requestCode);
        Log.d(TAG, "resultCode=" + resultCode);
        Log.d(TAG, "PaymentType=" + intent.getStringExtra("PaymentType"));

        final Intent intentResult = new Intent(CancelReturnActivity.this, ResultActivity.class);
        intentResult.putExtra("TransactionType", mTransactionType);
        if (resultCode == MainActivity.SUCCESS) {
            intentResult.putExtra("Result", getString(R.string.judgetransactionOK));
            intentResult.putExtra("ResultCode", resultCode);
        } else if (resultCode == MainActivity.FAIL) {
            Log.d(TAG, "ErrorCodeCancelReturn=" + intent.getStringExtra("ErrorCode"));
            intentResult.putExtra("Result", getString(R.string.judgetransactionNG));
            intentResult.putExtra("ResultCode", resultCode);
        } else if (resultCode == MainActivity.CANCEL) {
            intentResult.putExtra("Result", getString(R.string.judgetransactionCancel));
            intentResult.putExtra("ResultCode", resultCode);
        } else {
            Log.d(TAG, "CancelReturnActivity got incorrect resultCode. resultCode=" + resultCode);
        }
        startActivity(intentResult);
        Log.d(TAG, "[out] onActivityResult()");
        // Finish this Activity
        finishAndRemoveTask();
    }

Android は Google LLC の商標です。