mcpField
P
paystack-transfers

paystack-transfers

github.com/rexedgeその他178 回インストール33 週間前に更新
リポジトリ

paystack-transfers について

paystack-transfersは、Paystack Transfers APIでPaystack残高から銀行口座やモバイルウォレットへ送金するためのスキルです。個別・一括送金、OTPによる確定、ステータス確認に対応します。

主な機能

  1. 01個別送金の開始
  2. 02OTPによる送金の確定
  3. 03一括送金の開始
  4. 04送金の一覧表示と取得
  5. 05参照番号による送金確認

活用シーン

  1. 01作成済みの受取人への送金
  2. 02OTPが必要な送金の完了
  3. 03複数送金の一括送信
  4. 04参照番号による送金状況の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rexedge/paystack --skill paystack-transfers

インストール後、Claude Code で/paystack-transfersを入力して読み込まれたか確認します。

詳細

Paystack Transfers

Transfers API を使用すると、Paystack の残高から銀行口座やモバイルウォレットに送金できます。送金には、事前に作成した送金先が必要です。

依存関係:paystackRequest ヘルパーには paystack-setup が必要です。
関連:送金前に送金先を作成するには paystack-transfer-recipients を使用します。

エンドポイント

MethodEndpointDescription
POST/transfer送金を開始します
POST/transfer/finalize_transfer送金を確定します(OTP)
POST/transfer/bulk一括送金を開始します
GET/transfer送金一覧を取得します
GET/transfer/:id_or_code送金を取得します
GET/transfer/verify/:reference送金を検証します

送金の開始

POST /transfer

アカウントで OTP が無効になっている場合はステータス pending を、OTP が必要な場合は otp を返します。

ParamTypeRequiredDescription
sourcestringYesbalance(唯一の選択肢)
amountintegerYes補助単位(コボ/ペセワ)での金額
recipientstringYes送金先コード(例:RCP_gd9vgag7n5lr5ix)
referencestringYes一意の識別子(16~50 文字、小文字の a~z、0~9、-、_)
reasonstringNo送金理由(顧客の入金通知に表示されます)
currencystringNo通貨コード(デフォルトは NGN)
account_referencestringNoケニアで MPESA Paybill および Till への送金を行う場合に必須です
const transfer = await paystackRequest<{
  transfer_code: string;
  status: string;
  reference: string;
  amount: number;
}>("/transfer", {
  method: "POST",
  body: JSON.stringify({
    source: "balance",
    amount: 100000,          // ₦1,000
    recipient: "RCP_gd9vgag7n5lr5ix",
    reference: `txf_${crypto.randomUUID()}`,
    reason: "Vendor payment for January",
  }),
});
// transfer.data.status → "pending" or "otp"
// transfer.data.transfer_code → "TRF_v5tip3zx8nna9o78"

送金の確定

POST /transfer/finalize_transfer

送金ステータスが otp の場合に必要です。ビジネス用電話に送信された OTP を送信します。

ParamTypeRequiredDescription
transfer_codestringYes送金開始時のレスポンスに含まれる送金コード
otpstringYesビジネス用電話に送信された OTP
await paystackRequest("/transfer/finalize_transfer", {
  method: "POST",
  body: JSON.stringify({
    transfer_code: "TRF_v5tip3zx8nna9o78",
    otp: "928783",
  }),
});

一括送金の開始

POST /transfer/bulk

1 回のリクエストで複数の送金をまとめて処理します。このエンドポイントを使用するには、アカウントで OTP を無効にする必要があります。

ParamTypeRequiredDescription
sourcestringYesbalance
transfersarrayYes送金オブジェクトの配列

各送金オブジェクト:

ParamTypeRequiredDescription
amountintegerYes補助単位での金額
recipientstringYes送金先コード
referencestringYes一意の参照(16~50 文字)
reasonstringNo送金理由
const result = await paystackRequest("/transfer/bulk", {
  method: "POST",
  body: JSON.stringify({
    source: "balance",
    currency: "NGN",
    transfers: [
      {
        amount: 20000,
        recipient: "RCP_gd9vgag7n5lr5ix",
        reference: `txf_${crypto.randomUUID()}`,
        reason: "Bonus for the week",
      },
      {
        amount: 35000,
        recipient: "RCP_m7ljkv8leesep7p",
        reference: `txf_${crypto.randomUUID()}`,
        reason: "January salary",
      },
    ],
  }),
});
// result.message → "2 transfers queued."

送金一覧の取得

GET /transfer

ParamTypeRequiredDescription
perPageintegerNo1 ページあたりのレコード数(デフォルト:50)
pageintegerNoページ番号(デフォルト:1)
recipientintegerNo送金先 ID で絞り込みます
fromdatetimeNo開始日
todatetimeNo終了日
const transfers = await paystackRequest("/transfer?perPage=20&page=1");

送金の取得

GET /transfer/:id_or_code

const transfer = await paystackRequest(
  `/transfer/${encodeURIComponent("TRF_v5tip3zx8nna9o78")}`
);

送金の検証

GET /transfer/verify/:reference

参照を使用して送金のステータスを検証します。

const result = await paystackRequest(
  `/transfer/verify/${encodeURIComponent(reference)}`
);
// result.data.status → "success" | "failed" | "pending" | "reversed"

送金フロー

// 1. Create recipient (see paystack-transfer-recipients skill)
// 2. Initiate transfer
const transfer = await paystackRequest("/transfer", {
  method: "POST",
  body: JSON.stringify({
    source: "balance",
    amount: 500000,
    recipient: "RCP_gd9vgag7n5lr5ix",
    reference: `txf_${crypto.randomUUID()}`,
  }),
});

// 3. If OTP required, finalize
if (transfer.data.status === "otp") {
  const otp = await getOTPFromUser();
  await paystackRequest("/transfer/finalize_transfer", {
    method: "POST",
    body: JSON.stringify({
      transfer_code: transfer.data.transfer_code,
      otp,
    }),
  });
}

// 4. Listen for webhooks: transfer.success, transfer.failed, transfer.reversed

重要な注意事項

  • balance からのみ送金できます。Paystack の残高が十分にあることを確認してください
  • 一括送金を行うには OTP を無効にする必要があります(Dashboard → Settings → Preferences)
  • 送金の参照は一意で、16~50 文字、小文字と -、_ のみを使用する必要があります
  • ケニアの MPESA Paybill/Till では、送金に account_reference を含めてください
  • ポーリングではなく、Webhook(transfer.success、transfer.failed)で送金ステータスを必ず確認してください

コメント