@webbers/pay-payments-medusa 2.2.43 → 2.2.46
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/.medusa/server/package.json +6 -2
- package/.medusa/server/src/admin/index.js +1 -1
- package/.medusa/server/src/admin/index.mjs +1 -1
- package/.medusa/server/src/api/hooks/pay/[provider]/route.d.ts.map +1 -1
- package/.medusa/server/src/api/hooks/pay/[provider]/route.js +29 -9
- package/.medusa/server/src/providers/pay/core/constants.d.ts +10 -1
- package/.medusa/server/src/providers/pay/core/constants.d.ts.map +1 -1
- package/.medusa/server/src/providers/pay/core/constants.js +16 -5
- package/.medusa/server/src/providers/pay/core/http-client.d.ts +0 -6
- package/.medusa/server/src/providers/pay/core/http-client.d.ts.map +1 -1
- package/.medusa/server/src/providers/pay/core/http-client.js +1 -19
- package/.medusa/server/src/providers/pay/core/pay-base.d.ts +9 -2
- package/.medusa/server/src/providers/pay/core/pay-base.d.ts.map +1 -1
- package/.medusa/server/src/providers/pay/core/pay-base.js +48 -11
- package/.medusa/server/src/providers/pay/core/pay-client.d.ts +18 -5
- package/.medusa/server/src/providers/pay/core/pay-client.d.ts.map +1 -1
- package/.medusa/server/src/providers/pay/core/pay-client.js +40 -12
- package/.medusa/server/src/providers/pay/services/pay-direct-debit.d.ts +47 -1
- package/.medusa/server/src/providers/pay/services/pay-direct-debit.d.ts.map +1 -1
- package/.medusa/server/src/providers/pay/services/pay-direct-debit.js +196 -1
- package/.medusa/server/src/providers/pay/types/order.d.ts +141 -72
- package/.medusa/server/src/providers/pay/types/order.d.ts.map +1 -1
- package/.medusa/server/src/subscribers/direct-debit-exchange.d.ts +12 -0
- package/.medusa/server/src/subscribers/direct-debit-exchange.d.ts.map +1 -0
- package/.medusa/server/src/subscribers/direct-debit-exchange.js +184 -0
- package/.medusa/server/src/subscribers/payment-canceled.d.ts.map +1 -1
- package/.medusa/server/src/subscribers/payment-canceled.js +17 -4
- package/.medusa/server/src/subscribers/payment-failed.d.ts +1 -0
- package/.medusa/server/src/subscribers/payment-failed.d.ts.map +1 -1
- package/.medusa/server/src/subscribers/payment-failed.js +13 -3
- package/.medusa/server/src/utils/directDebitExchange.d.ts +28 -0
- package/.medusa/server/src/utils/directDebitExchange.d.ts.map +1 -0
- package/.medusa/server/src/utils/directDebitExchange.js +108 -0
- package/package.json +6 -2
|
@@ -8,6 +8,7 @@ class PayClient {
|
|
|
8
8
|
constructor(options, logger) {
|
|
9
9
|
this.httpClient_ = new http_client_1.HttpClient({ options, logger });
|
|
10
10
|
this.serviceId_ = options.slCode;
|
|
11
|
+
this.logger_ = logger;
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
14
|
* Create a new order.
|
|
@@ -84,35 +85,62 @@ class PayClient {
|
|
|
84
85
|
});
|
|
85
86
|
}
|
|
86
87
|
/**
|
|
87
|
-
* Create
|
|
88
|
+
* Create a one-off direct debit mandate
|
|
88
89
|
* @param data
|
|
89
90
|
*/
|
|
90
91
|
async createDirectDebit(data) {
|
|
91
92
|
if (this.httpClient_.testMode) {
|
|
92
|
-
|
|
93
|
+
this.logger_.info(`createDirectDebit skipped ${JSON.stringify(data)}`);
|
|
93
94
|
}
|
|
94
95
|
else {
|
|
95
|
-
return await this.httpClient_.
|
|
96
|
+
return await this.httpClient_.apiRequest({
|
|
96
97
|
endpoint: constants_1.PayApiPath.DIRECT_DEBIT,
|
|
97
98
|
data: {
|
|
98
99
|
...data,
|
|
99
100
|
serviceId: this.serviceId_,
|
|
101
|
+
stats: {
|
|
102
|
+
object: `${package_json_1.displayName}|version ${package_json_1.version}`,
|
|
103
|
+
},
|
|
100
104
|
},
|
|
101
105
|
});
|
|
102
106
|
}
|
|
103
107
|
}
|
|
104
108
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
109
|
+
* Retrieve a direct debit by its reference id. Unlike the mandate query this
|
|
110
|
+
* endpoint returns the direct debit object itself, not a paginated envelope.
|
|
111
|
+
* @param directDebitId
|
|
107
112
|
*/
|
|
108
|
-
async getDirectDebitInfo(
|
|
109
|
-
return await this.httpClient_.
|
|
110
|
-
endpoint: constants_1.PayApiPath.DIRECT_DEBIT_INFO,
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
async getDirectDebitInfo(directDebitId) {
|
|
114
|
+
return await this.httpClient_.apiRequest({
|
|
115
|
+
endpoint: constants_1.PayApiPath.DIRECT_DEBIT_INFO.replace("{id}", directDebitId),
|
|
116
|
+
method: "GET",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Retrieve direct debit info by the mandate code
|
|
121
|
+
* @param mandateId
|
|
122
|
+
*/
|
|
123
|
+
async getDirectDebitInfoByMandate(mandateId) {
|
|
124
|
+
return await this.httpClient_.apiRequest({
|
|
125
|
+
endpoint: constants_1.PayApiPath.DIRECT_DEBIT_INFO_BY_MANDATE.replace("{id}", mandateId),
|
|
126
|
+
method: "GET",
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Delete a mandate so no further direct debits can be executed on it. Test
|
|
131
|
+
* mode never creates a mandate, so there is nothing to delete there.
|
|
132
|
+
* @param mandateId
|
|
133
|
+
*/
|
|
134
|
+
async deleteDirectDebitMandate(mandateId) {
|
|
135
|
+
if (this.httpClient_.testMode) {
|
|
136
|
+
this.logger_.info(`deleteDirectDebitMandate skipped for mandate ${mandateId}`);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
await this.httpClient_.apiRequest({
|
|
140
|
+
endpoint: constants_1.PayApiPath.DIRECT_DEBIT_MANDATE.replace("{id}", mandateId),
|
|
141
|
+
method: "DELETE",
|
|
114
142
|
});
|
|
115
143
|
}
|
|
116
144
|
}
|
|
117
145
|
exports.PayClient = PayClient;
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5L2NvcmUvcGF5LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBd0M7QUFleEMsaURBQTRDO0FBQzVDLDJEQUE2RDtBQUc3RCxNQUFhLFNBQVM7SUFLcEIsWUFBWSxPQUF3QixFQUFFLE1BQWM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHdCQUFVLENBQUMsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtRQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsV0FBVyxDQUNmLElBQW9DO1FBRXBDLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsc0JBQVUsQ0FBQyxZQUFZO1lBQ2pDLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUk7Z0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMxQixLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLEdBQUcsMEJBQVcsWUFBWSxzQkFBTyxFQUFFO2lCQUM1QzthQUNGO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQ2YsT0FBZSxFQUNmLElBQWlCO1FBRWpCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxRQUFRLEVBQUUsc0JBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDMUQsSUFBSTtTQUNMLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQWU7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
|
|
@@ -1,8 +1,54 @@
|
|
|
1
|
+
import { CustomerDTO, OrderDTO, SalesChannelDTO } from "@medusajs/framework/types";
|
|
2
|
+
import { CancelPaymentInput, CancelPaymentOutput, CapturePaymentInput, CapturePaymentOutput, PaymentSessionDTO, RefundPaymentInput, RefundPaymentOutput, RetrievePaymentInput, RetrievePaymentOutput, UpdatePaymentInput, UpdatePaymentOutput } from "@medusajs/types";
|
|
1
3
|
import PayBase from "../core/pay-base";
|
|
2
|
-
import { PaymentOptions } from "../types";
|
|
4
|
+
import { CreateDirectDebitRequest, PaymentOptions } from "../types";
|
|
5
|
+
/**
|
|
6
|
+
* Direct debits are not created through the Pay. order API but through the
|
|
7
|
+
* mandate API (POST /directdebits/mandates). The mandate response is stored on
|
|
8
|
+
* the payment session data, its `code` is used to retrieve the authoritative
|
|
9
|
+
* direct debit state later. Collection status changes arrive through incasso
|
|
10
|
+
* exchanges handled by the direct-debit-exchange subscriber.
|
|
11
|
+
*/
|
|
3
12
|
declare class PayDirectDebitService extends PayBase {
|
|
4
13
|
static identifier: string;
|
|
5
14
|
get paymentCreateOptions(): PaymentOptions;
|
|
15
|
+
createPayOrderPayload(order: OrderDTO & {
|
|
16
|
+
customer: CustomerDTO;
|
|
17
|
+
sales_channel: SalesChannelDTO;
|
|
18
|
+
}, paymentSession: PaymentSessionDTO): Omit<CreateDirectDebitRequest, "serviceId">;
|
|
19
|
+
/**
|
|
20
|
+
* Creates the direct debit mandate when the payload is passed from the order
|
|
21
|
+
* created hook. The returned data replaces the session data wholesale, so the
|
|
22
|
+
* payload key is always stripped, persisting it back would create a second
|
|
23
|
+
* mandate on a later update.
|
|
24
|
+
*/
|
|
25
|
+
updatePayment(input: UpdatePaymentInput): Promise<UpdatePaymentOutput>;
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves payment details. Payments that hold a Pay. order or transaction
|
|
28
|
+
* id (created through the order API, or refunded) resolve through the base
|
|
29
|
+
* implementation, mandate based payments resolve through the mandate code.
|
|
30
|
+
*/
|
|
31
|
+
retrievePayment(input: RetrievePaymentInput): Promise<RetrievePaymentOutput>;
|
|
32
|
+
/**
|
|
33
|
+
* A mandate based direct debit is revoked by deleting the mandate at Pay.,
|
|
34
|
+
* so a pending collection is never executed for a canceled payment. The
|
|
35
|
+
* order API abort only applies to payments that hold a Pay. order id.
|
|
36
|
+
*/
|
|
37
|
+
cancelPayment(input: CancelPaymentInput): Promise<CancelPaymentOutput>;
|
|
38
|
+
/**
|
|
39
|
+
* A mandate based direct debit only counts as captured when Pay. reports the
|
|
40
|
+
* direct debit as collected. The state is always re-fetched from Pay., so a
|
|
41
|
+
* spoofed exchange cannot capture an uncollected payment.
|
|
42
|
+
*/
|
|
43
|
+
capturePayment(input: CapturePaymentInput): Promise<CapturePaymentOutput>;
|
|
44
|
+
/**
|
|
45
|
+
* Refunds go through the regular transaction refund endpoint, using the Pay.
|
|
46
|
+
* transaction id of the collection. That id lives on the collected direct
|
|
47
|
+
* debit, not necessarily on the stored payment data, so it is resolved from
|
|
48
|
+
* the mandate when missing.
|
|
49
|
+
*/
|
|
50
|
+
refundPayment(input: RefundPaymentInput): Promise<RefundPaymentOutput>;
|
|
51
|
+
protected readMandateId(data: Record<string, any>): string | undefined;
|
|
6
52
|
}
|
|
7
53
|
export default PayDirectDebitService;
|
|
8
54
|
//# sourceMappingURL=pay-direct-debit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pay-direct-debit.d.ts","sourceRoot":"","sources":["../../../../../../src/providers/pay/services/pay-direct-debit.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"pay-direct-debit.d.ts","sourceRoot":"","sources":["../../../../../../src/providers/pay/services/pay-direct-debit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAC,MAAM,2BAA2B,CAAA;AAChF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,OAAO,MAAM,kBAAkB,CAAA;AACtC,OAAO,EACL,wBAAwB,EAGxB,cAAc,EAEf,MAAM,UAAU,CAAA;AAGjB;;;;;;GAMG;AACH,cAAM,qBAAsB,SAAQ,OAAO;IACzC,MAAM,CAAC,UAAU,SAAkC;IAEnD,IAAI,oBAAoB,IAAI,cAAc,CASzC;IAED,qBAAqB,CACnB,KAAK,EAAE,QAAQ,GAAG;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,aAAa,EAAE,eAAe,CAAA;KAAC,EACzE,cAAc,EAAE,iBAAiB,GAChC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC;IAqD9C;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsC5E;;;;OAIG;IACG,eAAe,CACnB,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,qBAAqB,CAAC;IAqBjC;;;;OAIG;IACG,aAAa,CACjB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,mBAAmB,CAAC;IA8B/B;;;;OAIG;IACG,cAAc,CAClB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC;IAqChC;;;;;OAKG;IACG,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyC5E,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS;CAOvE;AAED,eAAe,qBAAqB,CAAA"}
|
|
@@ -3,8 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
7
|
const pay_base_1 = __importDefault(require("../core/pay-base"));
|
|
7
8
|
const types_1 = require("../types");
|
|
9
|
+
const constants_1 = require("../core/constants");
|
|
10
|
+
/**
|
|
11
|
+
* Direct debits are not created through the Pay. order API but through the
|
|
12
|
+
* mandate API (POST /directdebits/mandates). The mandate response is stored on
|
|
13
|
+
* the payment session data, its `code` is used to retrieve the authoritative
|
|
14
|
+
* direct debit state later. Collection status changes arrive through incasso
|
|
15
|
+
* exchanges handled by the direct-debit-exchange subscriber.
|
|
16
|
+
*/
|
|
8
17
|
class PayDirectDebitService extends pay_base_1.default {
|
|
9
18
|
get paymentCreateOptions() {
|
|
10
19
|
return {
|
|
@@ -15,7 +24,193 @@ class PayDirectDebitService extends pay_base_1.default {
|
|
|
15
24
|
"_pay",
|
|
16
25
|
};
|
|
17
26
|
}
|
|
27
|
+
createPayOrderPayload(order, paymentSession) {
|
|
28
|
+
const paymentMethodInput = (paymentSession.data?.paymentMethodInput ??
|
|
29
|
+
{});
|
|
30
|
+
const iban = paymentMethodInput.iban?.replace(/\s/g, "");
|
|
31
|
+
if (!iban) {
|
|
32
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Bank account number is missing.");
|
|
33
|
+
}
|
|
34
|
+
const fullName = [
|
|
35
|
+
order.billing_address?.first_name?.trim(),
|
|
36
|
+
order.billing_address?.last_name?.trim(),
|
|
37
|
+
]
|
|
38
|
+
.filter(Boolean)
|
|
39
|
+
.join(" ");
|
|
40
|
+
const owner = (paymentMethodInput.accountHolder?.trim() ||
|
|
41
|
+
order.billing_address?.company?.trim() ||
|
|
42
|
+
fullName).substring(0, 64);
|
|
43
|
+
const payload = {
|
|
44
|
+
reference: order.display_id.toString(),
|
|
45
|
+
description: this.getPaymentDescription(order),
|
|
46
|
+
type: "SINGLE",
|
|
47
|
+
exchangeUrl: this.paymentCreateOptions.webhookUrl,
|
|
48
|
+
amount: {
|
|
49
|
+
value: Math.round(paymentSession.amount.valueOf() * 100),
|
|
50
|
+
currency: order.currency_code.toUpperCase(),
|
|
51
|
+
},
|
|
52
|
+
customer: {
|
|
53
|
+
email: paymentMethodInput.email || order.email || "",
|
|
54
|
+
bankAccount: {
|
|
55
|
+
iban,
|
|
56
|
+
owner,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
if (this.options_.debugMode) {
|
|
61
|
+
try {
|
|
62
|
+
this.logger_.info(JSON.stringify(payload));
|
|
63
|
+
}
|
|
64
|
+
catch (e) { }
|
|
65
|
+
}
|
|
66
|
+
return payload;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Creates the direct debit mandate when the payload is passed from the order
|
|
70
|
+
* created hook. The returned data replaces the session data wholesale, so the
|
|
71
|
+
* payload key is always stripped, persisting it back would create a second
|
|
72
|
+
* mandate on a later update.
|
|
73
|
+
*/
|
|
74
|
+
async updatePayment(input) {
|
|
75
|
+
const { payload, ...data } = (input.data ?? {});
|
|
76
|
+
if (!payload) {
|
|
77
|
+
return { data };
|
|
78
|
+
}
|
|
79
|
+
// A retried order created hook must not create a second mandate
|
|
80
|
+
if (data.code) {
|
|
81
|
+
this.logger_.info(`Pay. direct debit mandate ${data.code} already exists, skipping creation`);
|
|
82
|
+
return { data };
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const response = await this.client_.createDirectDebit(payload);
|
|
86
|
+
if (!response) {
|
|
87
|
+
// Test mode does not create a mandate, keep the existing session data
|
|
88
|
+
return { data };
|
|
89
|
+
}
|
|
90
|
+
this.logger_.info(`Pay. direct debit mandate ${response.code} created for reference ${payload.reference} with amount ${payload.amount.currency} ${payload.amount.value}`);
|
|
91
|
+
return { data: response };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
this.logger_.error(`Error creating Pay. direct debit: ${error.message}`);
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Retrieves payment details. Payments that hold a Pay. order or transaction
|
|
100
|
+
* id (created through the order API, or refunded) resolve through the base
|
|
101
|
+
* implementation, mandate based payments resolve through the mandate code.
|
|
102
|
+
*/
|
|
103
|
+
async retrievePayment(input) {
|
|
104
|
+
const data = (input.data ?? {});
|
|
105
|
+
if (data.id || data.orderId) {
|
|
106
|
+
return await super.retrievePayment({
|
|
107
|
+
...input,
|
|
108
|
+
data: { ...data, id: data.id ?? data.orderId },
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const mandateId = this.readMandateId(data);
|
|
112
|
+
if (!mandateId) {
|
|
113
|
+
return { data };
|
|
114
|
+
}
|
|
115
|
+
const info = await this.client_.getDirectDebitInfoByMandate(mandateId);
|
|
116
|
+
return { data: info };
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* A mandate based direct debit is revoked by deleting the mandate at Pay.,
|
|
120
|
+
* so a pending collection is never executed for a canceled payment. The
|
|
121
|
+
* order API abort only applies to payments that hold a Pay. order id.
|
|
122
|
+
*/
|
|
123
|
+
async cancelPayment(input) {
|
|
124
|
+
const data = (input.data ?? {});
|
|
125
|
+
if (data.orderId) {
|
|
126
|
+
return await super.cancelPayment(input);
|
|
127
|
+
}
|
|
128
|
+
const mandateId = this.readMandateId(data);
|
|
129
|
+
if (!mandateId) {
|
|
130
|
+
// Nothing was created at Pay. (e.g. test mode), nothing to revoke
|
|
131
|
+
return { data };
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
await this.client_.deleteDirectDebitMandate(mandateId);
|
|
135
|
+
this.logger_.info(`Pay. direct debit mandate ${mandateId} deleted, no further collections will be executed`);
|
|
136
|
+
return { data };
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
this.logger_.error(`Error deleting Pay. direct debit mandate ${mandateId}: ${error.message}`);
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* A mandate based direct debit only counts as captured when Pay. reports the
|
|
145
|
+
* direct debit as collected. The state is always re-fetched from Pay., so a
|
|
146
|
+
* spoofed exchange cannot capture an uncollected payment.
|
|
147
|
+
*/
|
|
148
|
+
async capturePayment(input) {
|
|
149
|
+
const data = (input.data ?? {});
|
|
150
|
+
if (data.orderId) {
|
|
151
|
+
return await super.capturePayment(input);
|
|
152
|
+
}
|
|
153
|
+
const mandateId = this.readMandateId(data);
|
|
154
|
+
if (!mandateId) {
|
|
155
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No mandate code found on the payment data");
|
|
156
|
+
}
|
|
157
|
+
const info = await this.client_.getDirectDebitInfoByMandate(mandateId);
|
|
158
|
+
const directDebit = info.directdebits[0];
|
|
159
|
+
if (directDebit?.status.code === constants_1.PayDirectDebitStatusCode.COLLECTED) {
|
|
160
|
+
return {
|
|
161
|
+
data: {
|
|
162
|
+
...data,
|
|
163
|
+
orderId: directDebit.orderId,
|
|
164
|
+
amount: directDebit.amount,
|
|
165
|
+
status: directDebit.status,
|
|
166
|
+
directdebits: info.directdebits,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.PAYMENT_AUTHORIZATION_ERROR, "The payment could not be captured.");
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Refunds go through the regular transaction refund endpoint, using the Pay.
|
|
174
|
+
* transaction id of the collection. That id lives on the collected direct
|
|
175
|
+
* debit, not necessarily on the stored payment data, so it is resolved from
|
|
176
|
+
* the mandate when missing.
|
|
177
|
+
*/
|
|
178
|
+
async refundPayment(input) {
|
|
179
|
+
const data = (input.data ?? {});
|
|
180
|
+
let directDebit = data.directdebits?.[0];
|
|
181
|
+
let orderId = data.orderId ?? directDebit?.orderId;
|
|
182
|
+
if (!orderId) {
|
|
183
|
+
const mandateId = this.readMandateId(data);
|
|
184
|
+
if (mandateId) {
|
|
185
|
+
const info = await this.client_
|
|
186
|
+
.getDirectDebitInfoByMandate(mandateId)
|
|
187
|
+
.catch((error) => {
|
|
188
|
+
this.logger_.warn(`Could not retrieve direct debit mandate ${mandateId}: ${error.message}`);
|
|
189
|
+
return undefined;
|
|
190
|
+
});
|
|
191
|
+
directDebit = info?.directdebits[0];
|
|
192
|
+
orderId = directDebit?.orderId;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (!orderId) {
|
|
196
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "No Pay. transaction found for this direct debit, cannot refund.");
|
|
197
|
+
}
|
|
198
|
+
return await super.refundPayment({
|
|
199
|
+
...input,
|
|
200
|
+
data: {
|
|
201
|
+
...data,
|
|
202
|
+
orderId,
|
|
203
|
+
amount: data.amount ?? directDebit?.amount,
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
readMandateId(data) {
|
|
208
|
+
const mandateId = data.code ?? data.directdebits?.[0]?.mandate.code;
|
|
209
|
+
return typeof mandateId === "string" && mandateId.trim()
|
|
210
|
+
? mandateId.trim()
|
|
211
|
+
: undefined;
|
|
212
|
+
}
|
|
18
213
|
}
|
|
19
214
|
PayDirectDebitService.identifier = types_1.PaymentProviderKeys.DIRECTDEBIT;
|
|
20
215
|
exports.default = PayDirectDebitService;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5LWRpcmVjdC1kZWJpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5L3NlcnZpY2VzL3BheS1kaXJlY3QtZGViaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFjQSxxREFBcUQ7QUFDckQsZ0VBQXNDO0FBQ3RDLG9DQU1pQjtBQUNqQixpREFBMEQ7QUFFMUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxxQkFBc0IsU0FBUSxrQkFBTztJQUd6QyxJQUFJLG9CQUFvQjtRQUN0QixPQUFPO1lBQ0wsUUFBUSxFQUFFLEdBQUc7WUFDYixVQUFVLEVBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO2dCQUN2QixhQUFhO2dCQUNiLDJCQUFtQixDQUFDLFdBQVc7Z0JBQy9CLE1BQU07U0FDVCxDQUFBO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUNuQixLQUF5RSxFQUN6RSxjQUFpQztRQUVqQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxrQkFBa0I7WUFDakUsRUFBRSxDQUE2QixDQUFBO1FBRWpDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRXhELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGlDQUFpQyxDQUNsQyxDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsS0FBSyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO1lBQ3pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtTQUN6QzthQUNFLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFF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
|
|
@@ -10,12 +10,13 @@ export type PinPaymentMethod = {
|
|
|
10
10
|
terminalCode: string;
|
|
11
11
|
};
|
|
12
12
|
export type DirectDebitPaymentMethod = {
|
|
13
|
-
firstName
|
|
14
|
-
lastName
|
|
13
|
+
firstName?: string | null;
|
|
14
|
+
lastName?: string | null;
|
|
15
|
+
accountHolder?: string | null;
|
|
15
16
|
email: string | null;
|
|
16
17
|
city: string | null;
|
|
17
18
|
iban: string | null;
|
|
18
|
-
bic
|
|
19
|
+
bic?: string | null;
|
|
19
20
|
permissionGiven?: boolean;
|
|
20
21
|
};
|
|
21
22
|
export type KlarnaPaymentMethod = {
|
|
@@ -70,87 +71,155 @@ export interface UpdateOrder {
|
|
|
70
71
|
description?: string;
|
|
71
72
|
reference?: string;
|
|
72
73
|
}
|
|
73
|
-
export interface DirectDebitInfoRequest {
|
|
74
|
-
mandateId: string;
|
|
75
|
-
referenceId?: string;
|
|
76
|
-
}
|
|
77
74
|
export interface DirectDebitInfoResponse {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
75
|
+
total: number;
|
|
76
|
+
count: number;
|
|
77
|
+
pages: number;
|
|
78
|
+
directdebits: DirectDebit[];
|
|
79
|
+
_links?: Record<string, {
|
|
80
|
+
href: string;
|
|
81
|
+
rel?: string;
|
|
82
|
+
type?: string;
|
|
83
|
+
}>;
|
|
87
84
|
}
|
|
88
|
-
interface
|
|
89
|
-
|
|
90
|
-
type: MandateType;
|
|
91
|
-
bankaccountNumber: string;
|
|
92
|
-
bankaccounOwner: string;
|
|
93
|
-
bankaccountBic: string;
|
|
94
|
-
amount: string;
|
|
85
|
+
export interface DirectDebit {
|
|
86
|
+
id: string;
|
|
95
87
|
description: string;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
state: MandateState;
|
|
100
|
-
ipAddress: string;
|
|
101
|
-
email: string;
|
|
102
|
-
promotorId: string;
|
|
103
|
-
tool: string;
|
|
104
|
-
info: string;
|
|
105
|
-
extra1: string;
|
|
106
|
-
extra2: string;
|
|
107
|
-
extra3: string;
|
|
108
|
-
}
|
|
109
|
-
interface DirectDebit {
|
|
110
|
-
referenceId: string;
|
|
111
|
-
bankaccountNumber: string;
|
|
112
|
-
bankaccountHolder: string;
|
|
113
|
-
bankaccountBic: string;
|
|
88
|
+
url: string;
|
|
89
|
+
processDate: string;
|
|
90
|
+
orderId: string;
|
|
114
91
|
paymentSessionId: string;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
92
|
+
type: "SINGLE" | "RECURRING" | "FLEXIBLE";
|
|
93
|
+
amount: {
|
|
94
|
+
value: number;
|
|
95
|
+
currency: string;
|
|
96
|
+
};
|
|
97
|
+
status: {
|
|
98
|
+
code: number;
|
|
99
|
+
action: string;
|
|
100
|
+
phase: string;
|
|
101
|
+
};
|
|
102
|
+
declined: boolean;
|
|
103
|
+
decline: {
|
|
104
|
+
code: string;
|
|
105
|
+
reason: string;
|
|
106
|
+
date: string;
|
|
107
|
+
} | null;
|
|
108
|
+
bankAccount: {
|
|
109
|
+
iban: string;
|
|
110
|
+
bic: string;
|
|
111
|
+
owner: string;
|
|
112
|
+
};
|
|
113
|
+
mandate: {
|
|
114
|
+
code: string;
|
|
115
|
+
description: string;
|
|
116
|
+
reference: string;
|
|
117
|
+
};
|
|
118
|
+
service: {
|
|
119
|
+
code: string;
|
|
120
|
+
name: string;
|
|
121
|
+
};
|
|
122
|
+
merchant: {
|
|
123
|
+
code: string;
|
|
124
|
+
name: string;
|
|
125
|
+
status: "ACTIVE" | "INACTIVE";
|
|
126
|
+
incorporationCountry: string;
|
|
127
|
+
};
|
|
128
|
+
stats: DirectDebitStats;
|
|
129
|
+
createdAt: string;
|
|
130
|
+
createdBy: string;
|
|
131
|
+
modifiedAt: string;
|
|
132
|
+
modifiedBy: string;
|
|
133
|
+
deletedAt: string | null;
|
|
134
|
+
deletedBy: string | null;
|
|
135
|
+
}
|
|
136
|
+
interface DirectDebitStats {
|
|
137
|
+
info?: string | null;
|
|
138
|
+
tool?: string | null;
|
|
139
|
+
object?: string | null;
|
|
140
|
+
extra1?: string | null;
|
|
141
|
+
extra2?: string | null;
|
|
142
|
+
extra3?: string | null;
|
|
143
|
+
domainId?: string | null;
|
|
124
144
|
}
|
|
125
|
-
type MandateType = "single" | "recurring";
|
|
126
|
-
type MandateState = "first" | "active" | "last" | "single";
|
|
127
145
|
export interface CreateDirectDebitRequest {
|
|
128
|
-
reference: string;
|
|
129
146
|
serviceId: string;
|
|
130
|
-
|
|
131
|
-
bankaccountHolder: string;
|
|
132
|
-
bankaccountNumber: string;
|
|
133
|
-
processDate?: string;
|
|
147
|
+
reference: string;
|
|
134
148
|
description?: string;
|
|
135
|
-
|
|
149
|
+
processDate?: string;
|
|
136
150
|
exchangeUrl?: string;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
151
|
+
type?: "SINGLE" | "RECURRING" | "FLEXIBLE";
|
|
152
|
+
interval?: {
|
|
153
|
+
period?: "day" | "week" | "month" | "trimester" | "halfyear" | "year";
|
|
154
|
+
quantity?: number;
|
|
155
|
+
value?: number;
|
|
156
|
+
};
|
|
157
|
+
amount: {
|
|
158
|
+
value: number;
|
|
159
|
+
currency?: string;
|
|
160
|
+
};
|
|
161
|
+
customer: {
|
|
162
|
+
ipAddress?: string;
|
|
163
|
+
email: string;
|
|
164
|
+
bankAccount: {
|
|
165
|
+
iban: string;
|
|
166
|
+
bic?: string;
|
|
167
|
+
owner: string;
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
stats?: DirectDebitStats;
|
|
146
171
|
}
|
|
147
172
|
export interface CreateDirectDebitResponse {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
173
|
+
code: string;
|
|
174
|
+
serviceId: string;
|
|
175
|
+
reference: string;
|
|
176
|
+
description: string;
|
|
177
|
+
processDate: string;
|
|
178
|
+
exchangeUrl: string | null;
|
|
179
|
+
type: "SINGLE" | "RECURRING" | "FLEXIBLE";
|
|
180
|
+
interval: {
|
|
181
|
+
value: number;
|
|
182
|
+
quantity: number;
|
|
183
|
+
period: string;
|
|
184
|
+
};
|
|
185
|
+
amount: {
|
|
186
|
+
value: number;
|
|
187
|
+
currency: string;
|
|
188
|
+
};
|
|
189
|
+
customer: {
|
|
190
|
+
email: string;
|
|
191
|
+
ipAddress: string;
|
|
192
|
+
bankAccount: {
|
|
193
|
+
iban: string;
|
|
194
|
+
bic: string;
|
|
195
|
+
owner: string;
|
|
196
|
+
};
|
|
152
197
|
};
|
|
153
|
-
|
|
198
|
+
service: {
|
|
199
|
+
code: string;
|
|
200
|
+
name: string;
|
|
201
|
+
};
|
|
202
|
+
merchant: {
|
|
203
|
+
code: string;
|
|
204
|
+
name: string;
|
|
205
|
+
status: string;
|
|
206
|
+
incorporationCountry: string;
|
|
207
|
+
};
|
|
208
|
+
stats: DirectDebitStats;
|
|
209
|
+
lastDirectDebitDate: string | null;
|
|
210
|
+
nextDirectDebitDate: string | null;
|
|
211
|
+
actualDirectDebitDate: string | null;
|
|
212
|
+
createdAt: string;
|
|
213
|
+
createdBy: string;
|
|
214
|
+
modifiedAt: string;
|
|
215
|
+
modifiedBy: string;
|
|
216
|
+
deletedAt: string | null;
|
|
217
|
+
deletedBy: string | null;
|
|
218
|
+
_links?: {
|
|
219
|
+
href: string;
|
|
220
|
+
rel: string;
|
|
221
|
+
type: string;
|
|
222
|
+
}[];
|
|
154
223
|
}
|
|
155
224
|
export interface OrderResponse extends PayErrorResponse {
|
|
156
225
|
id: string;
|