こんにちは。開発部の久保見です。
今回は PayPay API を使った決済実装を試してみました。
アプリメンバーズにも決済機能がありますが、現状はクレジットカード決済のみとなっています。
ただ、クレジットカード決済を導入する場合、次のようなハードルがあります。
・決済代行会社への初期費用
・審査に進むまでの工程が多い
・導入審査が厳しい(個人事業主は不可の場合あり)
このように、使い始めるまでのハードルが高いのが実情です。
途中で挫折してしまったり、審査が通らないケースもあり、導入はなかなか簡単ではありません。
そこで今回は、
「もっと簡単に決済機能を導入できないか?」
という視点から、
PayPay決済をAPIで組み込めるか試してみることにしました。
1. PayPay for Developers に登録する
まずは PayPay for Developers に登録します。
https://developer.paypay.ne.jp
登録すると以下の情報が発行されます。
・APIキー
・シークレットID
・加盟店ID
これらは後ほど実装で使用します。
2. SDKをインストールする
SDKのインストールは必須ではありませんが、入れておいた方が実装はかなり楽になります。
composer require paypayopa/php-sdk
今回使用したSDKのバージョンは 2.0.7 です。
(2026年3月時点の最新版)
3. 実装する
PayPayのドキュメントですが、正直かなり分かりづらいです。
というのも、決済方法がいくつも存在します。
・ウェブペイメント-即時&出荷売上
・ネイティブ ペイメント
・動的ユーザスキャン
・アプリ コール
・継続課金
・ネイティブペイメント-出荷売上
・支払リクエスト
正直、最初は 何が何だか分からない状態になります。
今回は以下のような流れの決済を想定しています。
Webページで商品を表示
→ API経由で商品名・金額を送信
→ PayPayアプリへ遷移
→ 支払い完了
ECサイトなどでもよくあるパターンです。
以下がサンプルコードです。
require __DIR__ . '/vendor/autoload.php';
// ----- 決済情報 -----
$item = ’ハンバーグ定食’;
$price = 980;
use PayPay\OpenPaymentAPI\Client;
use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload;
$client = new Client([
'API_KEY' => 'xxx',
'API_SECRET' => 'xxx',
'MERCHANT_ID' => 'xxx',
'ENV' => 'SANDBOX'
]);
$payload = new CreateQrCodePayload();
$payload->setMerchantPaymentId('ORDER_' . time());
$payload->setAmount(['amount' => $price, 'currency' => 'JPY']); //
$payload->setCodeType('ORDER_QR');
$payload->setOrderDescription($item);
$payload->setRedirectUrl('https://example.com/complete.php');
$payload->setRedirectType('WEB_LINK');
$response = $client->code->createQRCode($payload);
header("Location: " . $response['data']['url']);
exit;実際の画面
アプリメンバーズメニュー

決済選択画面

支払い内容

支払い完了
※PayPayアプリは一部画面でスクリーンショットが禁止されているため、手撮りしています。

注意点
Web上の記事の中には、古いSDKを前提に書かれているものが多く存在します。
そのため、
・昔のクラスが現在は存在しない
・書いてあるコードがそのままでは動かない
というケースもあります。
実装時は SDKのバージョンに注意した方がよいです。
エラー集
実装中に遭遇したエラーもメモとして残しておきます。
err1
$client->createQrCode(...)
↓
Call to undefined method PayPay\OpenPaymentAPI\Client::createQrCode()
原因
SDKの新しいバージョンでは Client から直接 createQrCode() を呼ぶことができません。$client->code->createQRCode() のように codeオブジェクト経由で呼ぶ必要があります。
err2
use PayPay\OpenPaymentAPI\Controller\QRCodeController;
↓
Class "PayPay\OpenPaymentAPI\Controller\QRCodeController" not found
原因
古い記事に出てくるクラスで、現在のSDKには存在していません。
SDKの構成が変わっているため、このクラスは使えません。
err3
new Code($client)
↓
Too few arguments to function PayPay\OpenPaymentAPI\Controller\Code::__construct()
原因Code クラスを 直接生成する想定の設計ではないためです。
SDK内部で生成されるクラスなので、$client->code から利用します。
今回はまず、試験的に決済の入口部分だけ実装してみました。
細かな仕様調整やエラーハンドリングなどはまだ必要ですが、「とりあえず触ってみたい」というレベルであれば、今回の実装でも十分動作確認はできると思います。
アプリメンバーズでは現在、決済機能の拡充も進めています。
もしご興味がありましたら、ぜひお気軽にお問い合わせください。
▼合わせて読みたい
