yarn add overshom-wayforpay
This is TypeScript library to work with WayForPay. Completely typed and ready to use.
More features implementation are welcome to be merged from type-safe high-quality PRs.
Below are steps to demonstrate basic flow for creating invoice and monitoring webhook on server when invoiced paid.
import { WFP, WFP_CONFIG } from 'overshom-wayforpay';
WFP_CONFIG.DEFAULT_PAYMENT_CURRENCY = 'UAH';
export const wfp = new WFP({
MERCHANT_ACCOUNT: 'test_merch_n1',
MERCHANT_SECRET_KEY: 'flk3409refn54t54t*FNJRET',
MERCHANT_DOMAIN_NAME: 'https://product.com',
// service URL needed to receive webhooks
SERVICE_URL: 'https://api.product.com/wayforpay-webhook',
});
const response = await wfp.createInvoiceUrl({
orderReference: (Math.random() * 1e17).toString(),
productName: ['Product title'],
productCount: [1],
productPrice: [1],
});
if (response.error) {
// return nicely handled error
}
const invoice = response.value;
// invoice structure sample
{
invoiceUrl: 'https://secure.wayforpay.com/invoice/ib35935c03535',
reason: 'Ok',
reasonCode: 1100,
qrCode: 'https://wayforpay.com/qr/img/ib35935c03535?type=i&size=200'
}
Redirect users to invoiceUrl
or show them QR code so they can pay for the invoice on secure WayForPay page in browser.
Using simple express server might look next:
import express from 'express';
const app = express();
app.use(express.json());
app.post(WAYFORPAY_WEBHOOK_ROUTE, (req, res) => {
// if webhook payload corrupted / signature invalid next line will throw an error
const data = wfp.parseAndVerifyIncomingWebhook(req.body);
if (data.transactionStatus === 'Approved') {
// TODO process transaction
}
// create special-format response for WFP server so it stops sending this webhook.
const answer = wfp.prepareSignedWebhookResponse(data);
res.send(answer);
});
const response = await wfp.getCurrencyRates();
// see response.value for details