strapi-plugin-payments-aggregator v0.0.1
Strapi plugin strapi-plugin-payments-aggregator
General payment providers aggregator for Strapi 3.
Configuration
Plugin configuration is stored in the ./config/plugins.js
file of the application.
Here is example of the configuration file
module.exports = ({ env }) => ({
'payments-aggregator': {
enabled: true,
providers: {
<some-provider>: {...}
},
callback: async (payment) => {....}
}
});
Integration
The plugin configures the following routes
POST /payments-aggreagor/initiate
POST /payments-aggreagor/:provider/:paymentId/callback
GET /payments-aggreagor/:provider/:paymentId/callback
GET /payments-aggreagor/providers
Besides configured routes the plugin functionality is accessible through strapi.plugins['payments-aggregator'].services.payments
service with functions:
function initiatePayment(payment:PaymentRequest):PaymentInitiation
function validatePayment(data:PaymentValidationRequest):void
function listProviders():ProviderPaymentMethod[]
Besides these callable functions there is option to configure a callback function that will be called any time a status change is recorded from communication with service provider. This callback function is defined in the plugin configuration.
Providers
This plugins uses providers. Each provider needs to have name like strapi-provider-payments-<name>
and must implement the following interfaces.
The exported default function must accept object that contains configuration options for the provider. This function must return an object that conforms to the following interface:
interface Provider {
name: string
initiate(data:PaymentRequest&&{webhookUrl:string, amount:float}):PaymentInitiation
validate(data:Object):PaymentDetails
getPaymentMethods():CountryPaymentMethods
}
Types
enum PaymentStatusType {
CREATED = 'created'
FAILED = 'failed'
COMPLETED = 'completed'
CANCELLED = 'cancelled'
}
interface PaymentDetails {
status:PaymentStatusType
externalId:string
clientIBAN:string
metadata:Object
reference:string
}
interface PaymentRequest {
provider:string
amount:number // Amount in cents
currencyCode:string
locale:string
reference:string
description:string
bank:string
returnUrl:string
email:string
}
interface PaymentValidationRequest {
provider:string
paymentId:string
// provider specific data
}
interface Header {
name:string
value:string
}
interface Payment {
provider:string
status:PaymentStatusType
amount:number
currency:string
referenceId:string
externalId:string
}
interface PaymentInitiation {
payment?: Payment
url: string
headers:Header[]
}
interface PaymentMethod {
bic:string
name:string
logo_url:string
}
interface CountryPaymentMethods {
<countryCode>:PaymentMethod[]
<countryCode>:PaymentMethod[]
...
}
interface ProviderPaymentMethod {
<providerName>:CountryPaymentMethods
}
2 years ago