【開発者ブログ】PHP × PayPay API(php-sdk)で決済を実装してみる

こんにちは。開発部の久保見です。

今回は 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 から利用します。


今回はまず、試験的に決済の入口部分だけ実装してみました。

細かな仕様調整やエラーハンドリングなどはまだ必要ですが、「とりあえず触ってみたい」というレベルであれば、今回の実装でも十分動作確認はできると思います。

アプリメンバーズでは現在、決済機能の拡充も進めています。

もしご興味がありましたら、ぜひお気軽にお問い合わせください。

▼合わせて読みたい

お問合せ&資料請求