paypayopa/php-sdk

PayPay开放支付API的PHP SDK


README

License Packagist Version Build Status Coverage Status Maintainability Black Duck Security Risk FOSSA Status Quality Gate Status Packagist Downloads Codacy Badge BCH compliance

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

许可证

FOSSA Status