stera terminal(ステラターミナル)の設置情報を利用する

端末設置情報とは

stera terminal(ステラターミナル)には端末固有のシリアル番号や、識別番号、加盟店番号、業種情報、利用可能な金種一覧などの端末設置情報を保持しております。

端末設置情報は下記のとおりです。

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

No. 設置情報 詳細
1 機種名(品番) 端末の機種名
2 シリアル番号 端末固有のシリアル番号
3 システムバージョン 端末にインストールされているシステム(ソフトウェア)のバージョン
4 端末識別番号(TID) 端末が固有に持つ、識別番号(半角数字13ケタの文字列)
5 加盟店番号 端末を設置している加盟店の番号
6 業種コード 下記5種類に分類された業種コード(半角数字1~5の文字列)
“業種コード”:業種
“1”:物販
“2”:飲食
“3”:宿泊
“4”:旅行
“5”:その他
7 業種名 設置している加盟店の業種名
8 利用可能な金種一覧
(※1)

決済連携サービスに利用可能な金種コード一覧(文字列)

“金種コード”:金種

“01”:クレジット,銀聯

“02-01”:iD

“02-02”:交通系IC

“02-03”:楽天Edy

“02-04”:WAON

“02-05”:nanaco

“02-06”:QUICPay plus

“02-07”:PiTaPa

“03”:QR

1:金種とは、決済時に利用する決済方法の種別のことです。

アプリは以下のSDKを利用することで端末設置情報を取得することができます。

  • stera terminal standard(ステラターミナルスタンダード)ではPaymentApi.jar
  • stera terminal unit/mobile(ステラターミナルユニット/モバイル)ではPaymentApi2.jar

PaymentApi.jarの利用方法は以下のページを参照ください。

stera terminal との機能連携用SDK

InstalledInfomation Java APIについて

端末設置情報の取得にはInstalledInfomationAPIを利用します。

InstalledInfomation Java APIで提供するAPIは次のとおりです。

  • 各メソッドの引数には、ValueType(enum型)で定義した値を指定してください。
  • 取得しようとした情報が端末に登録されていない場合、もしくは各メソッドの引数にValueType(enum型)で定義されていない値を指定した場合は、“”で通知します。
  • 事前にPaymentApiサービスへの接続、各種インスタンスの取得が必要となります。
  • 各情報の内容は更新される可能性があるため、常に最新の情報を取得してご使用ください。

InstalledInformation Java APIフィールド

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

No. フィールド名 詳細
1 static String PRODUCT_SALES “1” 業種コード(=”1”)の「物販」を意味するフィールド
2 static String RESTAURANT “2” 業種コード(=”2”)の「飲食」を意味するフィールド
3 static String ACCOMODATIONS “3” 業種コード(=”3”)の「宿泊」を意味するフィールド
4 static String TRAVEL_AGANCY “4” 業種コード(=”4”)の「旅行」を意味するフィールド
5 static String OTHERS “5” 業種コード(=”5”)の「その他」を意味するフィールド
6 static String CREDIT_UNIONPAY “01” 金種コード(=”01”)の「クレジット,銀聯」を意味するフィールド
7 static String ID “02-01” 金種コード(=”02-01”)の「iD」を意味するフィールド
8 static String TRAFFIC_IC “02-02” 金種コード(=”02-02”)の「交通系IC」を意味するフィールド
9 static String RAKUTEN_EDY “02-03” 金種コード(=”02-03”)の「楽天Edy」を意味するフィールド
10 static String WAON “02-04” 金種コード(=”02-04”)の「WAON」を意味するフィールド
11 static String NANACO “02-05” 金種コード(=”02-05”)の「nanaco」を意味するフィールド
12 static String QUIC_PAY “02-06” 金種コード(=”02-06”)の「QUICPay」を意味するフィールド
13 static String PITAPA “02-07” 金種コード(=”02-07”)の「PiTaPa」を意味するフィールド
14 static String QR “03” 金種コード(=”03”)の「QR」を意味するフィールド

InstalledInformation Java API メソッド

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

No メソッド 機能
1 enum ValueType 取得可能な情報の種類をenum型で列挙します。
メソッドNo.2、No.3の引数に使用してください。
種類(enum型):情報名
PRODUCT_NUMBER:機種名(品番)
SERIAL_NUMBER:シリアル番号
SYSTEM_VERSION:システムバージョン
TID:端末識別番号
MERCHANT_NUMBER:加盟店番号
INDUSTRY_CODE:業種コード
INDUSTRY_NAME:業種名
2 String getTerminalInfo(ValueType valueType)

端末情報を文字列で取得できます。

どの情報を取得するかは該当する種類(valueType)をenum型で指定します。
種類(enum型):端末情報名
PRODUCT_NUMBER:機種名(品番)
SERIAL_NUMBER:シリアル番号
SYSTEM_VERSION:システムバージョン
TID:端末識別番号

3 String getMerchantInfo(ValueType valueType)

加盟店情報を文字列で取得できます。

どの情報を取得するかは該当する種類(valueType)をenum型で指定します。
種類(enum型):加盟店情報名
MERCHANT_NUMBER :加盟店番号
INDUSTRY_CODE :業種コード
INDUSTRY_NAME :業種名

4 List<String> getPaymentType() 決済連携サービスに利用可能な金種コードをString型のListで取得できます。(利用不可な金種コードは含まれません)
 “金種コード”:金種
