@bemony/payment-form-react
适应者 官方行为 @bemony/payment-form。 。 。 .
O pacote monta a mesma instância segura do SDK Web e e rece duas formas de integração : 互联网档案馆的存檔,存档日期2013-12-21
ref(一) 检查;BemonyPaymentFormProvider+ 键useBemonyPaymentForm页:1pay()请求 组件.
普罗维多·纳多拉(O ificador não realos regres de pagamento) 要求财政拨款 (原始内容存档于2018-10-21) (英语). não duplica o estado canônico do SDK Web.
请求
- 反应
>=19 <20· ; - 反应 DOM
>=19 <20· ; - 检查会话没有后端;
- origem 检查出cadastrada na Bemony;
- CSP compatível com os frame e collectors usilizados. 中国植物物种信息数据库.
英斯特拉桑
pnpm add @bemony/payment-form-react
@bemony/payment-form (原始内容存档于2018-10-12) (英语). Instalado como dependência do rependor. 诺克萨里奥省
帕克特斯分裂.
没有后端
开个退房会 没有侍从 我们和秘密钥匙 (原始内容存档于2013-10-12). O navegador deve Receber somente o
sessionClientSecret e/ 说明 riskCollectors。 。 。 .
const response = await fetch(
`${process.env.BEMONY_ORCHESTRATOR_API_BASE_URL}/v1/checkout-sessions`,
{
method: 'POST',
headers: {
authorization: `Bearer ${process.env.BEMONY_SECRET_KEY}`,
'content-type': 'application/json',
'idempotency-key': crypto.randomUUID(),
'x-bemony-api-version': '2026-11-02'
},
body: JSON.stringify({
mode: 'CREATE',
domainId: 'cdom_...',
checkout: { checkoutConfigId: 'ccfg_...' }
})
}
);
if (!response.ok) throw new Error('Não foi possível criar a CheckoutSession.');
const session = await response.json();
Nunca 讨论会 BEMONY_SECRET_KEY 反动 捆绑
做组件.
综合通讯 ref
使用 estaforma quando o botão que chama 游戏 pay() (原始内容存档于2018-10-21) (英语). pentence ao mesmo macade.
'use client';
import {
BemonyPaymentForm,
PAYMENT_FORM_API_VERSION,
type BemonyPaymentFormRef,
type PayInput,
type PaymentFormError,
type RiskCollector
} from '@bemony/payment-form-react';
import { useRef, useState } from 'react';
type CheckoutProps = Readonly<{
sessionClientSecret: string;
riskCollectors?: readonly RiskCollector[];
}>;
export function Checkout({ sessionClientSecret, riskCollectors }: CheckoutProps) {
const formRef = useRef<BemonyPaymentFormRef>(null);
const [ready, setReady] = useState(false);
const [submitting, setSubmitting] = useState(false);
const [error, setError] = useState<PaymentFormError | null>(null);
const input: PayInput = {
merchantOrderId: 'order_123',
merchantReference: 'merchant-reference-123',
currency: 'BRL',
operation: 'PURCHASE',
customer: {
firstName: 'Ana',
lastName: 'Silva',
email: '[email protected]'
},
items: [
{
id: 'item_123',
sku: 'SKU-123',
description: 'Produto',
unitAmount: 10990,
quantity: 1,
type: 'ONE_TIME'
}
],
amount: 10990,
context: { funnelId: 'checkout', funnelStep: 'payment', channel: 'WEB' }
};
async function submit() {
setSubmitting(true);
setError(null);
try {
const payment = await formRef.current!.pay(input);
console.log(payment.paymentId, payment.status);
} catch (cause) {
setError(cause as PaymentFormError);
} finally {
setSubmitting(false);
}
}
return (
<section>
<BemonyPaymentForm
ref={formRef}
clientSecret={sessionClientSecret}
environment="sandbox"
version={PAYMENT_FORM_API_VERSION.TOKEN_INTENT}
riskCollectors={riskCollectors}
threeDS={{ presentation: 'modal' }}
appearance={{ theme: 'system' }}
onReady={() => setReady(true)}
onStatusChange={(status) =>
setSubmitting(
['TOKENIZING', 'SUBMITTING', 'AUTHENTICATING_3DS', 'PROCESSING'].includes(status)
)
}
onError={setError}
/>
{error && <p role="alert">{error.message}</p>}
<button type="button" disabled={!ready || submitting} onClick={() => void submit()}>
{submitting ? 'Processando…' : 'Pagar'}
</button>
</section>
);
}
提供电子钩
使用estaforma quando o botão, resumo ou tratamento de estado está em outro 组件. O 提供者
个人自定义 clientSecret, (中文(简体) ), environment 尔 version 无组件e
费略.
'use client';
import {
BemonyPaymentForm,
BemonyPaymentFormProvider,
PAYMENT_FORM_API_VERSION,
useBemonyPaymentForm,
type PayInput,
type RiskCollector
} from '@bemony/payment-form-react';
function PayButton({ input }: Readonly<{ input: PayInput }>) {
const { ready, state, error, pay } = useBemonyPaymentForm();
return (
<>
{error && <p role="alert">{error.message}</p>}
<button type="button" disabled={!ready || state.isSubmitting} onClick={() => void pay(input)}>
{state.isSubmitting ? 'Processando…' : 'Pagar'}
</button>
</>
);
}
type CheckoutWithProviderProps = Readonly<{
session: Readonly<{
sessionClientSecret: string;
riskCollectors?: readonly RiskCollector[];
}>;
input: PayInput;
}>;
export function CheckoutWithProvider({ session, input }: CheckoutWithProviderProps) {
return (
<BemonyPaymentFormProvider
clientSecret={session.sessionClientSecret}
environment="sandbox"
version={PAYMENT_FORM_API_VERSION.TOKEN_INTENT}
riskCollectors={session.riskCollectors}
threeDS={{ presentation: 'modal' }}
>
<BemonyPaymentForm className="payment-form" />
<PayButton input={input} />
</BemonyPaymentFormProvider>
);
}
useBemonyPaymentForm() 龙卷风 :
| 坎波语Name | 提波 | 乌苏 |
|---|---|---|
ready | boolean | 2006年12月31日,日内瓦 pay() |
state | PaymentFormState | estado, envio, resecado e routo atuais (法语) |
error | PaymentFormError | null | 乌尔蒂莫错误的público |
pay | (input: PayInput) => Promise<PayOutcome> | 歌剧动画 |
钩子 só pode ser usado dentro de 钩子 钩子 BemonyPaymentFormProvider。 。 。 .
道具
| Prop | 提波 | 帕德罗 | 国家 |
|---|---|---|---|
clientSecret | string | 俄克里奥 | 离职会议 |
environment | 'sandbox' | 'production' | 'production_aws' | sandbox | 奥斯佩达 |
version | '2026-09-25' | '2026-10-20' | '2026-10-30' | 2026-10-30 | 霍斯佩达多协议 |
riskCollectors | readonly RiskCollector[] | 宽容 | 苏维埃社会主义共和国 |
appearance | PaymentFormAppearance | 锡斯德马 | 塔马-瓦利亚韦斯-维瓦伊斯 |
threeDS | { presentation?: 'modal' | 'inline' } | modal | 挑战 |
className | string | 宽容 | 容器等级 |
onReady | () => void | 宽容 | iframe e Card 框架正版 |
onCardStateChange | (state: CardState) => void | 宽容 | 完成 e 认证 dos campos |
onStatusChange | (status) => void | 宽容 | 法语区 |
onSuccess | (payment) => void | 宽容 | 帕加门托 AUTHORIZED 尔 CAPTURED |
onError | (error) => void | 宽容 | mesmo 错误 público rejeitado por pay() |
onEvent | (event) => void | 宽容 | 蒙塔吉姆/帕加门托 |
没有供应商, children (原始内容存档于2012-10-12). Também é obrigatório. 没有独立的组件, clientSecret 国家
obrigatório; Dentro do Productor,一种相通的相通语境.
班代拉斯·德·卡朗
Não passe uma lista de bandeiras por prop. 中国植物物种信息数据库. 自动售出卡框架
a 配置。 在瓦利达 VISA 电子
MASTERCARD (a) 恢复性健康.
Quando 一支探险队, onCardStateChange 通报a valid: false 电子音标
(原始内容存档于2013-10-12). e criado; desabilite o botão enquanto o estado for inválido.
<BemonyPaymentForm
clientSecret={sessionClientSecret}
onCardStateChange={(state) => setCanPay(state.valid)}
/>
卡苏 pay() seja 查马多, 抓取 PaymentFormError.code === 'CARD_BRAND_NOT_SUPPORTED'欧马
当地法尔哈, retryable: true{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}我们一起来 VALIDATION 计划 CARD_TOKENIZATION; 欧乌阿里奥
(原始内容存档于2018-07-21) (英语). cope corrigiir o cartão sem gerar uma tentativa francira.
韦尔索斯-达API
import {
DEFAULT_PAYMENT_FORM_API_VERSION,
PAYMENT_FORM_API_VERSION,
type PaymentFormApiVersion
} from '@bemony/payment-form-react';
| 维尔桑 | 常数 | 乌苏 |
|---|---|---|
2026-09-25 | PAYMENT_FORM_API_VERSION.LEGACY | 反法多语 |
2026-10-20 | PAYMENT_FORM_API_VERSION.ENRICHMENT | (法语) |
2026-10-30 | PAYMENT_FORM_API_VERSION.TOKEN_INTENT | 肯特特/简历 |
霍斯佩达多议定书 DEFAULT_PAYMENT_FORM_API_VERSION页:1 2026-10-30。 O
fechado e valor é viciado novamente pelo SDK e pelo hosted BFF. 中国植物物种信息数据库. 万圣节
aPI definida pelo通过 BEMONY_API_VERSION。 。 。 .
一个道具 version (原始内容存档于2018-09-26) (英语). control a somente o handers to Entroductor, o SDK e o formulário Hospedado.
Ela não substitui o header HTTP usado pelo 后端 页面存档备份,存于互联网档案馆 HTTP usado pelo 后端 页面存档备份,存于互联网档案馆.
环境
sandbox- 铁路;production- 总统府;production_aws(原始内容存档于2018-03-29) (英语). produção franceata hospedada na AWS.
(原始内容存档于2018-03-21) (英语). O parte nineca recebe endpoint ou origem arbitraria. 虚拟主机 部署贝莫尼.
三. 联系 pay()
SDK Web的相接器再出口:
import type {
Address,
CardStorageConsent,
CheckoutClient,
CommerceContext,
Customer,
CustomerHistory,
PayInput,
PayOutcome,
PaymentAmounts,
PaymentItem,
ShippingAddress
} from '@bemony/payment-form-react';
PayInput 顾客、内衣、同意书、印地安人/德孔多人,共计
integridade,上下文喜剧,URL,元数据e上下文O do客户端. Sessão, sorth, PAN, CVC, IP, 互联网档案馆的存檔,存档日期2013-10-02,
用户 - Agent observado e evidência 3DS não pertencem ao introduction público. 中国植物物种信息数据库.
倒计时 client 野马
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我是说 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}是的 client(原始内容存档于2013-10-12). apenas sesse campo substitui o valor observado.
Os demais continuam sendo preenchidos pelo SDK quando disponíveis. 中国植物物种信息数据库. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}一个迷宫重回原地
client.utm 电子 client.browserInfo{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}嗯...
amount 喀麦隆
amount {\fn华文楷体\fs20\bord1\shad1\1cHE0E0E0\2cH000000}能跑得快活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活 Ele não定义了o valor cobrado. 中国植物物种信息数据库. 乌玛
龙卷风 422 AMOUNT_MISMATCH。 。 。 .
publicCheckoutUrl 奔跑时刻的时光
(原始内容存档于2012-10-12). environmente de detino publicar suporte ao campo.
错误
MOUNTING → READY → TOKENIZING → SUBMITTING → PROCESSING
├→ AUTHENTICATING_3DS → PROCESSING
├→ AUTHORIZED/CAPTURED
├→ DECLINED/FAILED/EXPIRED
└→ UNKNOWN
执行 pay() 迷幻花样 onError 请求配置 :
try {
const result = await formRef.current!.pay(input);
// Não faça fulfillment apenas com o resultado do browser.
console.log(result.paymentId);
} catch (cause) {
const error = cause as PaymentFormError;
console.error(error.code, error.requestId, error.details);
}
requestIda. 运行时间;commandId当地地名;retryable: truea. 允许自拍或自拍;PAYMENT_STATUS_UNKNOWNexige conferencea/webhook antes de qualquer nova cobrança; 互联网档案馆的存檔,存档日期2013-12-22;payment.transaction.attemptsdiagnóstico público, não字体实现.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}哦 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}哦 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}哦 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}哦 普罗杜多·克苏米多尔·斯科尔 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}哦普罗杜多·克多克多克罗克多克多克多克多克多克多克多克多克多克多克 O Enbed Preserva o wrongo público 互联网档案馆的存檔,存档日期2013-10-02 da API e não reinterpreta o dominio franciro. 中国植物物种信息数据库.
Remontagem e React 严格模式
(原始内容存档于2018-03-26) (英语). Resact Trust (原始内容存档于2013-10-12). Mode sem deixar dois iframes ativos.
{\fn华文楷体\fs16\1cHE0E0E0}真的 clientSecret, (中文(简体) ), environment, (中文(简体) ), version,介绍3DS, appearance 尔
riskCollectors {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}雷蒙塔 or iframe. appearance 电子 riskCollectors (原始内容存档于2018-10-21). são comparados por valor, então
objetos 等同的 reriados durante commerizações comuns não provocam remontagem. 中国植物物种信息数据库.
回叫são lidos pela referência mais recente e não exigem desmontar a instância quando apenas 一个有趣的泥巴.
下一轮.js e SSR
使用 uma fronteira 组件 :
'use client';
import { BemonyPaymentForm } from '@bemony/payment-form-react';
Crie a Checkout Session em Route Handler, Server Action protegida ou后端 prióprio. 通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通訊通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通通 Envie 客户端
构成部分 sessionClientSecret (原始内容存档于2018-10-21). dados públicos da sessão. Nunca 使用 uma variável 语言
NEXT_PUBLIC_* {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}秘密密钥 {\fn黑体\fs20\shad2\2aH82\3aH20\4aH33\fscx95\3cH592001\be1}.
阿帕伦西亚
<BemonyPaymentForm
clientSecret={clientSecret}
appearance={{
theme: 'dark',
variables: {
colorPrimary: '#00e68a',
colorBackground: '#101513',
colorText: '#ffffff',
colorDanger: '#ff5b6e',
colorBorder: '#33413a',
borderRadius: '12px',
fontFamily: 'Inter, sans-serif'
},
threeDS: { modalBackdrop: 'rgba(0, 0, 0, 0.72)' }
}}
/>
风险收集器e
传球 riskCollectors (原始内容存档于2018-09-21) (英语). stratamente da Counter Caption ao partiese ou Productor. 收集器出自,
blopeado ou indeponível não blopeia o pagamento e não deve ser 坚持不懈地检查.
Durante a transição atual, 使用 uma politica consoluda que 保存为字体 exigidas pelo seu 地点 e 许可 os 主机 贝莫尼 os 收集器 机能:
default-src 'self';
frame-src https://form.bemony.com https://bemony-payment-form.vercel.app https://bemony-payment-form-sandbox.vercel.app https://embed-payment-orchestration.bemony.com;
script-src 'self' https://js.stripe.com https://tst.kaptcha.com https://ssl.kaptcha.com;
connect-src 'self' https://form.bemony.com https://bemony-payment-form.vercel.app https://bemony-payment-form-sandbox.vercel.app https://embed-payment-orchestration.bemony.com https://api.stripe.com https://r.stripe.com https://m.stripe.com https://tst.kaptcha.com https://ssl.kaptcha.com;
启动
- 共和党第一任主席
apiVersion· ; - vice o host usando a versão antiga do pacote; 互联网档案馆的存檔,存档日期2013-12-21;
- 共和国 Web e React com 标签
latest· ; - 使 um consumidor de teste expression para 使 um consumidor de teste underente para 具备资格, 使 um consumidor de teste expressione unpression para 使 具有资格的 具有资格的 具有资格的 具有资格的 具有资格的 具有资格的 具有资格的 具有资格的
0.2.0· ; - (原始内容存档于2013-10-12). existe legado, enriquecimento, Token Intent, 3DS e recondiação.
奥米蒂尔 version 我们a 2026-10-30 没有握手。 禁食剂 抗去甲状腺素 Nem
(a) 执行《消除对妇女一切形式歧视公约》,特别是《消除对妇女一切形式歧视公约》.
塞古兰萨教区
- não envie Secret Key, sident interno, PAN, CVC ou evidência 3DS por道具; 互联网档案馆的存檔,存档日期2013-12-21;
- 注册处
clientSecret* 收藏家的纪念品; - (一) 浏览器终端;
- 自由之声
onSuccess(c) 确认por webhook ou 咨询a autenticada; - não experte sordização, 3DS ou retrieved financiro fora do SDK. 互联网档案馆的存檔,存档日期2013-12-21.