ノラプログラマーの技術メモ

ネットで調べても出てこなかった情報を載せていきたい技術系ブログ。

PayPayの開発者向けAPIをPHPで実装してみた(サンプルあり)

PayPayのAPIを実装

PayPay for DevelopersにてPaypayのオープンAPIが提供された。なのでPHPAPIサンプルコードを書いてみた。

事前にPayPay for Developersに登録して「APIキー」と「シークレットキー」を取得しておくこと。

あとサーバーにコンソールでログインし、composerコマンド「composer require paypayopa/php-sdk」でSDKをインストールしておくこと。

開発環境

・Xserver
・PHP7 以上(PHP5は不可)
・Paypay SDK 0.7.2 以上 ← 重要!

PHPサンプルソース

	//-------------------------------------
	// SDK環境設定
	//-------------------------------------
	require __DIR__ . '/vendor/autoload.php';
	use PayPay\OpenPaymentAPI\Client;
	use PayPay\OpenPaymentAPI\Models\OrderItem;
	use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload;

	//-------------------------------------
	// クライアントをビルドする(テスト環境)
	//-------------------------------------
	$client = new Client([
		'API_KEY' => '「APIキー」',
		'API_SECRET'=>'「シークレットキー」',
		'MERCHANT_ID'=>'「マーチャントID」'
	], false);
	var_dump($client);

	//-------------------------------------
	// 商品情報を生成する
	//-------------------------------------
	$items = (new OrderItem())
        ->setName('item name A')
        ->setQuantity(1)
        ->setUnitPrice(['amount' => 500, 'currency' => 'JPY']);

	//-------------------------------------
	// QRコードを生成する
	//-------------------------------------
	$payload = new CreateQrCodePayload();
	$payload->setOrderItems($items);
	$payload->setMerchantPaymentId("mpid_".rand());	// 同じidを使いまわさないこと!
	$payload->setCodeType("ORDER_QR");
	$payload->setAmount(["amount" => 500, "currency" => "JPY"]);
	$payload->setRedirectType('WEB_LINK');
	$payload->setIsAuthorization(false);
	$payload->setRedirectUrl('https://paypay.ne.jp/');
	$payload->setUserAgent($_SERVER['HTTP_USER_AGENT']);
	$QRCodeResponse = $client->code->createQRCode($payload);
	if($QRCodeResponse['resultInfo']['code'] !== 'SUCCESS') {
		echo("QRコード生成エラー");
		return;
	}
	$merchantPaymentId = $QRCodeResponse['data']['merchantPaymentId'];
	var_dump($QRCodeResponse);

	//-------------------------------------
	// 決済情報を取得する
	//-------------------------------------
	$QRCodeDetails = $client->payment->getPaymentDetails($merchantPaymentId);
	if($QRCodeDetails['resultInfo']['code'] !== 'SUCCESS') {
		echo("決済情報取得エラー");
		return;
	}
	var_dump($QRCodeDetails);

実行結果

f:id:kawai_norimitsu:20200906171145j:plain

$QRCodeResponse['data']['url'] から得られるアドレスにアクセスしてみると、paypayの決済画面が表示されます。

以上お疲れ様でしたー

追記

PaypaySDKのバージョンが0.7.0以下のものはバグがあり、安定して接続できない。最新のバージョンを使おう。

またMerchant Payment Idは使いまわさないこと。同じIDで2度目の取引をしようとするとエラーが表示されるため。

なお本番環境では、Client関数の引数をtrueに設定し、APIキーとシークレットキー、マーチャントIDを本番環境のものに置き換える。

更にpaypay事務局に連絡して、IPアドレスホワイトリストを登録してもらう必要がある。(これで本番環境でもQRコードが払い出された)

上記に漏れがあると、{"resultInfo":{"code":"UNAUTHORIZED","message":"Unauthorized request","codeId":"08100016"}のようなエラーが表示されるので注意。