@chevre/domain 24.0.0-alpha.3 → 24.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/chevre/service/assetTransaction/pay/start/factory.d.ts +51 -3
- package/lib/chevre/service/assetTransaction/pay/start/factory.js +58 -21
- package/lib/chevre/service/assetTransaction/pay/start/preStart/fixPaymentService.d.ts +10 -0
- package/lib/chevre/service/assetTransaction/pay/start/preStart/fixPaymentService.js +88 -0
- package/lib/chevre/service/assetTransaction/pay/start/processAuthorize.d.ts +53 -0
- package/lib/chevre/service/assetTransaction/pay/start/processAuthorize.js +56 -0
- package/lib/chevre/service/assetTransaction/pay/start/processAuthorizeMovieTicket.d.ts +1 -1
- package/lib/chevre/service/assetTransaction/pay/start/processAuthorizeMovieTicket.js +1 -11
- package/lib/chevre/service/assetTransaction/pay/start.js +8 -132
- package/package.json +1 -6
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
* 決済取引ファクトリー
|
|
3
3
|
*/
|
|
4
4
|
import * as factory from '../../../../factory';
|
|
5
|
+
import type { IPaymentAgencyTransaction } from '../../../payment/creditCard';
|
|
6
|
+
/**
|
|
7
|
+
* 決済取引開始パラメータ生成
|
|
8
|
+
*/
|
|
5
9
|
export declare function createStartParams(params: factory.assetTransaction.pay.IStartParamsWithoutDetail & {
|
|
6
|
-
transactionNumber: string;
|
|
7
10
|
paymentServiceType: factory.service.paymentService.PaymentServiceType;
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
paymentService?: Pick<factory.service.paymentService.IService, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType'> | Pick<factory.product.IProduct, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType'> | {
|
|
12
|
+
typeOf: factory.service.paymentService.PaymentServiceType.FaceToFace;
|
|
13
|
+
id?: never;
|
|
14
|
+
serviceType?: never;
|
|
15
|
+
};
|
|
10
16
|
location?: factory.action.trade.pay.ILocation;
|
|
11
17
|
informActions: {
|
|
12
18
|
/**
|
|
@@ -20,3 +26,45 @@ export declare function createStartParams(params: factory.assetTransaction.pay.I
|
|
|
20
26
|
id: string;
|
|
21
27
|
};
|
|
22
28
|
}): factory.assetTransaction.IStartParams<factory.assetTransactionType.Pay>;
|
|
29
|
+
/**
|
|
30
|
+
* クレジットカード決済用の追加オプションを生成する
|
|
31
|
+
*/
|
|
32
|
+
export declare function createAuthorizeCreditCardOptions(options: {
|
|
33
|
+
executor?: {
|
|
34
|
+
id?: string;
|
|
35
|
+
};
|
|
36
|
+
pendingPaymentAgencyTransaction?: IPaymentAgencyTransaction;
|
|
37
|
+
}): {
|
|
38
|
+
pendingPaymentAgencyTransaction?: IPaymentAgencyTransaction | undefined;
|
|
39
|
+
executor: {
|
|
40
|
+
id: string;
|
|
41
|
+
} | {
|
|
42
|
+
id?: undefined;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* ムビチケ決済用の追加オプションを生成する
|
|
47
|
+
*/
|
|
48
|
+
export declare function createAuthorizeMovieTicketOptions(options: {
|
|
49
|
+
executor?: {
|
|
50
|
+
id?: string;
|
|
51
|
+
};
|
|
52
|
+
purpose: {
|
|
53
|
+
id?: string;
|
|
54
|
+
};
|
|
55
|
+
checkedAction: {
|
|
56
|
+
id: string;
|
|
57
|
+
};
|
|
58
|
+
}): {
|
|
59
|
+
executor: {
|
|
60
|
+
id: string;
|
|
61
|
+
} | {
|
|
62
|
+
id?: undefined;
|
|
63
|
+
};
|
|
64
|
+
purpose: {
|
|
65
|
+
id?: string;
|
|
66
|
+
};
|
|
67
|
+
checkedAction: {
|
|
68
|
+
id: string;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
@@ -24,11 +24,35 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.createStartParams = createStartParams;
|
|
27
|
+
exports.createAuthorizeCreditCardOptions = createAuthorizeCreditCardOptions;
|
|
28
|
+
exports.createAuthorizeMovieTicketOptions = createAuthorizeMovieTicketOptions;
|
|
27
29
|
/**
|
|
28
30
|
* 決済取引ファクトリー
|
|
29
31
|
*/
|
|
30
32
|
const factory = __importStar(require("../../../../factory"));
|
|
33
|
+
function createServiceOutputAsPayTransactionObject(params) {
|
|
34
|
+
return {
|
|
35
|
+
serviceOutput: (params.object.serviceOutput?.typeOf === 'Invoice')
|
|
36
|
+
? params.object.serviceOutput
|
|
37
|
+
: {
|
|
38
|
+
typeOf: 'Invoice',
|
|
39
|
+
referencesOrder: { typeOf: factory.order.OrderType.Order }
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 決済取引開始パラメータ生成
|
|
45
|
+
*/
|
|
31
46
|
function createStartParams(params, options) {
|
|
47
|
+
// 金額をfix
|
|
48
|
+
const amount = params.object.paymentMethod?.amount;
|
|
49
|
+
if (typeof amount !== 'number') {
|
|
50
|
+
throw new factory.errors.ArgumentNull('object.paymentMethod.amount');
|
|
51
|
+
}
|
|
52
|
+
const transactionNumber = params.transactionNumber;
|
|
53
|
+
if (typeof transactionNumber !== 'string' || transactionNumber.length === 0) {
|
|
54
|
+
throw new factory.errors.ArgumentNull('transactionNumber');
|
|
55
|
+
}
|
|
32
56
|
const { instrument } = params;
|
|
33
57
|
const paymentServiceId = (params.paymentService !== undefined)
|
|
34
58
|
? String(params.paymentService.id)
|
|
@@ -48,14 +72,14 @@ function createStartParams(params, options) {
|
|
|
48
72
|
totalPaymentDue = {
|
|
49
73
|
typeOf: 'MonetaryAmount',
|
|
50
74
|
currency: factory.priceCurrency.JPY,
|
|
51
|
-
value:
|
|
75
|
+
value: amount
|
|
52
76
|
};
|
|
53
77
|
break;
|
|
54
78
|
case factory.service.paymentService.PaymentServiceType.CreditCard:
|
|
55
79
|
totalPaymentDue = {
|
|
56
80
|
typeOf: 'MonetaryAmount',
|
|
57
81
|
currency: factory.priceCurrency.JPY,
|
|
58
|
-
value:
|
|
82
|
+
value: amount
|
|
59
83
|
};
|
|
60
84
|
accountId = ''; // 強制的に空文字化(2024-06-14~)
|
|
61
85
|
break;
|
|
@@ -109,7 +133,7 @@ function createStartParams(params, options) {
|
|
|
109
133
|
const paymentMethodAmount = {
|
|
110
134
|
typeOf: 'MonetaryAmount',
|
|
111
135
|
currency: paymentMethodCurrency,
|
|
112
|
-
value:
|
|
136
|
+
value: amount
|
|
113
137
|
};
|
|
114
138
|
const paymentMethod = {
|
|
115
139
|
additionalProperty: (Array.isArray(params.object.paymentMethod?.additionalProperty))
|
|
@@ -140,19 +164,14 @@ function createStartParams(params, options) {
|
|
|
140
164
|
? { paymentMethodId: params.transactionNumber } // 必要ないはずだが互換性維持対応(2024-06-14~)
|
|
141
165
|
: undefined
|
|
142
166
|
};
|
|
167
|
+
const { serviceOutput } = createServiceOutputAsPayTransactionObject(params);
|
|
143
168
|
const object = {
|
|
144
169
|
accountId: (typeof accountId === 'string') ? accountId : '',
|
|
145
170
|
paymentMethodId: params.transactionNumber,
|
|
146
171
|
typeOf: params.paymentServiceType,
|
|
147
172
|
id: paymentServiceId,
|
|
148
|
-
// onPaymentStatusChanged: { informPayment: params.informActions }, // discontinue(2025-02-09~)
|
|
149
173
|
paymentMethod,
|
|
150
|
-
serviceOutput
|
|
151
|
-
? params.object.serviceOutput
|
|
152
|
-
: {
|
|
153
|
-
typeOf: 'Invoice',
|
|
154
|
-
referencesOrder: { typeOf: factory.order.OrderType.Order }
|
|
155
|
-
},
|
|
174
|
+
serviceOutput, // support serviceOutput(2025-11-24~)
|
|
156
175
|
...(params.paymentServiceType === factory.service.paymentService.PaymentServiceType.MovieTicket)
|
|
157
176
|
? { checkedAction: { id: options.checkedAction.id } } // add checkedAction(2024-12-13~)
|
|
158
177
|
: undefined
|
|
@@ -178,14 +197,32 @@ function createStartParams(params, options) {
|
|
|
178
197
|
...(potentialAction.length > 0) ? { potentialAction } : undefined // add potentialAction(2025-02-05~)
|
|
179
198
|
};
|
|
180
199
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
200
|
+
/**
|
|
201
|
+
* 決済プロセッサに渡す実行者情報を生成する
|
|
202
|
+
*/
|
|
203
|
+
function createExecutor(options) {
|
|
204
|
+
return (typeof options.executor?.id === 'string')
|
|
205
|
+
? { id: options.executor.id }
|
|
206
|
+
: {}; // タスク関連付け(2024-05-18~)
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* クレジットカード決済用の追加オプションを生成する
|
|
210
|
+
*/
|
|
211
|
+
function createAuthorizeCreditCardOptions(options) {
|
|
212
|
+
return {
|
|
213
|
+
executor: createExecutor(options),
|
|
214
|
+
...(options.pendingPaymentAgencyTransaction !== undefined
|
|
215
|
+
? { pendingPaymentAgencyTransaction: options.pendingPaymentAgencyTransaction }
|
|
216
|
+
: {})
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* ムビチケ決済用の追加オプションを生成する
|
|
221
|
+
*/
|
|
222
|
+
function createAuthorizeMovieTicketOptions(options) {
|
|
223
|
+
return {
|
|
224
|
+
executor: createExecutor(options),
|
|
225
|
+
purpose: options.purpose,
|
|
226
|
+
checkedAction: options.checkedAction
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as factory from '../../../../../factory';
|
|
2
|
+
import type { PaymentServiceRepo } from '../../../../../repo/paymentService';
|
|
3
|
+
import type { ProductRepo } from '../../../../../repo/product';
|
|
4
|
+
export declare function fixPaymentService(params: factory.assetTransaction.pay.IStartParamsWithoutDetail): (repos: {
|
|
5
|
+
paymentService: PaymentServiceRepo;
|
|
6
|
+
product: ProductRepo;
|
|
7
|
+
}) => Promise<{
|
|
8
|
+
paymentServiceType: factory.service.paymentService.PaymentServiceType;
|
|
9
|
+
paymentService?: Pick<factory.product.IProduct, "availableChannel" | "id" | "serviceOutput" | "serviceType" | "potentialAction"> | Pick<factory.service.paymentService.IService, "availableChannel" | "id" | "serviceOutput" | "serviceType" | "potentialAction"> | undefined;
|
|
10
|
+
}>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.fixPaymentService = fixPaymentService;
|
|
27
|
+
const factory = __importStar(require("../../../../../factory"));
|
|
28
|
+
function getPaymentServiceId(params) {
|
|
29
|
+
let paymentServiceId = '';
|
|
30
|
+
const paymentServiceType = params.object?.typeOf;
|
|
31
|
+
if (typeof params.object.id === 'string' && params.object.id.length > 0) {
|
|
32
|
+
paymentServiceId = params.object.id;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
switch (paymentServiceType) {
|
|
36
|
+
case factory.service.paymentService.PaymentServiceType.FaceToFace:
|
|
37
|
+
// 対面決済は特に何もしない
|
|
38
|
+
break;
|
|
39
|
+
case factory.service.paymentService.PaymentServiceType.PaymentCard:
|
|
40
|
+
case factory.service.paymentService.PaymentServiceType.CreditCard:
|
|
41
|
+
case factory.service.paymentService.PaymentServiceType.MovieTicket:
|
|
42
|
+
// リクエストでの指定を必須化(2022-04-12~)
|
|
43
|
+
throw new factory.errors.ArgumentNull('object.id');
|
|
44
|
+
default:
|
|
45
|
+
throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return paymentServiceId;
|
|
49
|
+
}
|
|
50
|
+
function fixPaymentService(params) {
|
|
51
|
+
return async (repos) => {
|
|
52
|
+
const paymentServiceType = params.object?.typeOf;
|
|
53
|
+
let paymentService;
|
|
54
|
+
switch (paymentServiceType) {
|
|
55
|
+
case factory.service.paymentService.PaymentServiceType.FaceToFace:
|
|
56
|
+
// no op
|
|
57
|
+
// FaceToFaceの場合プロダクトは存在しない
|
|
58
|
+
break;
|
|
59
|
+
// PaymentCardの場合、プロダクト検索
|
|
60
|
+
case factory.service.paymentService.PaymentServiceType.PaymentCard:
|
|
61
|
+
paymentService = (await repos.product.projectFields({
|
|
62
|
+
limit: 1,
|
|
63
|
+
page: 1,
|
|
64
|
+
project: { id: { $eq: params.project.id } },
|
|
65
|
+
typeOf: { $eq: factory.product.ProductType.PaymentCard },
|
|
66
|
+
id: { $eq: getPaymentServiceId(params) }
|
|
67
|
+
}, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction']
|
|
68
|
+
// []
|
|
69
|
+
)).shift();
|
|
70
|
+
if (paymentService === undefined) {
|
|
71
|
+
throw new factory.errors.NotFound('PaymentService');
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
paymentService = (await repos.paymentService.projectFields({
|
|
76
|
+
limit: 1,
|
|
77
|
+
page: 1,
|
|
78
|
+
project: { id: { $eq: params.project.id } },
|
|
79
|
+
typeOf: { $eq: paymentServiceType },
|
|
80
|
+
id: { $eq: getPaymentServiceId(params) }
|
|
81
|
+
}, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction'])).shift();
|
|
82
|
+
if (paymentService === undefined) {
|
|
83
|
+
throw new factory.errors.NotFound('PaymentService');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { paymentServiceType, paymentService };
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as factory from '../../../../factory';
|
|
2
|
+
import { Settings } from '../../../../settings';
|
|
3
|
+
import type { AccountingReportRepo } from '../../../../repo/accountingReport';
|
|
4
|
+
import type { ActionRepo } from '../../../../repo/action';
|
|
5
|
+
import type { AssetTransactionRepo } from '../../../../repo/assetTransaction';
|
|
6
|
+
import type { CredentialsRepo } from '../../../../repo/credentials';
|
|
7
|
+
import type { EventRepo } from '../../../../repo/event';
|
|
8
|
+
import type { PaymentServiceRepo } from '../../../../repo/paymentService';
|
|
9
|
+
import type { PaymentServiceProviderRepo } from '../../../../repo/paymentServiceProvider';
|
|
10
|
+
import type { ProductRepo } from '../../../../repo/product';
|
|
11
|
+
import type { SellerPaymentAcceptedRepo } from '../../../../repo/sellerPaymentAccepted';
|
|
12
|
+
import type { TaskRepo } from '../../../../repo/task';
|
|
13
|
+
import { IPaymentAgencyTransaction } from '../../../payment/creditCard';
|
|
14
|
+
export interface IProcessAuthorizeOperationRepos {
|
|
15
|
+
accountingReport: AccountingReportRepo;
|
|
16
|
+
action: ActionRepo;
|
|
17
|
+
credentials: CredentialsRepo;
|
|
18
|
+
event: EventRepo;
|
|
19
|
+
paymentAccepted: SellerPaymentAcceptedRepo;
|
|
20
|
+
paymentService: PaymentServiceRepo;
|
|
21
|
+
paymentServiceProvider: PaymentServiceProviderRepo;
|
|
22
|
+
product: ProductRepo;
|
|
23
|
+
assetTransaction: AssetTransactionRepo;
|
|
24
|
+
task: TaskRepo;
|
|
25
|
+
}
|
|
26
|
+
export type IProcessAuthorizeOperation<T> = (repos: IProcessAuthorizeOperationRepos, settings: Settings) => Promise<T>;
|
|
27
|
+
/**
|
|
28
|
+
* 開始した決済取引について、決済承認を実行する
|
|
29
|
+
*/
|
|
30
|
+
export declare function processAuthorize(params: factory.assetTransaction.pay.IStartParamsWithoutDetail & {
|
|
31
|
+
instrument: factory.action.trade.pay.IPlaceOrderRelatedInstrument[];
|
|
32
|
+
}, options: {
|
|
33
|
+
pendingPaymentAgencyTransaction?: IPaymentAgencyTransaction;
|
|
34
|
+
/**
|
|
35
|
+
* 実行者
|
|
36
|
+
*/
|
|
37
|
+
executor?: {
|
|
38
|
+
/**
|
|
39
|
+
* task ID
|
|
40
|
+
* taskによって実行されている場合値が存在する
|
|
41
|
+
*/
|
|
42
|
+
id?: string;
|
|
43
|
+
};
|
|
44
|
+
purpose: {
|
|
45
|
+
/**
|
|
46
|
+
* placeOrder ID
|
|
47
|
+
*/
|
|
48
|
+
id?: string;
|
|
49
|
+
};
|
|
50
|
+
checkedAction: {
|
|
51
|
+
id: string;
|
|
52
|
+
};
|
|
53
|
+
}, transactionBeforeAuthorize: factory.assetTransaction.pay.ITransaction, paymentServiceType: factory.service.paymentService.PaymentServiceType, paymentService: Pick<factory.product.IProduct, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType' | 'potentialAction'> | Pick<factory.service.paymentService.IService, 'availableChannel' | 'id' | 'serviceOutput' | 'serviceType' | 'potentialAction'> | undefined): IProcessAuthorizeOperation<Pick<factory.assetTransaction.pay.ITransaction, 'id' | 'object'>>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.processAuthorize = processAuthorize;
|
|
27
|
+
const factory = __importStar(require("../../../../factory"));
|
|
28
|
+
const factory_1 = require("./factory");
|
|
29
|
+
const processAuthorizeAccount_1 = require("./processAuthorizeAccount");
|
|
30
|
+
const processAuthorizeCreditCard_1 = require("./processAuthorizeCreditCard");
|
|
31
|
+
const processAuthorizeMovieTicket_1 = require("./processAuthorizeMovieTicket");
|
|
32
|
+
/**
|
|
33
|
+
* 開始した決済取引について、決済承認を実行する
|
|
34
|
+
*/
|
|
35
|
+
function processAuthorize(params, options, transactionBeforeAuthorize, paymentServiceType, paymentService) {
|
|
36
|
+
return async (repos, settings) => {
|
|
37
|
+
let transaction = transactionBeforeAuthorize;
|
|
38
|
+
switch (paymentServiceType) {
|
|
39
|
+
case factory.service.paymentService.PaymentServiceType.FaceToFace:
|
|
40
|
+
// 対面決済は特に何もしない
|
|
41
|
+
break;
|
|
42
|
+
case factory.service.paymentService.PaymentServiceType.PaymentCard:
|
|
43
|
+
transaction = await (0, processAuthorizeAccount_1.processAuthorizeAccount)(params, transactionBeforeAuthorize, String(paymentService?.id))(repos);
|
|
44
|
+
break;
|
|
45
|
+
case factory.service.paymentService.PaymentServiceType.CreditCard:
|
|
46
|
+
await (0, processAuthorizeCreditCard_1.processAuthorizeCreditCard)(params, transactionBeforeAuthorize, String(paymentService?.id), (0, factory_1.createAuthorizeCreditCardOptions)(options))(repos, settings);
|
|
47
|
+
break;
|
|
48
|
+
case factory.service.paymentService.PaymentServiceType.MovieTicket:
|
|
49
|
+
await (0, processAuthorizeMovieTicket_1.processAuthorizeMovieTicket)(params, transactionBeforeAuthorize, String(paymentService?.id), (0, factory_1.createAuthorizeMovieTicketOptions)(options))(repos, settings);
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
|
|
53
|
+
}
|
|
54
|
+
return transaction;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -39,4 +39,4 @@ export declare function processAuthorizeMovieTicket(params: factory.assetTransac
|
|
|
39
39
|
paymentServiceProvider: PaymentServiceProviderRepo;
|
|
40
40
|
assetTransaction: AssetTransactionRepo;
|
|
41
41
|
task: TaskRepo;
|
|
42
|
-
}, settings: Settings) => Promise<
|
|
42
|
+
}, settings: Settings) => Promise<void>;
|
|
@@ -29,17 +29,7 @@ function processAuthorizeMovieTicket(params, transaction, paymentServiceId,
|
|
|
29
29
|
// useCheckByIdentifierIfNotYet: boolean,
|
|
30
30
|
options) {
|
|
31
31
|
return async (repos, settings) => {
|
|
32
|
-
// const { accountsReceivablesByServiceType } = await MovieTicketPayment.authorize(
|
|
33
|
-
// params, transaction, paymentServiceId, options
|
|
34
|
-
// )(repos, settings);
|
|
35
32
|
await MovieTicketPayment.authorize(params, transaction, paymentServiceId, options)(repos, settings);
|
|
36
|
-
return transaction;
|
|
37
|
-
// discontinue(2024-12-17~)
|
|
38
|
-
// return saveAuthorizeResult({
|
|
39
|
-
// id: transaction.id,
|
|
40
|
-
// update: {
|
|
41
|
-
// 'object.accountsReceivablesByServiceType': accountsReceivablesByServiceType // 認証レスポンスより計上金額を保管(2023-05-15~)
|
|
42
|
-
// }
|
|
43
|
-
// })(repos);
|
|
33
|
+
// return transaction;
|
|
44
34
|
};
|
|
45
35
|
}
|
|
@@ -1,162 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.start = start;
|
|
27
|
-
const factory = __importStar(require("../../../factory"));
|
|
28
4
|
const fixInformAction_1 = require("../fixInformAction");
|
|
5
|
+
const fixPaymentService_1 = require("./start/preStart/fixPaymentService");
|
|
29
6
|
const validateAcceptedPaymentMethodIfNeeded_1 = require("./start/preStart/validateAcceptedPaymentMethodIfNeeded");
|
|
30
7
|
const validateSeller_1 = require("./start/preStart/validateSeller");
|
|
31
8
|
const factory_1 = require("./start/factory");
|
|
32
|
-
const
|
|
33
|
-
const processAuthorizeCreditCard_1 = require("./start/processAuthorizeCreditCard");
|
|
34
|
-
const processAuthorizeMovieTicket_1 = require("./start/processAuthorizeMovieTicket");
|
|
9
|
+
const processAuthorize_1 = require("./start/processAuthorize");
|
|
35
10
|
/**
|
|
36
11
|
* 取引開始
|
|
37
12
|
*/
|
|
38
13
|
function start(params, options) {
|
|
39
14
|
return async (repos, settings) => {
|
|
40
|
-
// 金額をfix
|
|
41
|
-
const amount = params.object.paymentMethod?.amount;
|
|
42
|
-
if (typeof amount !== 'number') {
|
|
43
|
-
throw new factory.errors.ArgumentNull('object.paymentMethod.amount');
|
|
44
|
-
}
|
|
45
|
-
const transactionNumber = params.transactionNumber;
|
|
46
|
-
if (typeof transactionNumber !== 'string' || transactionNumber.length === 0) {
|
|
47
|
-
throw new factory.errors.ArgumentNull('transactionNumber');
|
|
48
|
-
}
|
|
49
15
|
await (0, validateSeller_1.validateSeller)(params)(repos);
|
|
50
16
|
// リソースの対応決済方法検証(2025-12-02~)
|
|
51
17
|
await (0, validateAcceptedPaymentMethodIfNeeded_1.validateAcceptedPaymentMethodIfNeeded)(params)(repos);
|
|
52
18
|
// 決済サービス確認
|
|
53
|
-
const paymentServiceType = params
|
|
54
|
-
const paymentService = await fixPaymentService(params)(repos);
|
|
19
|
+
const { paymentServiceType, paymentService } = await (0, fixPaymentService_1.fixPaymentService)(params)(repos);
|
|
55
20
|
const informActions = await (0, fixInformAction_1.fixInformAction)({
|
|
56
21
|
paymentService,
|
|
57
22
|
project: { id: params.project.id }
|
|
58
23
|
})(repos);
|
|
59
24
|
// 取引開始
|
|
60
|
-
let transaction;
|
|
61
25
|
const startParams = (0, factory_1.createStartParams)({
|
|
62
26
|
...params,
|
|
63
|
-
transactionNumber,
|
|
27
|
+
// transactionNumber,
|
|
64
28
|
paymentServiceType,
|
|
65
|
-
amount,
|
|
29
|
+
// amount,
|
|
66
30
|
paymentService,
|
|
67
31
|
informActions
|
|
68
32
|
}, { checkedAction: options.checkedAction } // 連携(2024-12-13~)
|
|
69
33
|
);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// 対面決済は特に何もしない
|
|
74
|
-
break;
|
|
75
|
-
case factory.service.paymentService.PaymentServiceType.PaymentCard:
|
|
76
|
-
transaction = await (0, processAuthorizeAccount_1.processAuthorizeAccount)(params, transaction, String(paymentService?.id))(repos);
|
|
77
|
-
break;
|
|
78
|
-
case factory.service.paymentService.PaymentServiceType.CreditCard:
|
|
79
|
-
// transaction =
|
|
80
|
-
await (0, processAuthorizeCreditCard_1.processAuthorizeCreditCard)(params, transaction, String(paymentService?.id), {
|
|
81
|
-
executor: (typeof options.executor?.id === 'string') ? { id: options.executor.id } : {}, // タスク関連付け(2024-05-18~)
|
|
82
|
-
...(options.pendingPaymentAgencyTransaction !== undefined)
|
|
83
|
-
? { pendingPaymentAgencyTransaction: options.pendingPaymentAgencyTransaction }
|
|
84
|
-
: undefined
|
|
85
|
-
})(repos, settings);
|
|
86
|
-
break;
|
|
87
|
-
case factory.service.paymentService.PaymentServiceType.MovieTicket:
|
|
88
|
-
transaction = await (0, processAuthorizeMovieTicket_1.processAuthorizeMovieTicket)(params, transaction, String(paymentService?.id),
|
|
89
|
-
// options.useCheckByIdentifierIfNotYet,
|
|
90
|
-
{
|
|
91
|
-
executor: (typeof options.executor?.id === 'string') ? { id: options.executor.id } : {},
|
|
92
|
-
purpose: options.purpose,
|
|
93
|
-
checkedAction: options.checkedAction
|
|
94
|
-
})(repos, settings);
|
|
95
|
-
break;
|
|
96
|
-
default:
|
|
97
|
-
throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
|
|
98
|
-
}
|
|
99
|
-
return transaction;
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function getPaymentServiceId(params) {
|
|
103
|
-
let paymentServiceId = '';
|
|
104
|
-
const paymentServiceType = params.object?.typeOf;
|
|
105
|
-
if (typeof params.object.id === 'string' && params.object.id.length > 0) {
|
|
106
|
-
paymentServiceId = params.object.id;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
switch (paymentServiceType) {
|
|
110
|
-
case factory.service.paymentService.PaymentServiceType.FaceToFace:
|
|
111
|
-
// 対面決済は特に何もしない
|
|
112
|
-
break;
|
|
113
|
-
case factory.service.paymentService.PaymentServiceType.PaymentCard:
|
|
114
|
-
case factory.service.paymentService.PaymentServiceType.CreditCard:
|
|
115
|
-
case factory.service.paymentService.PaymentServiceType.MovieTicket:
|
|
116
|
-
// リクエストでの指定を必須化(2022-04-12~)
|
|
117
|
-
throw new factory.errors.ArgumentNull('object.id');
|
|
118
|
-
default:
|
|
119
|
-
throw new factory.errors.NotImplemented(`Payment service '${paymentServiceType}' not implemented`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return paymentServiceId;
|
|
123
|
-
}
|
|
124
|
-
function fixPaymentService(params) {
|
|
125
|
-
return async (repos) => {
|
|
126
|
-
const paymentServiceType = params.object?.typeOf;
|
|
127
|
-
let paymentService;
|
|
128
|
-
switch (paymentServiceType) {
|
|
129
|
-
case factory.service.paymentService.PaymentServiceType.FaceToFace:
|
|
130
|
-
// no op
|
|
131
|
-
// FaceToFaceの場合プロダクトは存在しない
|
|
132
|
-
break;
|
|
133
|
-
// PaymentCardの場合、プロダクト検索
|
|
134
|
-
case factory.service.paymentService.PaymentServiceType.PaymentCard:
|
|
135
|
-
paymentService = (await repos.product.projectFields({
|
|
136
|
-
limit: 1,
|
|
137
|
-
page: 1,
|
|
138
|
-
project: { id: { $eq: params.project.id } },
|
|
139
|
-
typeOf: { $eq: factory.product.ProductType.PaymentCard },
|
|
140
|
-
id: { $eq: getPaymentServiceId(params) }
|
|
141
|
-
}, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction']
|
|
142
|
-
// []
|
|
143
|
-
)).shift();
|
|
144
|
-
if (paymentService === undefined) {
|
|
145
|
-
throw new factory.errors.NotFound('PaymentService');
|
|
146
|
-
}
|
|
147
|
-
break;
|
|
148
|
-
default:
|
|
149
|
-
paymentService = (await repos.paymentService.projectFields({
|
|
150
|
-
limit: 1,
|
|
151
|
-
page: 1,
|
|
152
|
-
project: { id: { $eq: params.project.id } },
|
|
153
|
-
typeOf: { $eq: paymentServiceType },
|
|
154
|
-
id: { $eq: getPaymentServiceId(params) }
|
|
155
|
-
}, ['availableChannel', 'serviceOutput', 'serviceType', 'potentialAction'])).shift();
|
|
156
|
-
if (paymentService === undefined) {
|
|
157
|
-
throw new factory.errors.NotFound('PaymentService');
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return paymentService;
|
|
34
|
+
const transactionBeforeAuthorize = await repos.assetTransaction.start(startParams);
|
|
35
|
+
// 決済代行等を利用して決済承認
|
|
36
|
+
return (0, processAuthorize_1.processAuthorize)(params, options, transactionBeforeAuthorize, paymentServiceType, paymentService)(repos, settings);
|
|
161
37
|
};
|
|
162
38
|
}
|
package/package.json
CHANGED
|
@@ -41,12 +41,9 @@
|
|
|
41
41
|
"@types/json2csv": "^4.5.1",
|
|
42
42
|
"@types/jsonwebtoken": "9.0.1",
|
|
43
43
|
"@types/lodash.difference": "^4.5.6",
|
|
44
|
-
"@types/mocha": "10.0.7",
|
|
45
44
|
"@types/moment-timezone": "^0.5.30",
|
|
46
45
|
"@types/node": "22.19.7",
|
|
47
46
|
"@types/pug": "2.0.10",
|
|
48
|
-
"@types/sinon": "^4.3.3",
|
|
49
|
-
"@types/sinon-mongoose": "^1.3.11",
|
|
50
47
|
"@types/uniqid": "^4.1.3",
|
|
51
48
|
"@types/uuid": "^3.4.10",
|
|
52
49
|
"@vitest/coverage-v8": "4.0.18",
|
|
@@ -60,8 +57,6 @@
|
|
|
60
57
|
"mongoose": "8.0.4",
|
|
61
58
|
"redis": "4.6.5",
|
|
62
59
|
"rimraf": "^2.7.1",
|
|
63
|
-
"sinon": "4.5.0",
|
|
64
|
-
"sinon-mongoose": "^2.3.0",
|
|
65
60
|
"size-limit": "12.0.0",
|
|
66
61
|
"typescript": "5.6.3",
|
|
67
62
|
"typescript-eslint": "8.55.0",
|
|
@@ -104,5 +99,5 @@
|
|
|
104
99
|
"postversion": "git push origin --tags",
|
|
105
100
|
"prepublishOnly": "npm run clean && npm run build"
|
|
106
101
|
},
|
|
107
|
-
"version": "24.0.0-alpha.
|
|
102
|
+
"version": "24.0.0-alpha.5"
|
|
108
103
|
}
|