数分で出来る!laravel8でpaypay決済(サンドボックス)を実装してみた!
参考URL
1, paypay for developersでアカウント申請すると、APIキーとシークレット、テスト用paypayアカウントがもらえる
https://developer.paypay.ne.jp/
2, 普通にlaravelをインストール
1 |
compser create-project laravel/laravel laravel8 |
3, composerでpaypayのパッケージをインストール
1 |
composer require paypayopa/php-sdk |
4, ソースに直書きしないために、.envファイルにAPIキー・シークレット・マーチャントIDを記述
PAYPAY_API_KEY=
PAYPAY_API_SECRET=
PAYPAY_MERCHANT_ID=
5, めんどうなのでroutes/web.phpに直接書く
本当は、php artisan make:model Payment –all とかでちゃんと作るべき!
/paypayにアクセスされると、paypayの支払いURLにリダイレクトされる。
決済が完了すると帰ってくるので、戻り先の自サイトURLを記述しておく!
http://localhost/laravel8/public/thanks
1 2 3 |
Route::get('/thanks', function () { return 'paypay支払い完了!<br><a href="home">戻る</a>'; }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
// paypay関係 use PayPay\OpenPaymentAPI\Client; use PayPay\OpenPaymentAPI\Models\OrderItem; use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload; Route::get('/paypay', function () { // composer require paypayopa/php-sdk // .envファイルに書いておく $client = new Client([ 'API_KEY' => env('PAYPAY_API_KEY'), 'API_SECRET'=> env('PAYPAY_API_SECRET'), 'MERCHANT_ID'=> env('PAYPAY_MERCHANT_ID') ], false); // paypayの支払いサイトが完了したら、リダイレクトされるURL // ブラウザの戻るボタンで戻っても、支払いIDが決済完了になっているので3秒後にリダイレクトされ直すだけ $rediect_url = 'http://localhost/laravel8/public/thanks'; //------------------------------------- // 商品情報を生成する //------------------------------------- $items = (new OrderItem()) ->setName('商品その1') ->setQuantity(1) ->setUnitPrice(['amount' => 100, 'currency' => 'JPY']); //------------------------------------- // QRコードを生成する //------------------------------------- $payload = new CreateQrCodePayload(); $payload->setOrderItems($items); $payload->setMerchantPaymentId("mpid_".rand()); // 同じidを使いまわさないこと! $payload->setCodeType("ORDER_QR"); $payload->setAmount(["amount" => 100, "currency" => "JPY"]); $payload->setRedirectType('WEB_LINK'); $payload->setIsAuthorization(false); $payload->setRedirectUrl($rediect_url); $payload->setUserAgent($_SERVER['HTTP_USER_AGENT']); $QRCodeResponse = $client->code->createQRCode($payload); if($QRCodeResponse['resultInfo']['code'] !== 'SUCCESS') { echo("QRコード生成エラー"); return; } // paypayの支払いページに行く。支払いが終わったら$payload->setRedirectUrlにリダイレクトされる return redirect($QRCodeResponse['data']['url']); // 支払いIDはデータベースに保存しておく $merchantPaymentId = $QRCodeResponse['data']['merchantPaymentId']; Log::info('paypay決済ID', $merchantPaymentId); //var_dump($QRCodeResponse); //------------------------------------- // 決済情報を取得する //------------------------------------- $QRCodeDetails = $client->payment->getPaymentDetails($merchantPaymentId); if($QRCodeDetails['resultInfo']['code'] !== 'SUCCESS') { echo("決済情報取得エラー"); return; } Log::info('paypay決済情報', $QRCodeDetails); }); |
6, スマホのpaypayアプリをサンドボックス化するには、ログイン画面まで持っていってロゴを7回クリックする(ファミコンの裏技か!)
https://paypay.ne.jp/developers-faq/sandbox_environment/post-43/
paypay for developersのテスト用paypayアカウント3個のどれかでログインする。
7, サンドボックス下でpaypay支払いをしてみる
パソコンのブラウザだと、paypayの支払いバーコードが出てきて、お店とおんなじ感じでスマホでpaypay支払いが出来る!
問題はスマホだと、ブラウザ上でpaypayのIDとパスワードでログインしないと駄目~!?
そもそもIDとパスワードなんて覚えてないよ~って感じになりそう…。
なんか、paypayアプリが起動したりもするけど、本当に起動するだけで支払い画面にならない!なにか間違っているんだろうか…?