本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
处理付款
要处理付款,您需要两个资源:
两者都存在后,ProcessPayment使用付款会话 ID、支付工具 ID 和支付负载进行呼叫。该服务验证请求,检查预算,在相应的区块链上签署交易,并返回签名的付款结果。有关完整的请求和响应架构,请参阅 API 参考ProcessPayment中的。
AgentCore 支付支持两种支付协议,您可以通过以下paymentType参数进行选择:
选择与卖家paymentType在402 Payment Required响应中使用的协议相匹配的。有关 x402 请求和回复的详细信息,请参阅支付 x402 付款请求。有关 MPP 请求和回复的详细信息,请参阅支付 MPP 质询。
您可以使用 AWS 代理工具包中的 AgentCore 付款技能自动执行此页面上的步骤。该技能是 aws-agents 插件的一部分,它允许 AI 编码代理使用 agentcore CLI 创建您的支付管理器、连接器、凭证提供商、支付工具和会话,并为您的代理添加流程付款工具。有关详细信息,请参阅上的 GitHub快速入门和AWS 代理工具包。
有五种调用 ProcessPayment API 的方法:
例
- AgentCore CLI
-
如果您的代理部署时配置了支付功能,请在付款上下文中调用它,x402 拦截器会自动处理付款处理:
agentcore invoke \
--prompt "Access the premium endpoint at https://example-x402-merchant.com/paid-api" \
--payment-instrument-id <INSTRUMENT_ID> \
--auto-session \
--payment-user-id user@example.com
要使用显式会话而不是自动创建会话,请执行以下操作:
agentcore invoke \
--prompt "Access the premium endpoint at https://example-x402-merchant.com/paid-api" \
--payment-instrument-id <INSTRUMENT_ID> \
--payment-session-id <SESSION_ID> \
--payment-user-id user@example.com
已部署代理的 x402 插件拦截 HTTP 402 响应ProcessPayment、调用和重试请求。需要 AgentCore CLI v0.19.0 或更高版本。
- AgentCore SDK
-
使用该PaymentManager类在任何代理框架内手动生成付款标头:
import uuid
from bedrock_agentcore.payments import PaymentManager
manager = PaymentManager(
payment_manager_arn=mgr["paymentManagerArn"],
region_name="us-west-2"
)
# When you receive a 402 response, generate payment proof
payment_required_request = {
"statusCode": 402,
"headers": payment_required["headers"],
"body": payment_required["body"],
}
payment_proof_headers = manager.generate_payment_header(
user_id="test-user-123",
payment_instrument_id=instrument["paymentInstrumentId"],
payment_session_id=session["paymentSessionId"],
payment_required_request=payment_required_request,
client_token=str(uuid.uuid4()),
)
payment_proof_headers包含付款证明标题。重试向付费终端节点发出的请求时,请包含此标头。您也可以调用的process_payment方法PaymentManager来更好地控制输入。
- AWS CLI
-
以下示例通过传入商家的有效负载来处理 x402 付款:paymentInput.cryptoX402
aws bedrock-agentcore process-payment \
--payment-manager-arn "arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/my-manager" \
--payment-session-id "payment-session-abc123" \
--payment-instrument-id "payment-instrument-xyz789" \
--payment-type "CRYPTO_X402" \
--payment-input '{
"cryptoX402": {
"version": "2",
"payload": {
"scheme": "exact",
"network": "eip155:84532",
"amount": "100000",
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0x99935f281d3ED1E804bF1413b76E0B03e1fed4F9",
"maxTimeoutSeconds": 300,
"extra": {"name": "USDC", "version": "2"}
}
}
}' \
--client-token "$(uuidgen)" \
--region us-west-2
要了解如何paymentInput为每种协议构建,包括 MPP AWS
CLI 示例,请参阅支付 x402 付款申请和支付 MPP 质询。
- AWS SDK
-
以下示例通过调用process_payment卖家的有效负载来处理 x402 付款:paymentInput.cryptoX402
import uuid
payment = dp_client.process_payment(
userId="test-user-123",
paymentManagerArn=PAYMENT_MANAGER_ARN,
paymentSessionId=SESSION_ID,
paymentInstrumentId=INSTRUMENT_ID,
paymentType="CRYPTO_X402",
paymentInput={
"cryptoX402": {
"version": "2",
"payload": {
"scheme": "exact",
"network": "eip155:84532",
"amount": "100000",
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"payTo": "0x99935f281d3ED1E804bF1413b76E0B03e1fed4F9",
"maxTimeoutSeconds": 300,
"extra": {"name": "USDC", "version": "2"},
},
}
},
clientToken=str(uuid.uuid4()),
)
响应:
{
"processPaymentId": "12345678-1234-1234-1234-123456789012",
"paymentManagerArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/my-manager-a1b2c3d4e5",
"paymentSessionId": "payment-session-abc123def4567",
"paymentInstrumentId": "payment-instrument-xyz789abc1234",
"paymentType": "CRYPTO_X402",
"status": "PROOF_GENERATED",
"paymentOutput": {
"cryptoX402": {
"version": "2",
"payload": {
"...signed transaction proof..."
}
}
},
"createdAt": "2025-07-15T10:35:00Z",
"updatedAt": "2025-07-15T10:35:02Z"
}
a status of PROOF_GENERATED 表示交易已签署,付款凭证已包含在内paymentOutput。
要了解如何paymentInput为每种协议构建,包括 MPP AWS
SDK 示例及其响应,请参阅支付 x402 付款请求和支付 MPP 质询。
- Strands SDK
-
AgentCore 付款插件为Strands代理提供自动付款处理。它支持 x402 需要付款协议,使代理能够自动处理 HTTP 402 响应。
安装:
pip install 'bedrock-agentcore[strands-agents]'
配置和使用该插件:
from strands import Agent
from strands_tools import http_request
from bedrock_agentcore.payments.integrations.config import AgentCorePaymentsPluginConfig
from bedrock_agentcore.payments.integrations.strands.plugin import AgentCorePaymentsPlugin
# Configure the plugin
config = AgentCorePaymentsPluginConfig(
payment_manager_arn="arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/pm-abc123",
user_id="test-user-123",
payment_instrument_id="payment-instrument-XJU4RSQP9VO0ler",
payment_session_id="payment-session-xuzrnUCd7RT725G",
region="us-west-2",
)
# Create the plugin
plugin = AgentCorePaymentsPlugin(config=config)
# Create agent with the plugin
agent = Agent(
system_prompt="You are a helpful assistant that can access paid APIs.",
tools=[http_request],
plugins=[plugin],
)
# Use the agent -- 402 responses are automatically handled
agent("access https://drvd12nxpcyd5.cloudfront.net/market-recap")
AgentCore 付款插件会自动拦截x402付款请求,处理付款,并使用代理的付款证明重试该请求。
- LangGraph
-
AgentCore 支付中间件为 LangGraph 代理提供自动付款处理。它支持 x402 需要付款协议,使代理能够自动处理 HTTP 402 响应。
安装:
pip install 'bedrock-agentcore[langgraph]'
配置和使用中间件:
from langchain.agents import create_agent
from bedrock_agentcore.payments.integrations.langgraph import (
AgentCorePaymentsConfig,
AgentCorePaymentsMiddleware,
)
config = AgentCorePaymentsConfig(
payment_manager_arn="arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/pm-abc123",
user_id="test-user-123",
payment_instrument_id="payment-instrument-XJU4RSQP9VO0ler",
region="us-west-2",
auto_session=True,
)
payments = AgentCorePaymentsMiddleware(config)
agent = create_agent(
model="us.anthropic.claude-sonnet-4-20250514-v1:0",
tools=[],
middleware=[payments],
)
result = agent.invoke({"messages": [{"role": "user", "content": "access https://drvd12nxpcyd5.cloudfront.net/market-recap"}]})
print(result)
AgentCore 支付中间件自动拦截x402付款请求,处理付款,并使用代理的付款证明重试该请求。
支付 x402 付款申请
当卖家在回复中使用 x402 的付款有效载荷进行402 Payment Required响应时,您将该负载转发给 AgentCore 付款, AgentCore 付款会返回签名的证明。您将商家的有效载荷复制到paymentInput.cryptoX402, AgentCore 付款会检查预算,用钱包签署交易,然后返回签名的证明。您将证明附加到X-PAYMENT标题中,然后重试原始请求。
请求和响应
在中提供以下字段paymentInput.cryptoX402:
-
version— x402 协议版本(例如,1或2)。必需。
-
payload— 商家的 x402 付款要求,作为 JSON 对象传递。这指定了卖家402回复payTo中的schemenetworkmaxAmountRequiredasset、、、、和其他字段。必需。
-
permit2AllowanceLimit— 以资产的最小面额发放的最大链上Permit2限额。可选。仅为通过 Permit2 合约结算的upto(计量的)方案设置此项;为该exact方案提供此项是验证错误。参见 Permit2 补贴以了解最高付款金额。
该响应在中返回以下字段paymentOutput.cryptoX402:
a status of PROOF_GENERATED 表示交易已签署,且其中包含付款凭证paymentOutput。
计划
x402 的有效载荷名为 a。scheme AgentCore 付款支持以下方案:
Permit2 补贴,最多可付款
该upto计划通过Permit2合约结算,该合约转移资金。transferFrom付款人钱包必须首先向Permit2发放 ERC-20 津贴,否则结算会因先决条件错误而 Permit2-allowance 失败。该补助金遵循与任何直接的Permit2批准相同的链上批准模式。有关更多信息,请参阅 Uniswap 网站上的 Uniswap Permit2 和网站上的 x402 upto 方案规范。 GitHub
要处理此问题,permit2AllowanceLimit请将资产的最小面额设置为最大额度(例如,1000000= 1 USDC,以小数点后 6 位)。要授予无限额度,请将最大uint256值作为字符串传递:115792089237316195423570985008687907853269984665640564039457584007913129639935。当您设置此字段时, AgentCore 支付会在签名之前提交链上approve交易。该交易会产生从钱包的原生代币余额中支付的区块链网络(汽油)费用。
因为approve只有在钱包需要批准(例如,首次upto付款)时,permit2AllowanceLimit才会设置钱包的配额,而不是增加钱包的配额,以避免冗余的链上交易。省略该字段可完全跳过津贴处理。此字段仅适用于upto方案;为该exact方案提供该字段是验证错误。
以下示例处理upto付款并向 Permit2 发放 1 USDC 的津贴。因maxAmountRequired为upto,承担了商家在回应中宣传的上限,并且extra.facilitatorAddress是同一402回应的结算促进者。
例
- AWS CLI
-
aws bedrock-agentcore process-payment \
--payment-manager-arn "arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/my-manager" \
--payment-session-id "payment-session-abc123" \
--payment-instrument-id "payment-instrument-xyz789" \
--payment-type "CRYPTO_X402" \
--payment-input '{
"cryptoX402": {
"version": "2",
"payload": {
"scheme": "upto",
"network": "eip155:8453",
"maxAmountRequired": "3495",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x99935f281d3ED1E804bF1413b76E0B03e1fed4F9",
"maxTimeoutSeconds": 300,
"extra": {"name": "USDC", "version": "2", "facilitatorAddress": "0x8581784D3E598cCa3482375CFF2409Ac9DD8c402"}
},
"permit2AllowanceLimit": "1000000"
}
}' \
--client-token "$(uuidgen)" \
--region us-west-2
- AWS SDK
-
import uuid
payment = dp_client.process_payment(
userId="test-user-123",
paymentManagerArn=PAYMENT_MANAGER_ARN,
paymentSessionId=SESSION_ID,
paymentInstrumentId=INSTRUMENT_ID,
paymentType="CRYPTO_X402",
paymentInput={
"cryptoX402": {
"version": "2",
"payload": {
"scheme": "upto",
"network": "eip155:8453",
"maxAmountRequired": "3495",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x99935f281d3ED1E804bF1413b76E0B03e1fed4F9",
"maxTimeoutSeconds": 300,
"extra": {"name": "USDC", "version": "2", "facilitatorAddress": "0x8581784D3E598cCa3482375CFF2409Ac9DD8c402"},
},
"permit2AllowanceLimit": "1000000",
}
},
clientToken=str(uuid.uuid4()),
)
限制
有关 x402 付款请求验证错误及其解决方法,请参阅 x402 付款请求错误。有关付款处理错误及其解决方法,请参阅付款处理错误。
支付 MPP 挑战赛
当卖家在回402 Payment Required复中返回WWW-Authenticate: Payment挑战时,逐字转发挑战。paymentInput.mpp AgentCore payments 解析挑战,检查预算,使用钱包签名,并返回准备发送的标头Authorization值。 AgentCore 付款负责处理标头解析、base64url 解码和签名,因此您无需执行这些操作。
请求和响应
在中提供以下字段paymentInput.mpp:
-
version— MPP 协议版本(例如,1)。必需。
-
wwwAuthenticateHeaders— 来自商家402回复的原始WWW-Authenticate: Payment标题值,逐字传递。只提供一个标题。必需。
-
buyerPaysGasFees— 当卖方不赞助时,是否授权从买方的钱包中支付区块链网络(汽油)费用。可选。省略或false表示买家拒绝。请参阅网络费用同意。
该响应在中返回以下字段paymentOutput.mpp:
请勿解码或修改paymentCredential。它嵌入了原始挑战和签名的有效载荷,商家的 HMAC 绑定到这些确切的字节。附上返回的值。
以下示例处理 MPP 质询。逐字设置--payment-type "MPP"和转发卖家的WWW-Authenticate: Payment挑战paymentInput.mpp.wwwAuthenticateHeaders(正好只有一个标题)。
例
- AWS CLI
-
aws bedrock-agentcore process-payment \
--payment-manager-arn "arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/my-manager" \
--payment-session-id "payment-session-abc123" \
--payment-instrument-id "payment-instrument-xyz789" \
--payment-type "MPP" \
--payment-input '{
"mpp": {
"version": "1",
"wwwAuthenticateHeaders": [
"Payment id=\"c1\", realm=\"seller.example.com\", method=\"evm\", intent=\"charge\", request=\"eyJhbW91bnQiOiIxMDAwMDAifQ\""
]
}
}' \
--client-token "$(uuidgen)" \
--region us-west-2
- AWS SDK
-
import uuid
payment = dp_client.process_payment(
userId="test-user-123",
paymentManagerArn=PAYMENT_MANAGER_ARN,
paymentSessionId=SESSION_ID,
paymentInstrumentId=INSTRUMENT_ID,
paymentType="MPP",
paymentInput={
"mpp": {
"version": "1",
"wwwAuthenticateHeaders": [
'Payment id="c1", realm="seller.example.com", method="evm", '
'intent="charge", request="eyJhbW91bnQiOiIxMDAwMDAifQ"'
],
}
},
clientToken=str(uuid.uuid4()),
)
响应:
{
"processPaymentId": "12345678-1234-1234-1234-123456789012",
"paymentManagerArn": "arn:aws:bedrock-agentcore:us-west-2:123456789012:payment-manager/my-manager-a1b2c3d4e5",
"paymentSessionId": "payment-session-abc123def4567",
"paymentInstrumentId": "payment-instrument-xyz789abc1234",
"paymentType": "MPP",
"status": "PROOF_GENERATED",
"paymentOutput": {
"mpp": {
"version": "1",
"selectedPaymentId": "c1",
"paymentCredential": "Payment <base64url-token>"
}
},
"createdAt": "2025-07-15T10:35:00Z",
"updatedAt": "2025-07-15T10:35:02Z"
}
o status f PROOF_GENERATED 表示该凭证已签名并包含在中。paymentOutput.mpp.paymentCredential
方法和标记
MPP 质询将付款命名为付款method。 AgentCore 付款支持以下charge意图方法:
-
evm— 仅限权威的 USDC。挑战必须包括methodDetails.chainId和realm。
-
tempo— 使用网络公认的 USDC-equivalent 代币选择的methodDetails.chainId任何 Tempo 链。
-
solana— mainnet 和devnet网络,仅收取服务器赞助的费用。
支付工具的区块链网络必须与质询方法相匹配。提供商支持取决于连接器类型:
| 方法 |
Coinbase CDP |
条纹(Privy) |
|
evm
|
支持
|
支持
|
|
tempo
|
支持
|
支持
|
|
solana
|
不支持
|
支持
|
网络费用同意
区块链网络(汽油)费用与挑战金额是分开的。挑战赛通过methodDetails.feePayer旗帜宣传谁赞助他们:
-
methodDetails.feePayer=true— 卖方赞助网络费用。buyerPaysGasFees没有效果。
-
methodDetails.feePayer=false或缺席 — 除了付款金额外,买家还要从付款钱包中支付网络费用。由于该费用在挑战金额中不可见,因此只有在您设置了 AgentCore 付款时才会签buyerPaysGasFees=true名;否则返回 a ValidationException。对于该tempo方法,只要卖方不支付赞助费,就必须征得同意。
该evm方法无需费用同意,因为协调人会广播交易并支付汽油费。该solana方法目前仅支持服务器赞助的费用。
限制
-
AgentCore 每次ProcessPayment通话付款只能满足一项挑战。在中提供单个标题wwwAuthenticateHeaders。
-
仅支持 charge intent 和 pull 模式。
-
MPP 挑战是短暂的。如果挑战已到期,则 AgentCore 付款将返回 a ValidationException 且不会消耗任何预算。再次请求付费资源以获得新的挑战,然后重试。
有关 MPP 质询验证错误及其解决方法,请参阅 MPP 质询错误。
框架集成
有关包括错误处理、配置选项和内置工具在内的完整参考文档,请参阅框架集成。