FusionPay is a modern TypeScript/JavaScript library that simplifies integration with the MoneyFusion payment gateway. It provides a fluent, intuitive API for implementing secure online payments in your applications.
- π Secure payment processing with MoneyFusion
- πͺ Full TypeScript support with generic types
- π§© Fluent API with method chaining
- π Comprehensive payment status verification
- π οΈ Customizable data storage for transactions
# Using npm
npm install fusionpay
# Using yarn
yarn add fusionpay
# Using pnpm
pnpm add fusionpayimport { FusionPay } from "fusionpay";
// Initialize the payment client
const payment = new FusionPay("https://api.moneyfusion.com");
// Configure the payment
payment
.totalPrice(1500)
.addArticle("Premium Headphones", 1000)
.addArticle("Extended Warranty", 500)
.clientName("John Doe")
.clientNumber("+123456789")
.addInfo({
orderId: "ORD-12345",
customerEmail: "john.doe@example.com",
})
.returnUrl("https://your-store.com/return")
.webhookUrl("https://your-store.com/webhook");
// Initiate payment
try {
const response = await payment.makePayment();
// Redirect user to payment gateway
window.location.href = response.url;
} catch (error) {
console.error("Payment initiation failed:", error);
}FusionPay uses TypeScript generics to ensure type safety for your custom payment data:
// Define your custom data type
interface OrderData {
orderId: string;
customerEmail: string;
productIds: string[];
}
// Create a typed payment client
const payment = new FusionPay<OrderData>("https://api.moneyfusion.com");
// Your custom data is now type-checked
payment.addInfo({
orderId: "ORD-12345",
customerEmail: "customer@example.com",
productIds: ["PROD-001", "PROD-002"],
});- Configure payment details using the fluent API
- Initiate payment with
makePayment() - Redirect user to the payment URL returned in the response
- Handle the callback when the user returns from the payment gateway
- Verify payment status using the token from the callback URL
When a payment is processed, the user will be redirected(get) to your returnUrl with a token parameter or a post request will be made to the webhookUrl with the payment data:
https://your-store.com/return?token=payment_token_here
Extract and validate this token to verify the payment status:
// Node.js Express example
//In case you use returnUrl
app.get("/return", async (req, res) => {
const { token } = req.query;
try {
const payment = new FusionPay(process.env.FUSION_API_URL);
const status = await payment.checkPaymentStatus(token as string);
if (status.statut && status.data.statut === "paid") {
// Payment successful
const customData = status.data.personal_Info[0];
// Process order fulfillment...
} else {
// Payment failed or pending
}
} catch (error) {
console.error("Payment verification failed:", error);
res.status(500).send("Failed to verify payment");
}
});
// In case you use webhook
app.post("/webhook", async (req, res) => {
// Handle webhook events
const {...} = req.body; // Payment data from MoneyFusion(typeof PaymentVerificationData)
//make your order fulfillment
});The following table shows all configuration fields for the FusionPay client, whether they're required, and their purpose:
| Field | Method | Required | Description |
|---|---|---|---|
totalPrice |
totalPrice(amount: number) |
β | The total payment amount to be processed |
article |
addArticle(name: string, value: number) |
β | Individual items included in the payment (at least one required) |
nomclient |
clientName(name: string) |
β | Customer's full name |
numeroSend |
clientNumber(number: string) |
β | Customer's phone number |
return_url |
returnUrl(url: string) |
β | URL where customer will be redirected after payment |
webhook_url |
webhookUrl(url: string) |
β | URL for receiving server-to-server payment notifications |
personal_Info |
addInfo(data: T) |
β | Custom data to store with the transaction |
*At least one article must be added using addArticle() or addArticles().
interface PaymentResponse {
statut: boolean; // Payment initiation status
token: string; // Token for payment verification
message: string; // Status message
url: string; // Payment gateway URL for user redirection
}interface PaymentVerificationResponse<T> {
statut: boolean; // Verification request status
message: string; // Status message
data: {
_id: string; // Payment record ID
tokenPay: string; // Payment token
numeroSend: string; // Customer phone number
nomclient: string; // Customer name
personal_Info: T[]; // Your custom data array
numeroTransaction: string; // Transaction reference
Montant: number; // Payment amount
frais: number; // Transaction fees
statut: "pending" | "paid" | "failed" | "no paid"; // Payment status
moyen: string; // Payment method used
return_url: string; // Callback URL
createdAt: string; // Transaction timestamp
};
}Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request