Source: service/credit.js

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
const createDebug = require("debug");
const http_status_1 = require("http-status");
const service_1 = require("../service");
const debug = createDebug('gmo-service:service:credit');
/**
 * クレジットカード決済サービス
 * @class
 */
class CreditService extends service_1.Service {
    /**
     * 取引登録
     * @memberOf services/credit
     * @function entryTran
     * @param {IEntryTranArgs} args 取引登録in
     * @param {string} args.shopId
     * @param {string} args.shopPass
     * @param {string} args.orderId
     * @param {util.JobCd} args.jobCd
     * @param {string} args.amount
     * @returns {Promise<IEntryTranResult>} 取引登録out
     */
    entryTran(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/EntryTran.idPass',
                method: 'POST',
                form: {
                    ShopID: args.shopId,
                    ShopPass: args.shopPass,
                    OrderID: args.orderId,
                    JobCd: args.jobCd,
                    Amount: args.amount
                }
            });
            return {
                accessId: result.AccessID,
                accessPass: result.AccessPass
            };
        });
    }
    /**
     * 決済実行
     * @memberOf services/credit
     * @function execTran
     * @param {IExecTranArgs} args 決済実行in
     * @param {string} args.accessId 取引ID
     * @param {string} args.accessPass 取引パスワード
     * @param {string} args.orderId オーダーID
     * @param {util.Method} args.method 支払方法
     * @param {number} args.payTimes 支払回数
     * @param {string} args.cardNo カード番号
     * @param {string} args.expire 有効期限
     * @param {string} args.securityCode セキュリティーコード
     * @param {string} args.token カード情報トークン
     * @param {string} args.pin 暗証番号
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @param {util.SeqMode} args.seqMode カード登録連番モード
     * @param {number} args.cardSeq カード登録連番
     * @param {string} args.cardPass カードパスワード
     * @param {string} args.clientField1 加盟店自由項目1
     * @param {string} args.clientField2 加盟店自由項目2
     * @param {string} args.clientField3 加盟店自由項目3
     * @returns {Promise<IExecTranResult>} 決済実行out
     */
    execTran(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/ExecTran.idPass',
                method: 'POST',
                form: {
                    AccessID: args.accessId,
                    AccessPass: args.accessPass,
                    OrderID: args.orderId,
                    Method: args.method,
                    PayTimes: args.payTimes,
                    CardNo: args.cardNo,
                    Expire: args.expire,
                    SecurityCode: args.securityCode,
                    Token: args.token,
                    PIN: args.pin,
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId,
                    SeqMode: args.seqMode,
                    CardSeq: args.cardSeq,
                    CardPass: args.cardPass,
                    ClientField1: args.clientField1,
                    ClientField2: args.clientField2,
                    ClientField3: args.clientField3
                }
            });
            return {
                acs: result.ACS,
                orderId: result.OrderID,
                forward: result.Forward,
                method: result.Method,
                payTimes: result.PayTimes,
                approve: result.Approve,
                tranId: result.TranID,
                tranDate: result.TranDate,
                checkString: result.CheckString,
                clientField1: result.ClientField1,
                clientField2: result.ClientField2,
                clientField3: result.ClientField3
            };
        });
    }
    /**
     * 決済変更
     * @memberOf services/credit
     * @function alterTran
     * @param {IAlterTranArgs} args 決済変更in
     * @param {string} args.shopId
     * @param {string} args.shopPass
     * @param {string} args.accessId
     * @param {string} args.accessPass
     * @param {util.JobCd} args.jobCd
     * @param {number} args.amount
     * @param {util.Method} args.method
     * @returns {Promise<IAlterTranResult>} 決済変更out
     */
    alterTran(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/AlterTran.idPass',
                method: 'POST',
                form: {
                    ShopID: args.shopId,
                    ShopPass: args.shopPass,
                    AccessID: args.accessId,
                    AccessPass: args.accessPass,
                    JobCd: args.jobCd,
                    Amount: args.amount,
                    Method: args.method
                }
            });
            return {
                accessId: result.AccessID,
                accessPass: result.AccessPass,
                forward: result.Forward,
                approve: result.Approve,
                tranId: result.TranID,
                tranDate: result.TranDate
            };
        });
    }
    /**
     * 取引状態参照
     * @memberOf services/credit
     * @function searchTrade
     * @param {ISearchTradeArgs} args 取引状態参照in
     * @param {string} args.shopId
     * @param {string} args.shopPass
     * @param {string} args.orderID
     * @returns {Promise<ISearchTradeResult>} 取引状態参照out
     */
    searchTrade(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/SearchTrade.idPass',
                method: 'POST',
                form: {
                    ShopID: args.shopId,
                    ShopPass: args.shopPass,
                    OrderID: args.orderId
                }
            });
            return {
                orderId: result.OrderID,
                status: result.Status,
                processDate: result.ProcessDate,
                jobCd: result.JobCd,
                accessId: result.AccessID,
                accessPass: result.AccessPass,
                itemCode: result.ItemCode,
                amount: result.Amount,
                tax: result.Tax,
                siteId: result.SiteID,
                memberId: result.MemberID,
                cardNo: result.CardNo,
                expire: result.Expire,
                method: result.Method,
                payTimes: result.PayTimes,
                forward: result.Forward,
                tranId: result.TranID,
                approve: result.Approve,
                clientField1: result.ClientField1,
                clientField2: result.ClientField2,
                clientField3: result.ClientField3,
                errCode: result.ErrCode,
                errInfo: result.ErrInfo
            };
        });
    }
    /**
     * 金額変更
     * @memberof services/credit
     * @function changeTran
     * @param {IChangeTranArgs} args 決済変更in
     * @param {string} args.shopId ショップID
     * @param {string} args.shopPass ショップパスワード
     * @param {string} args.accessId 取引ID
     * @param {string} args.accessPass 取引パスワード
     * @param {util.JobCd} args.jobCd 処理区分
     * @param {number} args.amount 利用金額
     * @param {string} args.tax 税送料
     * @returns {Promise<IChangeTranResult>} 金額変更out
     */
    changeTran(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/ChangeTran.idPass',
                method: 'POST',
                form: {
                    ShopID: args.shopId,
                    ShopPass: args.shopPass,
                    AccessID: args.accessId,
                    AccessPass: args.accessPass,
                    JobCd: args.jobCd,
                    Amount: args.amount,
                    Tax: args.tax
                }
            });
            return {
                accessId: result.AccessID,
                accessPass: result.AccessPass,
                forward: result.Forward,
                approve: result.Approve,
                tranId: result.TranID,
                tranDate: result.TranDate
            };
        });
    }
}
exports.CreditService = CreditService;