PHP Class for interacting with the Paypay API This is the quickest way to integrate PayPay payment services, primarily meant for merchants who wish to perform interactions with the Paypay API programatically. With PayPay's OPA SDK, you can build a custom payment checkout process to suit your unique business needs and branding guidelines.
Before integrating with the SDK, run through this checklist:
To use the Paypay OPA PHP SDK you need:
Signature verification is a mandatory step to ensure that the callback is sent by PayPay and the payment is received from an authentic source.
The PayPay signature, returned to you on successful payment, can be generated by your system and verified as follows:
For the complete step-by-step explanation refer the link here
To install the bindings via Composer, run the following command in your shell :
composer require paypayopa/php-sdk
You need to setup your key and secret using the following:
include('PATH_TO_SDK_FOLDER/Client.php');
$client = new Client([
'API_KEY' => 'YOUR_API_KEY',
'API_SECRET'=>'YOUR_API_SECRET',
'MERCHANT_ID'=>'YOUR_MERCHANT_ID'
]);
In the examples below methods are written one after the other for the sake of your understanding. However you can save a few keystrokes by chaining multiple setter functions like so:
use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload;
$cqcp = new CreateQrCodePayload();
$cqcp->setMerchantPaymentId('Test123')->setRequestedAt()->setCodeType();
use PayPay\OpenPaymentAPI\Models\CreateQrCodePayload;
use PayPay\OpenPaymentAPI\Models\OrderItem;
/*
.....initialize SDK
*/
// setup payment object
$CQCPayload = new CreateQrCodePayload();
// Set merchant pay identifier
$CQCPayload->setMerchantPaymentId("YOUR_TRANSACTION_ID");
// Log time of request
$CQCPayload->setRequestedAt();
// Indicate you want QR Code
$CQCPayload->setCodeType("ORDER_QR");
// Provide order details for invoicing
$OrderItems = [];
$OrderItems[] = (new OrderItem())
->setName('Cake')
->setQuantity(1)
->setUnitPrice('amount' => 20, 'currency' => 'JPY']);
$CQCPayload->setOrderItems($OrderItems);
// Save Cart totals
$amount = [
"amount" => 1,
"currency" => "JPY"
];
$CQCPayload->setAmount($amount);
// Configure redirects
$CQCPayload->setRedirectType('WEB_LINK');
$CQCPayload->setRedirectUrl($_SERVER['SERVER_NAME']);
// Get data for QR code
$response = $client->code->createQRCode($CQCPayload);
$data = $response['data'];
For a list of params refer to the API guide :
https://www.paypay.ne.jp/opa/doc/v1.0/dynamicqrcode#operation/createQRCode
/*
....initialize SDK
*/
$response = $client->code->deleteQRCode('ID_OF_CODE');
$data = $response['data'];
/*
.....initialize SDK
*/
$response = $client->code->getPaymentDetails('MERCHANT_PAYMENT_ID');
$data = $response['data'];
/*
.....initialize SDK
*/
$response = $client->code->cancelPayment('MERCHANT_PAYMENT_ID');
$data = $response['data'];
/*
.....initialize SDK
*/
use PayPay\OpenPaymentAPI\Models\AccountLinkPayload;
$payload = new AccountLinkPayload();
$payload
->setScopes(["direct_debit"])
->setRedirectUrl("https://merchant.domain/test/callback")
->setReferenceId(uniqid("TEST123"));
$resp = $client->user->createAccountLinkQrCode($payload);
$url=$resp['data']['linkQRCodeURL'];
echo $url.' ';
$nonce = $payload->getNonce();
/*
.... store nonce for later integrity checks in session or DB
*/
The PayPay authorization system will redirect user back to your site with a JWT token in the responseToken
URL parameter.
/*
.....initialize SDK
*/
$token = $_GET['responseToken'];
$authorization = $client->user->decodeUserAuth($token);
/*
...fetch stored nonce for integrity check
*/
$userAuthorizationId = false;
if ($authorization['result']==='succeeded' && $authorization['nonce']===$fetchedNonce){
$userAuthorizationId = $authoriresponseTokenzation['userAuthorizationId']
}
use PayPay\OpenPaymentAPI\Models\CapturePaymentAuthPayload;
/*
.....initialize SDK
*/
// setup payment object
$CAPayload = new CapturePaymentAuthPayload();
// Use the `merchantPaymentId` from a successful invocation of the create payment authorization API.
$CAPayload->setMerchantPaymentId("YOUR_TRANSACTION_ID");
$amount = [
"amount" => 1,
"currency" => "JPY"
];
$CAPayload->setAmount($amount);
// Set a unique value to identify this capture.
$CAPayload->setMerchantCaptureId("MERCHANT_CAPTURE_ID")
$CAPayload->setRequestedAt();
$CAPayload->setOrderDescription("ORDER_DESCRIPTION")
$response = $client->payment->capturePaymentAuth($CAPayload);
$data = $response['data'];
For a list of params refer to the API guide :
https://www.paypay.ne.jp/opa/doc/v1.0/dynamicqrcode#operation/capturePaymentAuth
/*
.....initialize SDK
*/
$response = $client->payments->getPaymentDetails('MERCHANT_PAYMENT_ID');
$data = $response['data'];
use PayPay\OpenPaymentAPI\Models\RevertAuthPayload;
/*
.....initialize SDK
*/
// setup payment object
$RAPayload = new RevertAuthPayload();
$RAPayload->setMerchantRevertId("UNIQUE_REVERT_ID");
$RAPayload->setPaymentId("MERCHANT_PAYMENT_ID");
$RAPayload->setRequestedAt();
$RAPayload->setReason("REASON_FOR_REFUND");
$response = $client->payment->revertAuth($RAPayload)
For a list of params refer to the API guide :
https://www.paypay.ne.jp/opa/doc/v1.0/dynamicqrcode#operation/revertAuth
use PayPay\OpenPaymentAPI\Models\RefundPaymentPayload;
/*
.....initialize SDK
*/
// setup payment object
$RPPayload = new RefundPaymentPayload();
$RPPayload->setMerchantRefundId('MERCHANT_REFUND_ID');
$RPPayload->setMerchantPaymentId('MERCHANT_PAYMENT_ID');
$amount = [
"amount" => 1,
"currency" => "JPY"
];
$RPPayload->setAmount($amount);
$RPPayload->setRequestedAt();
$RPPayload->setReason("Refunds test");
$response = $client->refund->refundPayment($RPPayload);
$data = $response['data'];
For a list of params refer to the API guide :
https://www.paypay.ne.jp/opa/doc/v1.0/dynamicqrcode#operation/refundPayment
/*
.....initialize SDK
*/
$response=$client->refund->getRefundDetails('UNIQUE_REFUND_ID');
$data = $response['data'];
For a list of params refer to the API guide :
https://www.paypay.ne.jp/opa/doc/v1.0/dynamicqrcode#operation/getRefundDetails