“01”:クレジット,銀聯
“02-01”:iD
“02-02”:交通系IC
“02-03”:楽天Edy
“02-04”:WAON
“02-05”:nanaco
“02-06”:QUICPay plus
“02-07”:PiTaPa
“03”:QR

実際に情報を取得してみる

端末設置情報を取得するためには下記の手続きを実施する必要があります。

端末設置情報の取得フロー図 イメージ

実際のコードは下記のとおりです。

InstalledInfomationのインスタンス取得

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

    protected void onResume() {
        super.onResume();

        // Connect to PaymentAPI Service.
        mPaymentApiConnection.initializePaymentApi(this);

        // check if PaymentApi is connected
        mPaymentApiConnection.setIPaymentApiInitializationListener(new IPaymentApiInitializationListener() {

            // PaymentApi is connected
            @Override
            public void onApiConnected() {
                Log.d(TAG, "[in] onApiConnected");
                mCallbackHandler.post(mRunnable = new Runnable() {
                    @Override
                    public void run() {

                        // Get IInstalledInformation instance
                        mIInstalledInformation = mPaymentApiConnection.getInstalledInformation();

                        showInstalledInformation();
                    }
                });
                Log.d(TAG, "[out] onApiConnected");
            }

            // PaymentApi isn't connected
            @Override
            public void onApiDisconnected() {
                Log.d(TAG, "PaymentApi is disconnected");
            }
        });
    }

取得する情報ごとのAPIを実行

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

    // get InstalledInformation values and show them
    private void showInstalledInformation() {

        // Get Product Number
        String productNumber = mIInstalledInformation.getTerminalInfo(IInstalledInformation.ValueType.PRODUCT_NUMBER);
        Log.d(TAG, "Product Number =" + productNumber);
        mTvModelName.setText(productNumber);


        // Get Serial Number
        String serialNumber = mIInstalledInformation.getTerminalInfo(IInstalledInformation.ValueType.SERIAL_NUMBER);
        Log.d(TAG, "Serial Number =" + serialNumber);
        mTvSerialNumber.setText(serialNumber);


        // Get System Version
        String systemVersion = mIInstalledInformation.getTerminalInfo(IInstalledInformation.ValueType.SYSTEM_VERSION);
        Log.d(TAG, "System version =" + systemVersion);
        mTvPaymentSystemVersion.setText(systemVersion);


        // Get TID (Terminal Identification)
        String TerminalID = mIInstalledInformation.getTerminalInfo(IInstalledInformation.ValueType.TID);
        Log.d(TAG, "TID(Terminal ID) =" + TerminalID);
        mTvTerminalID.setText(TerminalID);


        // Get Merchant Number
        String merchantNumber = mIInstalledInformation.getMerchantInfo(IInstalledInformation.ValueType.MERCHANT_NUMBER);
        Log.d(TAG, "Merchant Number =" + merchantNumber);
        mTvMerchantNumber.setText(merchantNumber);


        // Get Industry Code
        String industryCode = mIInstalledInformation.getMerchantInfo(IInstalledInformation.ValueType.INDUSTRY_CODE);
        Log.d(TAG, "Industry Code =" + industryCode);

        String industry = "";
        switch (industryCode) {
            case IInstalledInformation.PRODUCT_SALES:
                industry = getString(R.string.ProductSales);
                break;
            case IInstalledInformation.RESTAURANT:
                industry = getString(R.string.Restaurant);
                break;
            case IInstalledInformation.ACCOMMODATIONS:
                industry = getString(R.string.Accommodation);
                break;
            case IInstalledInformation.TRAVEL_AGENCY:
                industry = getString(R.string.Travel);
                break;
            case IInstalledInformation.OTHERS:
                industry = getString(R.string.Others);
                break;
            default:
                Log.d(TAG, "Unknown industry code.");
                break;
        }
        mTvIndustryCode.setText(getString(R.string.IndustryCode) + getString(R.string.separator) + industryCode + "\n"
                + getString(R.string.Industry) + getString(R.string.separator) + industry);


        // Get Industry Name
        String industryName = mIInstalledInformation.getMerchantInfo(IInstalledInformation.ValueType.INDUSTRY_NAME);
        Log.d(TAG, "Industry Name =" + industryName);
        mTvIndustryName.setText(industryName);


        // Get Payment Type
        List<String> paymentType = mIInstalledInformation.getPaymentType();
        Log.d(TAG, "Payment Type=" + paymentType);
        StringBuilder availablePaymentType = new StringBuilder();
        for (String type : paymentType) {
            switch (type) {
                case IInstalledInformation.CREDIT_UNIONPAY:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.CreditUnionPay) + "\n");
                    break;
                case IInstalledInformation.ID:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.iD) + "\n");
                    break;
                case IInstalledInformation.TRAFFIC_IC:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.TrafficIC) + "\n");
                    break;
                case IInstalledInformation.RAKUTEN_EDY:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.Edy) + "\n");
                    break;
                case IInstalledInformation.WAON:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.WAON) + "\n");
                    break;
                case IInstalledInformation.NANACO:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.nanaco) + "\n");
                    break;
                case IInstalledInformation.QUIC_PAY:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.QUICPay) + "\n");
                    break;
                case IInstalledInformation.PITAPA:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.PiTaPa) + "\n");
                    break;
                case IInstalledInformation.QR:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.QR) + "\n");
                    break;
                default:
                    availablePaymentType.append(type + getString(R.string.separator)
                            + getString(R.string.unknownPaymentType) + "\n");
                    Log.d(TAG, "No function is ready");
                    break;
            }
        }
        mTvPaymentType.setText(availablePaymentType);
    }