Plugin Oficial EDPay para Shopify
Integre a plataforma EDPay na sua loja virtual Shopify para aceitar pagamentos com canais de Moçambique através de checkout seguro e compatível com Hosted Payment SDK.
Shopify Payments App
Disponível no GitHub (Node.js & GraphQL)Implementação backend em Node.js com suporte a Shopify Payments App Extension, Checkout Redirection e Webhooks.
Arquitetura e Fluxo de Pagamento
Receba através de carteiras móveis (M-Pesa, e-Mola), cartões e referências bancárias no mesmo checkout.
O cliente é redirecionado para a página segura EDPay com contagem decrescente USSD e confirmação instantânea.
A encomenda no Shopify é automaticamente marcada como "Paid" através de webhooks assinados com HMAC SHA-256.
Serviço Backend em Node.js
O aplicativo atua como gateway intermediário registado no Partner Dashboard da Shopify, orquestrando as sessões de checkout:
// server/index.js - EDPay Payments App para Shopify
const express = require("express");
const { EDPayClient } = require("./edpay-client");
const app = express();
const client = new EDPayClient({
publicKey: process.env.EDPAY_PUBLIC_KEY,
privateKey: process.env.EDPAY_PRIVATE_KEY,
webhookSecret: process.env.EDPAY_WEBHOOK_SECRET,
});
// Endpoint chamado pelo Shopify Checkout ao iniciar sessão
app.post("/payment-session", async (req, res) => {
const { id, amount, currency, customer } = req.body;
const checkoutUrl = await client.createPaymentLink({
id,
amount: parseFloat(amount),
currency: currency || "MZN",
title: `Shopify Order #${id}`,
customerEmail: customer?.email,
returnUrl: `${process.env.APP_URL}/shopify/return?id=${id}`,
});
res.json({ redirect_url: checkoutUrl });
});// Webhook EDPay para resolver sessão no Shopify GraphQL
app.post("/webhook/edpay", async (req, res) => {
const signature = req.headers["x-edpay-signature"];
if (!client.verifyWebhookSignature(req.rawBody, signature)) {
return res.status(401).json({ error: "Invalid signature" });
}
const { type, data } = req.body;
if (type === "payment.succeeded") {
const sessionId = data.metadata?.shopify_payment_session_id;
// Dispara mutation GraphQL no Shopify: paymentSessionResolve
await shopifyGraphQL.mutate(PAYMENT_SESSION_RESOLVE, { id: sessionId });
}
res.json({ status: "acknowledged" });
});Tarifa plana de 6% em MZN. Saques para contas bancárias em Moçambique são liquidados no prazo de 2 a 7 dias úteis.