paypayopa / php-sdk
PayPay开放支付API的PHP SDK
2.0.7
2022-06-22 05:32 UTC
Requires
- php: >=7.0.0
- ext-json: *
- firebase/php-jwt: ^5.5 || ^6.0
- guzzlehttp/guzzle: ^6.0 || ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16 || ^3.0
- php-coveralls/php-coveralls: ^2.2
- phpstan/phpstan: ^0.12.33 || ^1.0.0
- phpunit/phpunit: ^9
- dev-master
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.9.2
- 0.9.1
- 0.9.0
- 0.8.0
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.0
- 0.5.0
- 0.4.0
- 0.3.1
- 0.3.0
- dev-dependabot/composer/friendsofphp/php-cs-fixer-3.26.1
- dev-dependabot/composer/phpstan/phpstan-1.10.33
- dev-dependabot/composer/guzzlehttp/guzzle-7.8.0
- dev-dependabot/composer/phpunit/phpunit-9.6.11
- dev-dependabot/composer/php-coveralls/php-coveralls-2.6.0
- dev-dependabot/composer/firebase/php-jwt-6.8.1
- dev-dependabot/composer/guzzlehttp/psr7-2.5.0
- dev-curtisfennerpaypay-cleanup-final-build
- dev-curtisfennerpaypay/fix-cc-secrets
This package is auto-updated.
Last update: 2024-09-09 00:48:30 UTC
README
PHP类用于与PayPay API交互。这是集成PayPay支付服务最快的方式,主要用于希望以程序方式与PayPay API进行交互的商家。使用PayPay的OPA SDK,您可以构建一个定制的支付结账流程,以满足您独特的商业需求和品牌指南。
集成PayPay的开放支付API (OPA)
先决条件
在集成SDK之前,请通过此清单进行检查
- 了解支付流程
- 注册PayPay开发者/商家账户
- 从开发者面板生成API密钥。使用沙箱API密钥进行集成测试
最低软件要求
要使用Paypay OPA PHP SDK,您需要
- 服务器计算环境(本地机器、Docker容器、VPS或专用服务器、云基础设施等)
- 一个Web服务器来提供您的API响应和HTML文档。
- PHP 7.x解释器来执行您的后端代码。
- Composer来管理您的依赖项(推荐)或从本存储库的发布版本手动维护您的依赖项。
HMAC签名验证
签名验证是确保回调由PayPay发送并且从真实来源接收付款的强制性步骤。
生成签名
在成功支付后返回给您的PayPay签名可以通过您的系统生成,并按以下方式进行验证
- 首先使用MD5算法对正文和内容类型进行哈希处理
-
- 注意:如果没有请求正文,例如,HTTP GET方法的情况,不需要生成MD5。相反,哈希值设置为“空”。
- authHeader的值通过HttpHeader.AUTHORIZATION传递。authHeader将被解码回添加到HTTP请求对象中的数据,并基于系统中可用的api-key数据,我们将重新创建SHA256("key", requestParams),这给出macData。此macData与header中传递的值进行验证。
有关逐步解释,请参阅此处
Composer
要使用Composer安装绑定,请在您的shell中运行以下命令
composer require paypayopa/php-sdk
入门
您需要使用以下内容设置密钥和秘密
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' ]);
[注意:] 请求有效负载类中的setter链式调用
以下示例中,为了您的理解,方法一个接一个地编写。但是,您可以通过链式调用多个setter函数来节省一些键位,如下所示
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'];
获取用户授权URL
/* .....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 */
从令牌解码用户授权
PayPay授权系统将通过带有JWT令牌的responseToken
URL参数将用户重定向回您的网站。
/* .....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