facipay.generateButton(params) cria um botão de pagamento. Devolve um objeto Button que renderizas com .render().
const button = facipay.generateButton({
  createOrder: async () => referenceNumber,
  onApprove: async (data, actions) => { /* ... */ },
  options: {
    style: { width: '100%', shape: 'pill' },
    config: { lang: 'pt', showAmount: true },
    paymentConfig: { theme: 'light', allowedPaymentMethods: ['FPMCXEXPRSS', 'FPSOLPG'] },
  },
});

button.render('#facipay-button-container');

Callbacks

createOrder
() => Promise<string>
obrigatório
Chamado antes de abrir o popup. Cria a ordem no teu backend e devolve o referenceNumber como string não-vazia. Detalhes em Callbacks.
onApprove
(data, actions) => Promise<void>
Pagamento aprovado (Multicaixa Express).
onPending
(data, actions) => Promise<void>
Pagamento pendente (Referência EMIS) — há uma referência a mostrar ao cliente.
onCancel
(data) => Promise<void>
Pagamento cancelado pelo utilizador.
onError
(error) => Promise<void>
Erro durante a transação.
onInit
(actions) => Promise<void>
O botão foi inicializado. actions permite enable() / disable().
onClick
(data, actions) => Promise<void>
Clique no botão, antes do createOrder(). actions permite enable(), disable() e reject() (interrompe o fluxo). Útil para validar formulários.

options.style

options.style.width
string | number
Largura do botão (ex.: '100%', 320). Default '100%'.
options.style.shape
'pill' | 'rect'
Forma do botão. Default 'pill'.

options.config

options.config.lang
'pt' | 'en'
Idioma do texto do botão e do checkout.
options.config.showAmount
boolean
Mostra o valor total no botão. Requer referências de pagamento (ver Referências múltiplas).

options.paymentConfig

options.paymentConfig.theme
'light' | 'dark'
Tema do checkout.
options.paymentConfig.allowedPaymentMethods
string[]
Métodos visíveis no checkout. Default ['FPMCXEXPRSS', 'FPSOLPGEXT', 'FPSOLPG']:
  • FPMCXEXPRSS — Multicaixa Express
  • FPSOLPGEXT — Referência EMIS
  • FPSOLPGPagamento directo via FaciPay (sempre disponível)
O pagamento directo via FaciPay é sempre a opção padrão e não pode ser desativado. Ver Métodos de pagamento.
options.paymentConfig.defaultPaymentMethod
string
Método pré-selecionado no checkout. Default 'FPMCXEXPRSS'.
options.paymentConfig.showUIOfProcessingInfo
boolean
Mostra a UI de progresso durante o processamento.
options.paymentConfig.referencePaymentLifeSpan
number
Validade da referência EMIS, em minutos (ex.: 1440 = 24h).
options.paymentConfig.customerInfo
object
Dados do cliente: { name, phone }. Também podes defini-los em runtime com button.addCustomerInfo().

Exemplo completo

facipay.generateButton({
  async createOrder() {
    const r = await fetch('/api/facipay/create-order', { method: 'POST' });
    const { referenceNumber } = await r.json();
    return referenceNumber;
  },
  async onApprove(data, actions) {
    actions.onPopupWindowClosed(() => {
      window.location.href = `/sucesso?orderId=${data.payment.orderId}`;
    });
  },
  async onPending(data, actions) {
    actions.onPopupWindowClosed(() => {
      const ref = data.payment.data.paymentReference;
      window.location.href = `/pendente?ref=${ref}`;
    });
  },
  async onCancel() { window.location.href = '/cancelado'; },
  async onError(e) { console.error(e); },
  options: {
    style: { width: '100%', shape: 'pill' },
    config: { lang: 'pt', showAmount: true },
    paymentConfig: {
      theme: 'light',
      allowedPaymentMethods: ['FPMCXEXPRSS', 'FPSOLPGEXT', 'FPSOLPG'],
      showUIOfProcessingInfo: true,
      referencePaymentLifeSpan: 1440,
    },
  },
}).render('#facipay-button-container');

Próximo passo: Callbacks

Assinaturas e shapes de dados de cada callback.