Source: services/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 });
/**
 * GMO クレジット
 * @namespace services/credit
 */
const createDebug = require("debug");
const querystring = require("querystring");
const request = require("request-promise-native");
const badRequest_1 = require("../error/badRequest");
const debug = createDebug('gmo-service:credit');
/**
 * 取引登録
 * @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
 */
function entryTran(args) {
    return __awaiter(this, void 0, void 0, function* () {
        debug('requesting...', args);
        const body = yield request.post({
            url: `${process.env.GMO_ENDPOINT}/payment/EntryTran.idPass`,
            form: {
                ShopID: args.shopId,
                ShopPass: args.shopPass,
                OrderID: args.orderId,
                JobCd: args.jobCd,
                Amount: args.amount
            }
        }).promise();
        debug('request processed.', body);
        const result = querystring.parse(body);
        if (result.ErrCode !== undefined) {
            throw new badRequest_1.BadRequestError(body);
        }
        return {
            accessId: result.AccessID,
            accessPass: result.AccessPass
        };
    });
}
exports.entryTran = entryTran;
/**
 * 決済実行
 * @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
 */
function execTran(args) {
    return __awaiter(this, void 0, void 0, function* () {
        debug('requesting...', args);
        const body = yield request.post({
            url: `${process.env.GMO_ENDPOINT}/payment/ExecTran.idPass`,
            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
            }
        }).promise();
        debug('request processed.', body);
        const result = querystring.parse(body);
        if (result.ErrCode !== undefined) {
            throw new badRequest_1.BadRequestError(body);
        }
        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
        };
    });
}
exports.execTran = execTran;
/**
 * 決済変更
 * @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
 */
function alterTran(args) {
    return __awaiter(this, void 0, void 0, function* () {
        debug('requesting...', args);
        const body = yield request.post({
            url: `${process.env.GMO_ENDPOINT}/payment/AlterTran.idPass`,
            form: {
                ShopID: args.shopId,
                ShopPass: args.shopPass,
                AccessID: args.accessId,
                AccessPass: args.accessPass,
                JobCd: args.jobCd,
                Amount: args.amount,
                Method: args.method
            }
        }).promise();
        debug('request processed.', body);
        const result = querystring.parse(body);
        if (result.ErrCode !== undefined) {
            throw new badRequest_1.BadRequestError(body);
        }
        return {
            accessId: result.AccessID,
            accessPass: result.AccessPass,
            forward: result.Forward,
            approve: result.Approve,
            tranId: result.TranID,
            tranDate: result.TranDate
        };
    });
}
exports.alterTran = alterTran;
/**
 * 取引状態参照
 * @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
 */
function searchTrade(args) {
    return __awaiter(this, void 0, void 0, function* () {
        debug('requesting...', args);
        const body = yield request.post({
            url: `${process.env.GMO_ENDPOINT}/payment/SearchTrade.idPass`,
            form: {
                ShopID: args.shopId,
                ShopPass: args.shopPass,
                OrderID: args.orderId
            }
        }).promise();
        debug('request processed.', body);
        const result = querystring.parse(body);
        if (result.ErrCode !== undefined) {
            throw new badRequest_1.BadRequestError(body);
        }
        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
        };
    });
}
exports.searchTrade = searchTrade;
/**
 * 金額変更
 * @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
 */
function changeTran(args) {
    return __awaiter(this, void 0, void 0, function* () {
        debug('requesting...', args);
        const body = yield request.post({
            url: `${process.env.GMO_ENDPOINT}/payment/ChangeTran.idPass`,
            form: {
                ShopID: args.shopId,
                ShopPass: args.shopPass,
                AccessID: args.accessId,
                AccessPass: args.accessPass,
                JobCd: args.jobCd,
                Amount: args.amount,
                Tax: args.tax
            }
        }).promise();
        debug('request processed.', body);
        const result = querystring.parse(body);
        if (result.ErrCode !== undefined) {
            throw new badRequest_1.BadRequestError(body);
        }
        return {
            accessId: result.AccessID,
            accessPass: result.AccessPass,
            forward: result.Forward,
            approve: result.Approve,
            tranId: result.TranID,
            tranDate: result.TranDate
        };
    });
}
exports.changeTran = changeTran;