PayPal
管理画面での場所: Finance › Payment channels › PayPal (
/payments/paypal)。有効・無効の切り替えと手数料の設定は Finance › Payment channels › Fees & limits (/payments/fees) にあります。
動作内容
お客様が PayPal の残高、銀行口座、または PayPal に登録されたカードを使用して、USD ウォレットに入金できるようにします。また、お客様が automatic top-up のために NexCMP に PayPal アカウントを記憶させることも可能です。PayPal を好むお客様のために Stripe と併用してください。
要件
| 項目 | 要件 |
|---|---|
| PayPal アカウント | USD を受け取ることができる PayPal ビジネスアカウント。 |
| REST アプリ | PayPal Developer Dashboard (Apps & Credentials) 内の 1 つの REST アプリ。Client ID と Client secret を提供します。テストには Sandbox タブを、本番には Live タブを使用します。 |
| ネットワーク | インターネットから到達可能な HTTPS(PayPal が Webhook を呼び出します)、および api-m.paypal.com(本番)または api-m.sandbox.paypal.com(サンドボックス)のポート 443 へのアウトバウンドアクセス。 |
| 権限 | REST アプリには返金および Webhook の機能が必要です。Check ダイアログで、両方のスコープが存在するかどうかを確認できます。 |
| 依存関係 | なし。 |
インフラストラクチャの準備
- ビジネスアカウントで developer.paypal.com にサインインし、Apps & Credentials を開きます。
- Sandbox(テスト)または Live(本番)を選択し、Create App をクリックします。「NexCMP」などの名前を付けます。
- アプリの Client ID と Secret をコピーします。
- テストの際は、Testing Tools › Sandbox Accounts を使用して Personal(購入者)サンドボックスアカウントを見つけるか、新規作成します。
- Webhookを自分で作成する必要はありません。NexCMPはCreate webhookボタンで自動的に作成します。
NexCMP での接続
- Finance › Payment channels › PayPal (
/payments/paypal) を開きます。 - API keysで、Modeを選択します:
live(リアルマネー、api-m.paypal.com) またはsandbox(api-m.sandbox.paypal.com)。 - Client ID (20文字以上) と Client secretを貼り付けます。
- Checkをクリックします。入力した認証情報をテストし (保存は不要です)、接続、App ID、モード、返金およびWebhookのスコープの有無、トークンの有効期間を報告します。
- Saveをクリックします。
- WebhookカードでURLが
https://<your-domain>/v1/billing/paypal/webhookであることを確認し (httpsである必要があります)、Create webhookをクリックして確認します。NexCMPはPayPalに11件のイベントを指定してWebhookの作成または更新を要求し、返されたWebhook IDを保存します。このボタンは保存済みのキーを使用するため、編集したばかりの場合は先に保存してください。 - もう一度Checkをクリックします。Webhookの行に「exists, 11 events」と表示されるはずです。
- Fees & limitsを開き、PayPalを有効にし、PayPal fee % (デフォルトは4.4) と PayPal fixed fee (cents) (デフォルトは30) を料金体系に合わせて設定し、Save channels & feesをクリックします。

