feat(medusa): Payment Collection endpoints (#2525)
This commit is contained in:
1 parent
27184f3878
commit
755ba90c05
58 files changed
+1190
-484
No files matched your search
@@ -50,13 +50,43 @@ export default async (req, res) => {
|
||||
res.sendStatus(200)
|
||||
}
|
||||
|
||||
async function handlePaymentCollection(event, req, res, id, paymentIntentId) {
|
||||
const manager = req.scope.resolve("manager")
|
||||
const paymentCollectionService = req.scope.resolve(
|
||||
"paymentCollectionService"
|
||||
)
|
||||
|
||||
const paycol = await paymentCollectionService
|
||||
.retrieve(id, { relations: ["payments"] })
|
||||
.catch(() => undefined)
|
||||
|
||||
if (paycol?.payments?.length) {
|
||||
if (event.type === "payment_intent.succeeded") {
|
||||
const payment = paycol.payments.find(
|
||||
(pay) => pay.data.id === paymentIntentId
|
||||
)
|
||||
if (payment && !payment.captured_at) {
|
||||
await manager.transaction(async (manager) => {
|
||||
await paymentCollectionService
|
||||
.withTransaction(manager)
|
||||
.capture(payment.id)
|
||||
})
|
||||
}
|
||||
|
||||
res.sendStatus(200)
|
||||
return
|
||||
}
|
||||
}
|
||||
res.sendStatus(204)
|
||||
}
|
||||
|
||||
const paymentIntent = event.data.object
|
||||
const cartId = paymentIntent.metadata.cart_id
|
||||
const cartId = paymentIntent.metadata.cart_id // Backward compatibility
|
||||
const resourceId = paymentIntent.metadata.resource_id
|
||||
|
||||
if (isPaymentCollection(resourceId)) {
|
||||
// TODO: handle payment collection
|
||||
await handlePaymentCollection(event, req, res, resourceId, paymentIntentId)
|
||||
} else {
|
||||
await handleCartPayments(event, req, res, resourceId ?? cartId)
|
||||
await handleCartPayments(event, req, res, cartId ?? resourceId)
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ class StripeBase extends AbstractPaymentService {
|
||||
options
|
||||
)
|
||||
/** @private @const {string[]} */
|
||||
this.paymentMethodTypes = paymentMethodTypes
|
||||
this.paymentMethodTypes_ = paymentMethodTypes
|
||||
|
||||
/**
|
||||
* Required Stripe options:
|
||||
@@ -93,7 +93,7 @@ class StripeBase extends AbstractPaymentService {
|
||||
* @return {Promise<Data[]>} saved payments methods
|
||||
*/
|
||||
async retrieveSavedMethods(customer) {
|
||||
return Promise.resolve([])
|
||||
return []
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -83,7 +83,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
return methods.data
|
||||
}
|
||||
|
||||
return Promise.resolve([])
|
||||
return []
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -222,7 +222,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
*/
|
||||
async retrievePayment(data) {
|
||||
try {
|
||||
return this.stripe_.paymentIntents.retrieve(data.id)
|
||||
return await this.stripe_.paymentIntents.retrieve(data.id)
|
||||
} catch (error) {
|
||||
throw error
|
||||
}
|
||||
@@ -235,7 +235,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
*/
|
||||
async getPaymentData(paymentSession) {
|
||||
try {
|
||||
return this.stripe_.paymentIntents.retrieve(paymentSession.data.id)
|
||||
return await this.stripe_.paymentIntents.retrieve(paymentSession.data.id)
|
||||
} catch (error) {
|
||||
throw error
|
||||
}
|
||||
@@ -259,7 +259,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
|
||||
async updatePaymentData(sessionData, update) {
|
||||
try {
|
||||
return this.stripe_.paymentIntents.update(sessionData.id, {
|
||||
return await this.stripe_.paymentIntents.update(sessionData.id, {
|
||||
...update.data,
|
||||
})
|
||||
} catch (error) {
|
||||
@@ -284,7 +284,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
return sessionData
|
||||
}
|
||||
|
||||
return this.stripe_.paymentIntents.update(sessionData.id, {
|
||||
return await this.stripe_.paymentIntents.update(sessionData.id, {
|
||||
amount: Math.round(cart.total),
|
||||
})
|
||||
}
|
||||
@@ -304,7 +304,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
return sessionData
|
||||
}
|
||||
|
||||
return this.stripe_.paymentIntents.update(paymentSessionData.id, {
|
||||
return await this.stripe_.paymentIntents.update(paymentSessionData.id, {
|
||||
amount: Math.round(paymentInput.amount),
|
||||
})
|
||||
}
|
||||
@@ -335,7 +335,7 @@ class StripeProviderService extends AbstractPaymentService {
|
||||
*/
|
||||
async updatePaymentIntentCustomer(paymentIntentId, customerId) {
|
||||
try {
|
||||
return this.stripe_.paymentIntents.update(paymentIntentId, {
|
||||
return await this.stripe_.paymentIntents.update(paymentIntentId, {
|
||||
customer: customerId,
|
||||
})
|
||||
} catch (error) {
|
||||
|
||||
Reference in new issue
Block a user