Medusa.js
Integre a Cost+ com a sua loja Medusa.js v2 utilizando o plugin oficial costplus-medusa

Integre a Cost+ como provedor de pagamento na sua loja Medusa.js v2. O plugin oficial costplus-medusa regista um provedor de pagamento Medusa separado para cada método de pagamento Cost+, utiliza o fluxo de Página de Pagamento Alojada, e verifica cada alteração de estado contra a API Cost+ — totalmente compatível com PCI DSS.
Pré-requisitos
- Conta de comerciante Cost+ ativa
- Medusa.js
2.14.2ou superior - Node.js
22 - Acesso a PostgreSQL através do
DATABASE_URLda Medusa - Um URL público HTTPS para o backend Medusa (necessário para webhooks)
- Um checkout no storefront que passe
cart_idao iniciar a sessão de pagamento
Métodos de Pagamento Suportados
| Nome no Checkout | Medusa Provider Id | Identificador Cost+ |
|---|---|---|
| Credit / Debit Card | pp_costplus-credit-card_costplus | credit-card |
| Apple Pay | pp_costplus-apple-pay_costplus | apple-pay |
| Google Pay | pp_costplus-google-pay_costplus | google-pay |
| Vipps MobilePay | pp_costplus-vipps-mobilepay_costplus | vipps-mobilepay |
Cada provedor cria uma encomenda Cost+ para exatamente um método de pagamento, pelo que as opções de checkout do storefront permanecem alinhadas com o fluxo de redirecionamento da página de pagamento alojada Cost+.
1. Instalar o Plugin
Instale o pacote no seu projeto de backend Medusa:
npm install costplus-medusaTambém pode instalar a partir de uma versão Git etiquetada: npm install git+ssh://git@github.com:NoPayn/costplus-medusa.git#vX.Y.Z
2. Registar o Plugin e o Provedor
Adicione o plugin e o provedor de pagamento ao seu medusa-config.ts:
import { defineConfig } from "@medusajs/framework/utils"
module.exports = defineConfig({
plugins: [
{
resolve: "costplus-medusa",
options: {},
},
],
modules: [
{
resolve: "@medusajs/medusa/payment",
options: {
providers: [
{
resolve: "costplus-medusa/providers/costplus",
id: "costplus",
options: {},
},
],
},
},
],
})Reinicie o backend Medusa para que o novo plugin e provedor sejam carregados.
3. Configurar no Admin
No Medusa Admin, abra Cost+ (rota /app/costplus) e configure:
- API Key — a sua chave API de comerciante do Portal do Comerciante (Websites → o seu website → Integration)
- Checkout Expiry — tempo limite em minutos (enviado para Cost+ como duração ISO-8601, ex.:
5→PT5M, predefinição é 5 minutos) - Manual Capture — opcional, autoriza pagamentos com cartão sem captura imediata
- Debug Logging — opcional, regista pedidos e respostas da API para resolução de problemas
Na mesma página Cost+ do Admin, ative os métodos de pagamento que pretende disponibilizar para cada região:
Cost+ Credit / Debit CardCost+ Apple PayCost+ Google PayCost+ Vipps MobilePay
Ative apenas os métodos de pagamento para os quais foi aprovado e recebeu confirmação.
Alternar métodos nesta página atualiza os vínculos de provedores de pagamento por região no Medusa para os provedores Cost+, de modo que o endpoint padrão da Store API /store/payment-providers?region_id=... retorne apenas os métodos Cost+ habilitados. Se todos os métodos Cost+ estiverem desativados para uma região, a Store API não retorna nenhum provedor Cost+ para essa região.
4. Integração no Storefront
Ao iniciar uma sessão de pagamento Cost+, passe o cart_id da Medusa em data:
await sdk.store.payment.initiatePaymentSession(paymentCollection.id, {
provider_id: "pp_costplus-credit-card_costplus",
data: {
cart_id: cart.id,
return_url: `${origin}/${countryCode}/checkout/costplus/return?cart_id=${cart.id}`,
failure_url: `${origin}/${countryCode}/checkout?step=payment&costplus_cancelled=1&cart_id=${cart.id}`,
},
})Depois da sessão ser criada, redirecione o cliente para payment_session.data.costplus_payment_url.
A rota de sucesso predefinida é /checkout/costplus/return?cart_id={cart_id} — essa página deve invocar o endpoint complete-cart da Medusa e depois mostrar a página de confirmação da encomenda. O URL de falha deve devolver o cliente ao passo de pagamento sem completar o carrinho.
O tratamento de retorno e webhook verifica sempre a encomenda Cost+ com GET /orders/{id}/ antes de mapear o estado do pagamento de volta para a Medusa.
Listar métodos de pagamento a partir da Store API
Liste os métodos de pagamento a partir da Store API do Medusa em vez de codificar os IDs dos provedores Cost+ na sua loja. Se a loja armazenar em cache /store/payment-providers, use no-store ou invalide o cache após alterações de método no Admin, para que os métodos desativados desapareçam imediatamente do checkout.
Para uma implementação de referência, consulte examples/nextjs/costplus-return/ no repositório costplus-medusa — uma página de retorno do starter Next.js DTC que combina um handler de cliente com uma server action, para que a finalização do carrinho ocorra fora da renderização da página e redirecione de forma confiável para /order/{id}/confirmed.
5. Webhooks
O plugin regista automaticamente um endpoint de webhook em /hooks/payment/{identifier}_costplus. O URL do backend Medusa tem de estar publicamente acessível via HTTPS para que a Cost+ possa entregar atualizações de estado assíncronas.
Se as encomendas permanecerem pendentes muito depois do tempo de expiração configurado, isso indica um problema com a entrega do webhook ou o fluxo de retorno, e não com a definição de expiração em si.
6. Segurança e Armazenamento de Definições
A chave API é encriptada antes de ser armazenada na base de dados da Medusa. Defina COSTPLUS_SETTINGS_SECRET em produção:
COSTPLUS_SETTINGS_SECRET=your-strong-secretSe COSTPLUS_SETTINGS_SECRET não estiver definida, o plugin recorre ao COOKIE_SECRET ou JWT_SECRET da Medusa.
Defina COSTPLUS_API_KEY no ambiente para bloquear a origem da chave API — quando definida, a página Admin não a sobrescreverá. Deixe vazia quando os comerciantes devem gerir a chave no Admin.
7. Testar e Lançar
O ambiente Cost+ é determinado pela chave API — uma chave de website sandbox corre em modo de teste, uma chave de website de produção corre em modo live (sem URL sandbox separado). Efetue algumas transações de teste para verificar fluxos com sucesso, cancelados e expirados antes de entrar em produção.
Suporte
Precisa de ajuda? Contacte a nossa equipa de suporte em support@costplus.io.