返回顶部
P

PayPal

Integrate PayPal payments with proper webhook verification, OAuth handling, and security validation for checkout flows and subscriptions.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
834
下载量
0
收藏
概述
安装方式
版本历史

PayPal

## When to Use User needs to integrate PayPal REST API for payments, subscriptions, or payouts. Agent handles checkout flows, webhook verification, OAuth token management, and dispute workflows. ## Quick Reference | Topic | File | |-------|------| | Code patterns | `patterns.md` | | Webhook events | `webhooks.md` | ## Core Rules ### 1. Environment URLs are Different - Sandbox: `api.sandbox.paypal.com` - Production: `api.paypal.com` - Ask which environment BEFORE generating code - Credentials are environment-specific — never mix ### 2. OAuth Token Management ```javascript // Token expires ~8 hours — handle refresh const getToken = async () => { const res = await fetch('https://api.paypal.com/v1/oauth2/token', { method: 'POST', headers: { 'Authorization': `Basic ${Buffer.from(`${clientId}:${secret}`).toString('base64')}`, 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'grant_type=client_credentials' }); return res.json(); // { access_token, expires_in } }; ``` Never hardcode tokens. Implement refresh logic. ### 3. Webhook Verification is Mandatory PayPal webhooks MUST be verified via API call — not simple HMAC: ```javascript // POST /v1/notifications/verify-webhook-signature const verification = await fetch('https://api.paypal.com/v1/notifications/verify-webhook-signature', { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ auth_algo: headers['paypal-auth-algo'], cert_url: headers['paypal-cert-url'], transmission_id: headers['paypal-transmission-id'], transmission_sig: headers['paypal-transmission-sig'], transmission_time: headers['paypal-transmission-time'], webhook_id: WEBHOOK_ID, webhook_event: body }) }); // verification_status === 'SUCCESS' ``` ### 4. CAPTURE vs AUTHORIZE — Ask First | Intent | Behavior | |--------|----------| | `CAPTURE` | Charges immediately on approval | | `AUTHORIZE` | Reserves funds, capture later (up to 29 days) | Changing intent after integration breaks the entire flow. ### 5. Server-Side Validation — Never Trust Client ```javascript // After client approves, VERIFY on server before fulfillment const order = await fetch(`https://api.paypal.com/v2/checkout/orders/${orderId}`, { headers: { 'Authorization': `Bearer ${token}` } }).then(r => r.json()); // Validate ALL of these: if (order.status !== 'APPROVED') throw new Error('Not approved'); if (order.purchase_units[0].amount.value !== expectedAmount) throw new Error('Amount mismatch'); if (order.purchase_units[0].amount.currency_code !== expectedCurrency) throw new Error('Currency mismatch'); if (order.purchase_units[0].payee.merchant_id !== YOUR_MERCHANT_ID) throw new Error('Wrong merchant'); ``` ### 6. Idempotency in Webhooks PayPal may send the same webhook multiple times: ```javascript const processed = await db.webhooks.findOne({ eventId: body.id }); if (processed) return res.status(200).send('Already processed'); await db.webhooks.insert({ eventId: body.id, processedAt: new Date() }); // Now process the event ``` ### 7. Currency Decimal Rules Some currencies have NO decimal places: | Currency | Decimals | Example | |----------|----------|---------| | USD, EUR | 2 | "10.50" | | JPY, TWD | 0 | "1050" (NOT "1050.00") | Sending "10.50" for JPY = API error. ## Common Traps - **IPN vs Webhooks** — IPN is legacy. Use Webhooks for new integrations. Never mix. - **Order states** — CREATED → APPROVED → COMPLETED (or VOIDED). Handle ALL states, not just happy path. - **Decimal confusion** — PayPal uses strings for amounts ("10.50"), not floats. Some currencies forbid decimals. - **Sandbox rate limits** — Lower than production. Don't assume prod will fail the same way. - **Payout vs Payment** — Payouts API is separate. Don't confuse sending money (Payouts) with receiving (Orders).

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 paypal-1776101241 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 paypal-1776101241 技能

通过命令行安装

skillhub install paypal-1776101241

下载 Zip 包

⬇ 下载 PayPal v1.0.0

文件大小: 5.4 KB | 发布时间: 2026-4-14 13:13

v1.0.0 最新 2026-4-14 13:13
Initial release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部