はじめに
こんばんは。
PayPay for Developersがリリースされて、phpのSDKもあるらしいので試してみました。
参考にしたサイト
本題
1. PayPay for Developers登録
コチラから新規登録をします。
テストで試すだけなら無料のようです。
登録が済んだら、マーチャントID、API_KEY, API_SECRETが払い出されます。
2. SDKインストール
$ composer require paypayopa/php-sdk
3. コード
index.php
他にも設定項目がありますが、一旦これだけにしてます。
<?php require_once './vendor/autoload.php'; $orderItems = new \Kojirock5260\PayPayExample\OrderItems(); $orderItems->add('商品A', 1, 500); $orderItems->add('商品B', 3, 1000); $orderItems->add('商品C', 2, 900); $config = new \Kojirock5260\PayPayExample\Config([ 'merchantId' => 'XXXXXXXXXXXXXXX', 'apiKey' => 'YYYYYYYYYYYYYY', 'apiSecret' => 'ZZZZZZZZZZZZZZZZZ', 'redirectUrl' => 'https://kojirooooocks.hatenablog.com/', 'isAuthorization' => false, 'production' => false, ]); $paypay = new \Kojirock5260\PayPayExample\PayPayAdapter($config); $result = $paypay->createCode($orderItems, '商品A-商品B-商品C'); var_dump($result);die();
Config.php
設定値を管理するクラスです。
<?php namespace Kojirock5260\PayPayExample; class Config { private array $parameters; /** * Config constructor. * @param array $parameters */ public function __construct(array $parameters) { if (!$this->isValid($parameters)) { throw new \InvalidArgumentException('required key invalid'); } $this->parameters = $parameters; } /** * @return string */ public function merchantId(): string { return $this->parameters['merchantId']; } /** * @return string */ public function apiKey(): string { return $this->parameters['apiKey']; } /** * @return string */ public function apiSecret(): string { return $this->parameters['apiSecret']; } /** * @return string */ public function redirectUrl(): string { return $this->parameters['redirectUrl']; } /** * @return bool */ public function isAuthorization(): bool { return $this->parameters['isAuthorization']; } /** * @return bool */ public function isProduction(): bool { return $this->parameters['production']; } /** * @param array $parameters * @return bool */ private function isValid(array $parameters): bool { $keys = [ 'merchantId', 'apiKey', 'apiSecret', 'redirectUrl', 'isAuthorization', 'production', ]; foreach ($keys as $key) { if (!isset($parameters[$key])) { return false; } } return true; } }
OrderItems.php
購入対象の商品のデータを作成するクラスです。
<?php namespace Kojirock5260\PayPayExample; use PayPay\OpenPaymentAPI\Models\OrderItem; class OrderItems { /** @var OrderItem[] */ private array $items; /** * @return array|OrderItem[] */ public function items(): array { return $this->items; } /** * @param string $name * @param int $quantity * @param int $amount * @throws \Exception */ public function add(string $name, int $quantity, int $amount): void { $this->items[] = (new OrderItem()) ->setName($name) ->setQuantity($quantity) ->setUnitPrice(['amount' => $amount, 'currency' => 'JPY']); } /** * @return int */ public function total(): int { $result = 0; foreach ($this->items as $item) { $result += $item->getQuantity() * $item->getUnitPrice()['amount']; } return $result; } }
PayPayAdapter.php
PayPayAPIを実行するクラスです。
<?php namespace Kojirock5260\PayPayExample; use PayPay\OpenPaymentAPI\Client; use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload; class PayPayAdapter { private Config $config; /** * PayPayAdapter constructor. * @param Config $config */ public function __construct(Config $config) { $this->config = $config; } /** * @param OrderItems $orderItems * @param string $paymentId * @return mixed * @throws \Exception */ public function createCode(OrderItems $orderItems, string $paymentId) { $client = new Client([ 'API_KEY' => $this->config->apiKey(), 'API_SECRET' => $this->config->apiSecret(), 'MERCHANT_ID' => $this->config->merchantId(), ], $this->config->isProduction()); $payload = new CreateQrCodePayload(); $payload->setOrderItems($orderItems->items()); $payload->setMerchantPaymentId($paymentId); $payload->setCodeType("ORDER_QR"); $payload->setAmount(['amount' => $orderItems->total(), 'currency' => 'JPY']); $payload->setRedirectType('WEB_LINK'); $payload->setIsAuthorization($this->config->isAuthorization()); $payload->setRedirectUrl($this->config->redirectUrl()); return $client->code->createQRCode($payload); } }
4. 実行
ターミナルで実行してみると、var_dump
している箇所でいろんなデータがありますが、以下のようなデータが存在します。
$ php index.php 'data' => array(11) { ... 'url' => string(60) "https://qr-stg.sandbox.paypay.ne.jp/28180104LsJmN9v8wGTniY3O" ...
このURLが実際に作成されたQRコードを表示してくれるページです。
この作成されたQRの有効期限は5分間です。
ちなみに有効期限もデータとして返却されてます。
このQRを読み込むには、PayPayのテストアカウントが必要なのですが、現在はテストアカウントが公開されていないため、実際には読み込めません。
終わりに
コレ以上進められなかったのが残念でした...
テストアカウントの情報がアップされたらまた踏み込んで試そうと思います。
今までのコードは githubにあげておきました。
現場からは以上です。