payment-provider-framework
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePayment Provider Framework (VTEX IO)
Payment Provider Framework (VTEX IO)
When this skill applies
适用场景
Use this skill when:
- Creating or maintaining a payment connector implemented as a VTEX IO app (not a standalone HTTP service you host yourself)
- Wiring ,
@vtex/payment-provider, andPaymentProviderinPaymentProviderServicenode/index.ts - Configuring the builder,
paymentProvider(payment methods,configuration.json, feature flags)customFields - Implementing for Gateway retry semantics on IO
this.retry(request) - Extending and passing
SecureExternalClienton requests for card flows on IOsecureProxy - Testing via payment affiliation, workspaces, beta/stable releases, the VTEX App Store, and VTEX homologation
Do not use this skill for:
- PPP HTTP contracts, response field-by-field requirements, and the nine endpoints in the abstract — use
payment-provider-protocol - Idempotency and duplicate handling — use
paymentIdpayment-idempotency - Async status,
undefinednotification vs retry (IO vs non-IO) — usecallbackUrlpayment-async-flow - PCI rules, logging, and token semantics beyond IO wiring — use
payment-pci-security
本指南适用于以下场景:
- 创建或维护以VTEX IO应用形式实现的支付连接器(而非您自行托管的独立HTTP服务)
- 在中关联
node/index.ts、@vtex/payment-provider和PaymentProviderPaymentProviderService - 配置构建器、
paymentProvider(支付方式、configuration.json、功能开关)customFields - 实现以适配IO上的网关重试语义
this.retry(request) - 继承并在IO上的卡支付流程请求中传入
SecureExternalClient参数secureProxy - 通过支付关联、工作区、beta/稳定版本发布、VTEX应用商店和VTEX homologation流程进行测试
本指南不适用于以下场景:
- PPP HTTP契约、逐字段响应要求和抽象层面的9个端点——请参考
payment-provider-protocol - 幂等性和重复处理——请参考
paymentIdpayment-idempotency - 异步状态、
undefined通知与重试(IO与非IO场景差异)——请参考callbackUrlpayment-async-flow - PCI规则、日志、IO关联之外的令牌语义——请参考
payment-pci-security
Decision rules
决策规则
- PPF on IO: Payment Provider Framework is the VTEX IO–based way to build payment connectors. The app uses IO infrastructure; API routes, request/response types, and Secure Proxy are integrated per VTEX guides. Start from the example app described in Payment Provider Framework (clone/bootstrap as documented there).
- Prerequisites: Follow Implementation prerequisites in the Payment Provider Protocol article and Integrating a new payment provider on VTEX.
- Dependencies: In the app folder, add
node(for example@vtex/payment-providerin1.x). Keeppackage.jsonin@vtex/api(for exampledevDependencies); linking may bump it beyond6.x, which is acceptable. If6.xtypes break, delete@vtex/apiandnode_modulesin the project root and inyarn.lock, then runnodein both.yarn install -f - builder: In
paymentProvider, includemanifest.jsonnext to"paymentProvider": "1.x"so policies for Payment Gateway callbacks and PPP routes apply.node - : Declare
configuration.jsonso the builder can implement them without re-declaring everything onpaymentMethods. Use names that match List Payment Provider Manifest; only invent a new name when the method is genuinely new. New methods in Admin may require a support ticket./manifest - : One class method per PPP route; TypeScript enforces shapes — see Payment Flow endpoints in the API reference.
PaymentProvider - : Registers default routes
PaymentProviderService,/manifest,/payments,/settlements,/refunds,/cancellations; pass extra/inbound/routeswhen needed.clients - Overriding : Only with an approved use case — open a ticket. See Preferred pattern for an example route override shape.
/manifest - Configurable options: Use / builder options for flags such as
configuration.json,implementsOAuth,implementsSplit,usesProviderHeadersName,useAntifraud,usesBankInvoiceEnglishName,usesSecureProxy,requiresDocument,acceptSplitPartialRefund(auto-settlement UI — Custom Auto Capture). SetusesAutoSettleOptionsand rely on auto-generatednameon IO unless documented otherwise.serviceUrl - Gateway retry: In PPF, call where the protocol requires retry — see Payment authorization in the PPP article.
this.retry(request) - Card data on IO: Prefer with
SecureExternalClientfrom Create Payment; destination must be allowlisted (AOC via support). SupportedsecureProxy: secureProxyUrlvalues for Secure Proxy:Content-Typeandapplication/jsononly.application/x-www-form-urlencoded - Checkout testing: Account must be allowed for IO connectors (ticket with app name and account). Publish beta, install on , wait ~1 hour, open affiliation URL, enable test mode and workspace, configure payment condition (~10 minutes), place test order; then stable + homologation.
master - Publication: Configure per Billing Options; submit via Submitting your app. Prepare homologation artifacts (connector app name, partner contact, production endpoint, allowed accounts, new methods/flows) per Integrating a new payment provider on VTEX (SLA often ~30 days).
billingOptions - Updates: Ship changes in a new beta, re-test affiliations, then stable; re-homologate if required.
- IO上的PPF: Payment Provider Framework是基于VTEX IO构建支付连接器的官方方案。应用使用IO基础设施;API路由、请求/响应类型和Secure Proxy均按照VTEX指南集成。请从Payment Provider Framework文档中描述的示例应用开始开发(按照文档说明克隆/初始化项目)。
- 前置要求: 遵循Payment Provider Protocol文档中的实现前置要求以及在VTEX上集成新支付提供商指南。
- 依赖: 在应用的文件夹中添加
node依赖(例如@vtex/payment-provider中指定package.json版本)。将1.x保留在@vtex/api中(例如devDependencies版本);link操作可能会将版本提升到6.x以上,这是可接受的。如果6.x类型报错,请删除项目根目录和@vtex/api目录下的node和node_modules,然后在两个目录下分别执行yarn.lock。yarn install -f - 构建器: 在
paymentProvider中,在manifest.json旁边添加node配置,这样支付网关回调和PPP路由的权限策略就会生效。"paymentProvider": "1.x" - : 声明
configuration.json,这样构建器就可以自动实现对应的能力,不需要在paymentMethods中重复声明所有内容。使用的名称要与支付提供商Manifest列表中的名称匹配;只有当支付方式确实是全新的时候才自定义新名称。在管理后台添加新支付方式可能需要提交支持工单。/manifest - : 每个PPP路由对应一个类方法;TypeScript会强制校验数据结构——参考API参考中的支付流程端点。
PaymentProvider - : 注册默认路由
PaymentProviderService、/manifest、/payments、/settlements、/refunds、/cancellations;需要时可以传入额外的/inbound/routes配置。clients - 重写: 只有在有获批用例的情况下才能重写——需要提交工单。路由重写的示例结构请参考推荐模式部分。
/manifest - 可配置选项: 使用/构建器选项来配置功能开关,例如
configuration.json、implementsOAuth、implementsSplit、usesProviderHeadersName、useAntifraud、usesBankInvoiceEnglishName、usesSecureProxy、requiresDocument、acceptSplitPartialRefund(自动结算UI——参考自定义自动捕获)。除非另有文档说明,否则请设置usesAutoSettleOptions并依赖IO上自动生成的name。serviceUrl - 网关重试: 在PPF中,当协议要求重试时调用——参考PPP文档中的支付授权部分。
this.retry(request) - IO上的卡数据: 优先使用,并传入创建支付时返回的
SecureExternalClient;目标地址必须在白名单中(通过支持团队提交AOC申请)。Secure Proxy支持的secureProxy: secureProxyUrl仅为Content-Type和application/json。application/x-www-form-urlencoded - 结账测试: 账户必须被允许使用IO连接器(提交包含应用名称和账户信息的工单)。发布beta版本,安装到工作区,等待约1小时,打开关联URL,启用测试模式和对应工作区,配置支付条件(约10分钟),提交测试订单;之后发布稳定版本并完成homologation流程。
master - 发布: 按照计费选项文档配置;通过提交应用流程提交到应用商店。按照在VTEX上集成新支付提供商要求准备homologation材料(连接器应用名称、合作伙伴联系方式、生产环境端点、允许的账户、新支付方式/流程),SLA通常约为30天。
billingOptions - 更新: 在新的beta版本中发布变更,重新测试关联流程,然后发布稳定版本;如果需要的话重新走homologation流程。
Hard constraints
硬性约束
Constraint: Declare the paymentProvider
builder and a real connector identity in configuration.json
paymentProviderconfiguration.json约束:在configuration.json
中声明paymentProvider
构建器和真实的连接器标识
configuration.jsonpaymentProviderIO connectors MUST include the builder in and a with a non-placeholder and accurate . Do not ship the literal placeholder (or equivalent) as production configuration.
paymentProvidermanifest.jsonpaymentProvider/configuration.jsonnamepaymentMethods"MyConnector"Why this matters
Without the builder, PPP routes and Gateway policies are not wired. A placeholder name breaks Admin, affiliations, and homologation.
Detection
If lacks , or still uses example placeholder names, stop and fix before publishing.
manifest.jsonpaymentProviderconfiguration.jsonCorrect
json
{
"name": "PartnerAcmeCard",
"paymentMethods": [
{ "name": "Visa", "allowsSplit": "onCapture" },
{ "name": "BankInvoice", "allowsSplit": "onAuthorize" }
]
}Wrong
json
{
"name": "MyConnector",
"paymentMethods": []
}IO连接器必须在中包含构建器,同时在中填写非占位符的和准确的。不要将字面量占位符(或等效内容)作为生产配置发布。
manifest.jsonpaymentProviderpaymentProvider/configuration.jsonnamepaymentMethods"MyConnector"重要性
没有该构建器的话,PPP路由和网关策略不会被关联。占位符名称会导致管理后台、关联流程和homologation流程出错。
检测方式
如果缺少配置,或者仍然使用示例占位符名称,请在发布前修复问题。
manifest.jsonpaymentProviderconfiguration.json正确示例
json
{
"name": "PartnerAcmeCard",
"paymentMethods": [
{ "name": "Visa", "allowsSplit": "onCapture" },
{ "name": "BankInvoice", "allowsSplit": "onAuthorize" }
]
}错误示例
json
{
"name": "MyConnector",
"paymentMethods": []
}Constraint: Register PPP routes only through PaymentProviderService
with a PaymentProvider
implementation
PaymentProviderServicePaymentProvider约束:仅通过PaymentProviderService
配合PaymentProvider
实现来注册PPP路由
PaymentProviderServicePaymentProviderThe service MUST wrap a class extending from so standard PPP paths are registered. Do not hand-roll the same route surface without the package unless VTEX explicitly prescribes an alternative.
PaymentProvider@vtex/payment-providerWhy this matters
Missed or mismatched routes break Gateway calls and homologation; the package keeps handlers aligned with the protocol.
Detection
If exposes PPP paths manually and does not instantiate with the connector class, reconcile with the documented pattern.
node/index.tsPaymentProviderServiceCorrect
typescript
import { PaymentProviderService } from "@vtex/payment-provider";
import { YourPaymentConnector } from "./connector";
export default new PaymentProviderService({
connector: YourPaymentConnector,
});Wrong
typescript
// Ad-hoc router only — no PaymentProviderService / PaymentProvider base
export default someCustomRouterWithoutPPPPackage;服务必须封装继承自中的类,这样才能注册标准的PPP路径。除非VTEX明确指定替代方案,否则不要在不使用该包的情况下手动实现相同的路由表层。
@vtex/payment-providerPaymentProvider重要性
缺失或不匹配的路由会导致网关调用和homologation流程失败;该包可以保证处理逻辑与协议保持一致。
检测方式
如果手动暴露PPP路径,且没有使用连接器类实例化,请按照文档中的模式调整。
node/index.tsPaymentProviderService正确示例
typescript
import { PaymentProviderService } from "@vtex/payment-provider";
import { YourPaymentConnector } from "./connector";
export default new PaymentProviderService({
connector: YourPaymentConnector,
});错误示例
typescript
// 仅使用自定义路由——没有使用PaymentProviderService / PaymentProvider基类
export default someCustomRouterWithoutPPPPackage;Constraint: Use this.retry(request)
for Gateway retry on IO
this.retry(request)约束:在IO上使用this.retry(request)
实现网关重试
this.retry(request)Where the PPP flow requires retry semantics on IO, handlers MUST invoke as specified in the protocol — not a custom retry helper that bypasses the framework.
this.retry(request)Why this matters
The Gateway expects framework-driven retry behavior; omitting it causes inconsistent authorization and settlement behavior.
Detection
Search payment handlers for protocol retry cases; if retries are implemented without , fix before release.
this.retryCorrect
typescript
// Inside a PaymentProvider subclass method, when the protocol requires retry:
return this.retry(request);Wrong
typescript
// Re-implementing gateway retry with setTimeout/fetch instead of this.retry
await fetch(callbackUrl, { method: "POST", body: JSON.stringify(payload) });当IO上的PPP流程要求重试语义时,处理逻辑必须按照协议规定调用——不要使用绕过框架的自定义重试工具。
this.retry(request)重要性
网关期望框架驱动的重试行为;缺少该实现会导致授权和结算行为不一致。
检测方式
在支付处理逻辑中搜索协议要求重试的场景;如果重试实现没有使用,请在发布前修复。
this.retry正确示例
typescript
// 在PaymentProvider子类方法内部,当协议要求重试时:
return this.retry(request);错误示例
typescript
// 使用setTimeout/fetch重新实现网关重试,而不是使用this.retry
await fetch(callbackUrl, { method: "POST", body: JSON.stringify(payload) });Constraint: Forward card authorization calls through Secure Proxy on IO with allowlisted destinations
约束:IO上的卡授权调用需要通过Secure Proxy转发,且目标地址在白名单中
For card flows on IO with behavior, proxied HTTP calls MUST go through (or equivalent VTEX pattern), MUST pass set to the from the payment request, and MUST target a VTEX-allowlisted PCI endpoint. Only or bodies are supported. If is false, the provider must be PCI-certified and supply AOC for per VTEX.
usesSecureProxySecureExternalClientsecureProxysecureProxyUrlapplication/jsonapplication/x-www-form-urlencodedusesSecureProxyserviceUrlWhy this matters
Skipping Secure Proxy or wrong content types breaks PCI scope, proxy validation, or acquirer integration — blocking homologation or exposing card data incorrectly.
Detection
Inspect client code for POSTs that include card tokens without in the request config, or destinations not registered with VTEX.
secureProxyCorrect
typescript
import { SecureExternalClient, CardAuthorization } from "@vtex/payment-provider";
import type { InstanceOptions, IOContext, RequestConfig } from "@vtex/api";
export class MyPCICertifiedClient extends SecureExternalClient {
constructor(protected context: IOContext, options?: InstanceOptions) {
super("https://pci-certified.example.com", context, options);
}
public authorize = (cardRequest: CardAuthorization) =>
this.http.post(
"authorize",
{
holder: cardRequest.holderToken,
number: cardRequest.numberToken,
expiration: cardRequest.expiration,
csc: cardRequest.cscToken,
},
{
headers: { Authorization: "Bearer ..." },
secureProxy: cardRequest.secureProxyUrl,
} as RequestConfig
);
}Wrong
typescript
// Direct outbound call with raw card fields and no secureProxy
await http.post("https://acquirer.example/pay", { pan, cvv, expiry });对于IO上带有配置的卡支付流程,代理HTTP调用必须通过(或等效的VTEX标准模式)实现,必须将设置为支付请求返回的,且必须指向VTEX白名单中的PCI端点。仅支持或格式的请求体。如果为false,提供商必须通过PCI认证,并按照VTEX要求提供的AOC。
usesSecureProxySecureExternalClientsecureProxysecureProxyUrlapplication/jsonapplication/x-www-form-urlencodedusesSecureProxyserviceUrl重要性
跳过Secure Proxy或使用错误的内容类型会破坏PCI范围、代理校验或收单机构集成——会导致homologation流程被阻塞,或卡数据暴露风险。
检测方式
检查客户端代码中包含卡令牌的POST请求,是否在请求配置中没有携带,或者目标地址未在VTEX注册。
secureProxy正确示例
typescript
import { SecureExternalClient, CardAuthorization } from "@vtex/payment-provider";
import type { InstanceOptions, IOContext, RequestConfig } from "@vtex/api";
export class MyPCICertifiedClient extends SecureExternalClient {
constructor(protected context: IOContext, options?: InstanceOptions) {
super("https://pci-certified.example.com", context, options);
}
public authorize = (cardRequest: CardAuthorization) =>
this.http.post(
"authorize",
{
holder: cardRequest.holderToken,
number: cardRequest.numberToken,
expiration: cardRequest.expiration,
csc: cardRequest.cscToken,
},
{
headers: { Authorization: "Bearer ..." },
secureProxy: cardRequest.secureProxyUrl,
} as RequestConfig
);
}错误示例
typescript
// 直接调用外部接口,传递原始卡字段,且没有使用secureProxy
await http.post("https://acquirer.example/pay", { pan, cvv, expiry });Preferred pattern
推荐模式
Recommended layout for a PPF IO app:
text
/
├── manifest.json
├── paymentProvider/
│ └── configuration.json
├── node/
│ ├── package.json
│ ├── index.ts # exports PaymentProviderService
│ ├── connector.ts # class extends PaymentProvider
│ └── clients/
│ └── pciClient.ts # extends SecureExternalClient when neededInstall dependency:
sh
yarn add @vtex/payment-providermanifest.jsonjson
{
"builders": {
"node": "6.x",
"paymentProvider": "1.x"
}
}PaymentProvidertypescript
import { PaymentProvider } from "@vtex/payment-provider";
export class YourPaymentConnector extends PaymentProvider {
// One method per PPP route; return typed responses
}Optional route override shape (only after VTEX approval). Update when the app version changes meaningfully; omit / only if you fully implement them yourself.
/manifestx-provider-apphandlerheadersjson
{
"memory": 256,
"ttl": 10,
"timeout": 10,
"minReplicas": 2,
"maxReplicas": 3,
"routes": {
"manifest": {
"path": "/_v/api/my-connector/manifest",
"handler": "vtex.payment-gateway@1.x/providerManifest",
"headers": {
"x-provider-app": "$appVendor.$appName@$appVersion"
},
"public": true
}
}
}Configurable options (reference): (required), (required; auto on IO), , , , , , , , , — see VTEX PPF documentation for defaults and exact semantics.
nameserviceUrlimplementsOAuthimplementsSplitusesProviderHeadersNameuseAntifraudusesBankInvoiceEnglishNameusesSecureProxyrequiresDocumentacceptSplitPartialRefundusesAutoSettleOptionscustomFieldsconfiguration.jsontypetextpasswordappKeyappTokenselectoptionsAffiliation URL pattern for testing:
text
https://{account}.myvtex.com/admin/affiliations/connector/Vtex.PaymentGateway.Connectors.PaymentProvider.PaymentProviderConnector_{connector-name}/Replace with (example: ).
{connector-name}${vendor}-${appName}-${appMajor}vtex-payment-provider-example-v1Testing flow summary: publish beta (for example — see Making your app publicly available), install on , wait ~1 hour, open affiliation, under Payment Control enable Enable test mode and set Workspace (often ), add a payment condition, wait ~10 minutes, place order; then deploy stable and complete homologation.
vendor.app@0.1.0-betamastermasterReplace all example vendor names, endpoints, and credentials with values for your real app before production.
PPF IO应用的推荐目录结构:
text
/
├── manifest.json
├── paymentProvider/
│ └── configuration.json
├── node/
│ ├── package.json
│ ├── index.ts # 导出PaymentProviderService
│ ├── connector.ts # 继承PaymentProvider的类
│ └── clients/
│ └── pciClient.ts # 需要时继承SecureExternalClient安装依赖:
sh
yarn add @vtex/payment-providermanifest.jsonjson
{
"builders": {
"node": "6.x",
"paymentProvider": "1.x"
}
}PaymentProvidertypescript
import { PaymentProvider } from "@vtex/payment-provider";
export class YourPaymentConnector extends PaymentProvider {
// 每个PPP路由对应一个方法;返回带类型的响应
}可选的**路由重写**结构(仅在获得VTEX批准后使用)。当应用版本发生重大变更时更新;只有当你完全自行实现/时才可以省略这些配置。
/manifestx-provider-apphandlerheadersjson
{
"memory": 256,
"ttl": 10,
"timeout": 10,
"minReplicas": 2,
"maxReplicas": 3,
"routes": {
"manifest": {
"path": "/_v/api/my-connector/manifest",
"handler": "vtex.payment-gateway@1.x/providerManifest",
"headers": {
"x-provider-app": "$appVendor.$appName@$appVersion"
},
"public": true
}
}
}可配置选项(参考):(必填)、(必填;IO上自动生成)、、、、、、、、、——默认值和具体语义请参考VTEX PPF文档。
nameserviceUrlimplementsOAuthimplementsSplitusesProviderHeadersNameuseAntifraudusesBankInvoiceEnglishNameusesSecureProxyrequiresDocumentacceptSplitPartialRefundusesAutoSettleOptions管理后台使用的中的****:可以是、(不要用于/)或者带的。
configuration.jsoncustomFieldstypetextpasswordappKeyappTokenoptionsselect测试用的关联URL模式:
text
https://{account}.myvtex.com/admin/affiliations/connector/Vtex.PaymentGateway.Connectors.PaymentProvider.PaymentProviderConnector_{connector-name}/将替换为(例如:)。
{connector-name}${vendor}-${appName}-${appMajor}vtex-payment-provider-example-v1测试流程摘要:发布beta版本(例如——参考公开你的应用),安装到工作区,等待约1小时,打开关联页面,在支付控制下启用启用测试模式并设置工作区(通常是),添加支付条件,等待约10分钟,提交订单;之后部署稳定版本并完成homologation流程。
vendor.app@0.1.0-betamastermaster生产发布前,请将所有示例供应商名称、端点和凭证替换为真实应用对应的取值。
Common failure modes
常见失败场景
- Missing builder or empty/wrong
paymentProvidersopaymentMethodsand Admin do not list methods correctly./manifest - Type or install drift (/
@vtex/api) without the clean reinstall path in root and@vtex/payment-provider.node - Skipping and duplicating retry with ad-hoc HTTP — Gateway behavior diverges from PPP.
this.retry(request) - Card calls without , wrong
secureProxy, or non-allowlisted destination — Secure Proxy or PCI review fails.Content-Type - Testing without account allowlisting, without sellable products, or without waiting for master install / payment condition propagation.
- Overriding without VTEX approval or leaving stale
/manifestafter a major version bump.x-provider-app - Homologation ticket missing production endpoint, allowed accounts, or purchase-flow details (Purchase Flows).
- 缺少构建器,或者
paymentProvider为空/配置错误,导致paymentMethods和管理后台无法正确列出支付方式。/manifest - 类型或安装版本漂移(/
@vtex/api),没有按照要求在根目录和@vtex/payment-provider目录下执行干净重装。node - 没有使用,而是通过自定义HTTP请求重复实现重试逻辑——网关行为与PPP协议不一致。
this.retry(request) - 卡支付请求没有使用、
secureProxy错误,或者目标地址不在白名单中——Secure Proxy或PCI审核失败。Content-Type - 测试时没有将账户加入白名单、没有可售商品,或者没有等待master工作区安装完成/支付条件配置生效。
- 没有获得VTEX批准就重写,或者在主版本升级后没有更新
/manifest导致配置过期。x-provider-app - Homologation工单缺少生产环境端点、允许的账户或者购买流程详情(参考购买流程)。
Review checklist
审核检查清单
- Is the connector an IO app using +
PaymentProvider(not only a standalone middleware guide)?PaymentProviderService - Do and
manifest.jsonmatch the real connector name and supported methods?paymentProvider/configuration.json - Are optional manifest overrides ticket-approved and are / headers /
handlercorrect?x-provider-app - Does every route implementation align with types in and with
@vtex/payment-providerfor response shapes?payment-provider-protocol - Are Gateway retries implemented with where required?
this.retry(request) - Do card flows use (or equivalent) with
SecureExternalClientand allowlisted destinations?secureProxy: secureProxyUrl - Has beta/staging testing followed affiliation, test mode, workspace, and payment condition steps before stable?
- Are billing, App Store submission, and homologation prerequisites documented in the internal release checklist?
- 连接器是否是使用+
PaymentProvider的IO应用(而非仅独立中间件指南)?PaymentProviderService - 和
manifest.json是否与真实的连接器名称和支持的支付方式匹配?paymentProvider/configuration.json - 可选的manifest重写是否经过工单批准,/请求头/
handler是否正确?x-provider-app - 每个路由实现是否与中的类型以及
@vtex/payment-provider中的响应结构一致?payment-provider-protocol - 要求的场景下是否使用实现了网关重试?
this.retry(request) - 卡支付流程是否使用(或等效模式),传递了
SecureExternalClient,且目标地址在白名单中?secureProxy: secureProxyUrl - 发布稳定版本前,beta/ staging测试是否遵循了关联、测试模式、工作区和支付条件配置步骤?
- 内部发布检查清单中是否记录了计费、应用商店提交和homologation的前置要求?
Related skills
相关指南
- — PPP endpoints, HTTP methods, and response shapes
payment-provider-protocol - —
payment-idempotency/paymentIdand retriesrequestId - —
payment-async-flowstatus andundefined(IO retry vs notification)callbackUrl - — PCI and Secure Proxy semantics beyond IO wiring
payment-pci-security
- ——PPP端点、HTTP方法和响应结构
payment-provider-protocol - ——
payment-idempotency/paymentId和重试requestId - ——
payment-async-flow状态和undefined(IO重试与通知差异)callbackUrl - ——PCI和IO关联之外的Secure Proxy语义
payment-pci-security
Reference
参考
- Payment Provider Framework — Official PPF guide (includes getting started and example app)
- Payment Provider Protocol API overview
- Secure Proxy
- PCI DSS compliance (payments)
- Payment Provider Protocol (Help Center)
- Integrating a new payment provider on VTEX