Webhookイベント
NexCMPは次の11件のイベントを登録します: CHECKOUT.ORDER.APPROVED、PAYMENT.CAPTURE.COMPLETED、PAYMENT.CAPTURE.PENDING、PAYMENT.CAPTURE.DECLINED、PAYMENT.CAPTURE.REFUNDED、PAYMENT.CAPTURE.REVERSED、CUSTOMER.DISPUTE.CREATED、CUSTOMER.DISPUTE.UPDATED、CUSTOMER.DISPUTE.RESOLVED、RISK.DISPUTE.CREATED、CHECKOUT.PAYMENT-APPROVAL.REVERSED。
各WebhookはPayPalの署名検証APIを呼び出して検証され、1回のみ保存されてべき等に処理されます。NexCMPはWebhookボディ内の金額を信用せず、キャプチャをクレジットする前にPayPalからキャプチャを取得します。
確認
- Mode を
sandboxのままにします。ポータルで Billing › Deposit を開き、PayPal を選択して Continue on PayPal(または PayPal ボタン)をクリックし、sandbox の購入者アカウントでログインします。 - 支払いを承認します。ポータルに戻ると残高が増加し、支払いはFinance › Billing › Top-upsの下に Completed として表示されます。
- Payment channels › Gateway events › PayPal & USDTを開きます。
PAYMENT.CAPTURE.COMPLETEDイベントがリストに表示されます。 - すべてが正常に動作したら、Modeを
liveに切り替え、本番用の認証情報を入力してSaveをクリックし、再度Create webhookをクリックします (サンドボックスと本番のWebhookは別々です)。
制限と注意事項
- 支払い完了の仕組み。 注文はUSDで作成されます。顧客が承認した後、サーバーがそれをキャプチャし (べき等なリクエストID)、ウォレットに正確に1回クレジットします。顧客がブラウザを閉じた場合の安全網として、Webhookと10分ごとに実行されるリコンシリエーション (照合) ジョブが機能します。
- 保留中および破棄された注文。 注文は12時間オープン状態を維持できます。顧客が持てる保留中の注文は最大5件までです (サーバーは
too_many_pending、HTTP 429を返します)。24時間経過してもキャプチャされない注文は失敗としてマークされます。 - Webhookが設定されていない場合。 Webhook IDが保存されるまで、パネルはすべてのPayPal Webhookに対してHTTP 503を返します。ポータル経由のキャプチャや10分ごとのリコンシリエーションによりウォレットへの入金は行われますが、PayPalがWebhookで報告する内容 (異議申し立て、取り消し、遅延キャプチャ) は適用されません。Create webhookをクリックしてください。
- 保存されたPayPalアカウント。 顧客がPayPalの保存を選択した場合 (またはautomatic top-upを有効にする初回デポジットを完了した場合)、PayPalはその支払いトークンをVaultに保存します。NexCMPは識別子とPayPalのメールアドレスのみを保持します。Saved payment methodsを参照してください。
- 返金と異議申し立てはStripeと同様に処理されます。返金リクエストはFinance › Payouts › Card refundsで承認され、異議申し立ては顧客のアカウントをブロックし、解決するまでプリペイドサービスの利用を停止します。
- 手数料。 PayPalの手数料は自動取得されません。設定したパーセンテージと固定手数料によって、顧客に表示される金額とクレジットされる金額が決まります。実際の料金は国によって異なります (フォームにはベトナム向けに4.4 %、米国向けに3.49 %のヒントが表示されます)。
トラブルシューティング
| 症状 | 原因 | 対処法 |
|---|---|---|
| 「Client ID too short」のエラーが表示される | 20文字未満が貼り付けられている場合 | 完全なクライアント ID をコピーします。 |
| "Webhook URL は https である必要があります" | URL が http:// で入力されています | 公開用の https:// ドメインを使用してください。 |
| チェックで接続エラーが報告されます | モードの間違い (サンドボックスでのライブキー、またはその逆)、シークレットの間違い、アウトバウンドアクセスの不足 | Mode をキーの種類に合わせ、サーバーから curl -I https://api-m.paypal.com をテストします。 |
| Refund / webhooks のスコープが「いいえ」を示しています | REST アプリに必要な機能がありません | PayPal Developer Dashboard のアプリで機能を有効にします。 |
| バナー「PayPal key set, NO webhook」 | Webhook ID がありません | Create webhook をクリックします。 |
| チェックで "Webhook not found" | Webhook が PayPal で削除されたか、別のアプリに属しています | Create webhook をもう一度クリックします。 |
| PayPal が支払いを拒否したことが顧客に通知されます | PayPal がその資金源を拒否しました | 別の支払いソースを選択するようお客様にご依頼ください。 |
| 顧客に "Too many pending requests" が表示されます | 5 件のオープンな注文 | 期限切れを待つか、完了させます。 |
| PayPal ボタンが見つかりません | Fees & limits で PayPal がオフになっているか、設定されていません | オンにして認証情報を保存します。 |