

# AgentCore 支払いとブラウザツールの統合
<a name="payments-browser"></a>

エージェントが x402 有料コンテンツにアクセスする方法は 2 つあります。[ブラウザツール](browser-tool.md)経由または標準の HTTP コール経由です。

## Browser Tool の統合 (Playwright)
<a name="payments-agent-integration-browser-playwright"></a>

AgentCore ブラウザツールは、エージェントに AgentCore ランタイム内のマネージドヘッドレス Chromium ブラウザセッションを提供します。エージェントは Chrome DevTools Protocol (CDP) を使用して WebSocket 経由で接続し、ページの移動、JavaScript の実行、ネットワークレベルでの HTTP レスポンスの傍受を可能にします。開始するには、[ブラウザオンボーディングガイド](browser-tool.md)を参照してください。

このオプションは、Strands SDK をブラウザツールおよび支払いツールとともに使用して、ウェブサイトを参照し、支払いを処理します。エージェントがブラウザツールを使用してウェブサイトを移動する場合、Playwright の応答傍受機能を使用してペイウォールサイトを自動的に検出します。

1.  **ブラウザナビゲーション** — エージェントは Playwright を搭載した`browse_with_payment`ツールを使用します。

1.  **自動 402 検出** — Playwright はすべての HTTP レスポンスをインターセプトし、エージェントのレスポンスハンドラーをトリガーして 402 ステータスコードを検出します。

1.  **x402 抽出** — 支払いツールは、レスポンスヘッダー/本文から x402 支払いの詳細を自動的に解析します。これは、エージェントのビジネスロジックでも実行できます。

1.  **支払い処理** — AgentCore 支払いプロセッサは、設定された CDP ウォレットを使用して暗号署名を作成します。

1.  **再試行 —**  支払いツールは認可ヘッダーを挿入し、同じブラウザセッションでリクエストを再試行します。

```
from agentcore.payments import PaymentClient
from agentcore.browser import browser_tool

@tool
async def browse_with_payment(url: str, auto_pay: bool = True) -> dict:
    payment_requirements = None

    async def handle_response(response):
        nonlocal payment_requirements
        if response.status == 402:
            payment_requirements = await extract_x402_requirements(response)

    async def add_payment_header(route, request):
        headers = {**request.headers, **payment_result["authorization"]}
        await route.continue_(headers=headers)

    async with async_playwright() as p:
        # 1. Browser setup
        browser = await p.chromium.connect_over_cdp(AGENTCORE_BROWSER_WS_URL)
        page = await browser.contexts[0].new_page()

        # 2. Register response interceptor
        page.on("response", handle_response)

        # 3. Initial navigation (handle_response runs automatically here)
        response = await page.goto(url)

        # 4. Payment processing logic (runs AFTER navigation completes)
        if response.status == 402 and payment_requirements and auto_pay:
            payment_result = payment_client.process_payment(
                payment_session,
                payment_instrument,
                payment_requirements=payment_requirements
            )

            if payment_result["success"]:
                await page.route("**/*", add_payment_header)
                response = await page.goto(url)  # Retry with payment
            else:
                raise PaymentError(f"Payment failed: {payment_result['error_message']}")

        # 5. Capture content, cleanup, and return
        content = await page.content()
        await browser.close()
        return {"content": content, "status": response.status}
```

## ブラウザ以外の HTTP 統合
<a name="payments-agent-integration-browser-http"></a>

直接 API コールとヘッドレスシナリオの場合、開発者は Strands SDK と標準の HTTP リクエストライブラリを使用してカスタムツールロジックを作成し、x402 検出で支払いを処理できます。

1. エージェントは、HTTP を直接呼び出すためのカスタムツールを使用します。

1. Tool は HTTP レスポンスステータスコードをモニタリングして 402 を検出します。

1. ツールは x402 要件を抽出し、支払いを処理します。

1. ツールは、支払い承認ヘッダーを使用して HTTP リクエストを再試行します。

```
@tool
async def make_payment(method, url, headers, body) -> dict:
    # Make initial HTTP request
    response = requests.request(method, url, headers=headers, data=body)

    # Check for 402 Payment Required
    if response.status_code == 402:
        payment_requirements = extract_x402_requirements(response)
        payment_result = payment_client.process_payment(
            payment_session,
            payment_instrument,
            payment_requirements=payment_requirements
        )

        if payment_result["success"]:
            # Retry request with payment authorization
            headers.update(payment_result["authorization"])
            response = requests.request(method, url, headers=headers, data=body)
        else:
            raise PaymentError(f"Payment failed: {payment_result['error_message']}")
```