決済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

金種

PaymentType

クレジット・銀聯

”01”

  iD ”02-01”
  交通系IC ”02-02”
  楽天Edy ”02-03”
  WAON ”02-04”
  nanaco ”02-05”
  QUICPay plus ”02-06”
  PiTaPa ”02-07”
  QR ”03”

 

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

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

会員番号

EMoneyNumber

1234567890123450

”1234567890123456”

 

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

Key

QR種別

QRPayType

楽天ペイ

”11”

 

LINEPay

”12”

 

PayPay

”13”

 

d払い

”14”

 

auPay

”15”

 

メルペイ

”16”

 

銀行Pay

”19”

  WeChatPay ”21”
  Alipay ”22”
  銀聯 ”23”
  BankPay ”35”

 

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

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 の商標です。