dev-main 2023-10-18 11:58 UTC

This package is auto-updated.

Last update: 2024-09-18 14:20:51 UTC


README

compatible

安装

composer require enot-payment/enot

使用

为了工作需要获取

  • "shopId" - 收银机标识符
  • "shopSecretKey" - 收银机密钥(在个人控制台中生成,在“收银机”->“集成”部分获得)
  • "userId" - 用户标识符
  • "userSecretKey" - 用户密钥 "userSecretKey"(在个人控制台中生成,在“配置文件设置”->“集成”部分获得)
  • "webhookPaymentKey" - 计算WebHook支付哈希的秘密密钥(收银机额外密钥)
  • "webhookPayoffKey" - 计算WebHook结算哈希的秘密密钥(用户额外密钥)

初始化

use Enot\Api\Http\EnotFacade;

$facade = new EnotFacade(
        $shopId,
        $shopSecretKey,
        $userId,
        $userSecretKey,
        $webhookPaymentKey,
        $webhookPayoffKey
);

获取可用的支付方法和费率

$response = $facade->getAvailablePaymentTariffs();

✅ 成功响应将返回包含“tariffs”参数的对象 PaymentAvailableTariffsDto,该参数是 PaymentTariffParamsResponseDto 对象的数组,包含以下参数:

必填项

  • "percent" - 总佣金百分比
  • "fix" - 固定佣金
  • "service" - 支付方法代码
  • "currency" - 货币
  • "status" - 费率状态(enabled 或 disabled)

可选项

  • "minSum" - 最小支付金额
  • "maxSum" - 最大支付金额
  • "shopPercent" - 从收银机收取的佣金百分比
  • "userPercent" - 从客户收取的佣金百分比
  • "serviceLabel" - 支付方法名称

❌ 如果响应失败,将抛出包含错误描述的 PaymentException 类型异常。

创建支付

createInvoice() 方法接受 InvoiceCreateRequestDto 参数。

InvoiceCreateRequestDto 接受以下参数

必填项

  • "amount" - 发票金额
  • "orderId" - 您系统中的订单标识符

可选项

  • "currency" - 支付货币(RUB, USD, EUR, UAH)
  • "hookUrl" - 发送 webhook 的 URL
  • "customFields" - 在支付后返回的通知中的字符串,格式为 JSON 字符串
  • "comment" - 支付目的(支付时显示给客户)
  • "failUrl" - 支付错误时用户将被重定向的 URL
  • "successUrl" - 支付成功时用户将被重定向的 URL
  • "expire" - 发票的生命周期(分钟)
  • "includeService" - 在账单页面上可用的支付方法
  • "excludeService" - 在账单页面上不可用的支付方法
use Enot\Api\Dto\Request\Payment\InvoiceCreateRequestDto;

$invoiceCreateRequestDto = new InvoiceCreateRequestDto(
    50.05,
    'orderId',
    'RUB',
    'https://exaple.com',
    '{\"order\": \"74056\"}',
    'comment',
    'https://exaple.com/fail',
    'https://exaple.com/success',
    300.05,
    [
        'card'
    ],
    [
        'qiwi'
    ]
);

$response = $facade->createInvoice($invoiceCreateRequestDto);

✅ 成功响应将返回包含以下参数的对象 InvoiceCreateResponseDto:

必填项

  • "id" - 我们系统中的操作 ID
  • "amount" - 发票金额(以卢布计)
  • "currency" - 支付货币(RUB, USD, EUR, UAH)
  • "url" - 支付表单的链接
  • "expired" - 发票到期时间(格式为 "Y-m-d H:i:s")

❌ 如果响应失败,将抛出包含错误描述的 PaymentException 类型异常。

获取支付信息

getInvoiceInfo() 方法接受 InvoiceInfoRequestDto 参数。

InvoiceInfoRequestDto 接受以下参数

必填项

  • "invoiceId" - 交易 ID

可选项

  • "orderId" - 您系统中的唯一支付标识符
use Enot\Api\Dto\Request\Payment\InvoiceInfoRequestDto;

$invoiceInfoRequestDto = new InvoiceInfoRequestDto(
    '3fa85f64-5717-4562-b3fc-2c963f66afa6',
    'orderId'
);

$response = $facade->getInvoiceInfo($invoiceInfoRequestDto);

✅ 成功响应将返回包含以下参数的对象 InvoiceInfoResponseDto:

必填项

  • "invoiceId" - 我们系统中的操作 ID
  • "orderId" - 您系统中的操作 ID
  • "shopId" - 收银机 ID
  • "status" - 交易状态
  • "invoiceAmount" - 支付金额
  • "currency" - 支付货币(RUB, USD, EUR, UAH)
  • "createdAt" - 发票创建时间
  • "expiredAt" - 生命周期结束时间

可选项

  • "credited" - 记入余额的金额
  • "payService" - 支付方法
  • "payerDetails" - 付款人详情
  • "commissionAmount" - 总佣金(以卢布计)
  • "commissionPercent" - 总佣金百分比
  • "shopCommissionAmount" - 从收银机收取的佣金金额
  • "userCommissionAmount" - 向客户收取的佣金金额
  • "userCommissionPercent" - 向客户收取的佣金百分比
  • "customField" - 在创建支付时传递的字符串
  • "paidAt" - 支付时间

❌ 如果响应失败,将抛出包含错误描述的 InvoiceException 类型异常。

检查支付 WebHook 的签名

我们的系统具有支付状态变更通知功能。

您需要添加必要的URL,以便向收银台集成页面发送http通知。

checkPaymentWebhookSignature()方法用于检查传入WebHook的签名,接受参数

必填项

  • "webhookRequest" - 请求体,json格式
  • "signature" - 确认有效性的签名(通过请求头中的'x-api-sha256-signature'传递)

获取传入请求数据的示例代码

$webhookRequest = file_get_contents('php://input');
$headerParams = getallheaders();

if(!isset($signature = $headerParams['x-api-sha256-signature'])) {
    throw new Exception();
}

$facade->checkPaymentWebhookSignature($webhookRequest, $signature);

支付传入Webhook请求的示例

{
"invoice_id":"a750dced-0f08-384a-a441-d0a4dba0cae8",
"status":"success",
"amount":"100.00",
"currency":"RUB",
"order_id":"89f2634c-afa9-3b16-bbde-e4a59ee94639",
"custom_fields":{"user":1},
"type":1,
"pay_time":"2023-04-06 15:53:28",
"pay_service":"card",
"payer_details":"553691******1279",
"code": 1,
"credited":"95.50"
}

✅ 签名检查成功时,返回"True"

❌ 签名检查失败时,返回- "False"

获取用户余额

$response = $facade->getUserBalance();

✅ 成功响应将返回包含以下参数的对象UserBalanceResponseDto

必填项

  • "balance" - 总余额
  • "activeBalance" - 可用余额
  • "freezeBalance" - 冻结余额

❌ 失败响应将抛出类型为UserBalanceException的异常,并包含错误描述。

创建提款申请

createPayoff()方法接受CreatePayoffRequestDto。

CreatePayoffRequestDto接受以下参数

必填项

  • "service" - 提款服务(完整代码)
  • "walletTo" - 提款卡号/电话/钱包号码
  • "amount" - 提款金额

可选项

  • "orderId" - 您系统中的唯一支付标识符
  • "comment" - 备注
  • "hookUrl" - 用于发送提款申请通知的webhook URL
  • "subtract" - 从谁扣除手续费,余额或金额。默认从金额中扣除。
use Enot\Api\Dto\Request\Payoff\CreatePayoffRequestDto;

$createPayoffRequestDto = new CreatePayoffRequestDto(
    'card',
    '1234567890123456'
    100.05,
    'orderId',
    'comment',
    'https://exaple.com',
    1
);

✅ 成功响应将返回包含以下参数的对象CreatePayoffResponseDto

必填项

  • "payoffId" - 提款ID
  • "amountWithdrawRub" - 从余额中扣除的金额(以卢布为单位)
  • "balance" - 扣除提款金额后的余额

❌ 失败响应将抛出类型为PayoffException的异常,并包含错误描述。

获取提款信息

getPayoffInfo()方法接受PayoffInfoRequestDto。

PayoffInfoRequestDto接受以下参数

必填项

  • "id" - 提款ID

可选项

  • "orderId" - 您系统中的唯一支付标识符
use Enot\Api\Dto\Request\Payoff\PayoffInfoRequestDto;

$payoffInfoRequestDto = new PayoffInfoRequestDto(
    '3fa85f64-5717-4562-b3fc-2c963f66afa6',
    'orderId'
);

✅ 成功响应将返回包含以下参数的对象PayoffInfoResponseDto

必填项

  • "payoffId" - 提款ID
  • "status" - 提款状态
  • "orderId" - 您系统中的唯一支付标识符
  • "service" - 提款服务(完整代码)
  • "type" - 提款类型
  • "subtract" - 从谁扣除手续费,余额或金额
  • "amount" - 提款金额(以卢布为单位)
  • "amountWithdrawRub" - 从余额中扣除的金额(以卢布为单位)
  • "commissionRub" - 手续费(以卢布为单位)
  • "receiveCurrency" - 提款货币
  • "amountReceive" - 提款金额(以货币为单位)
  • "createdAt" - 提款创建时间

可选项

  • "wallet" - 提款卡号/电话/钱包号码
  • "comment" - 创建提款时指定的备注
  • "paidAt" - 提款时间
  • "errorMessage" - 拒绝原因

❌ 失败响应将抛出类型为PayoffException的异常,并包含错误描述。

检查提款WebHook签名

我们的系统具有关于提款状态变更的通知功能。

您需要在批量提款页面上添加必要的URL,以便发送通知。您可以将链接添加到您的任何网站上。

仅向使用API创建的交易发送通知。如果提款是通过个人控制台请求的,则不会发送通知。状态变更后,您将通过您的链接收到通知。

checkPayoffWebhookSignature()方法用于检查传入WebHook的签名,接受参数

必填项

  • "webhookRequest" - 请求体,json格式
  • "signature" - 确认有效性的签名(通过请求头中的'x-api-sha256-signature'传递)

获取传入请求数据的示例代码

$webhookRequest = file_get_contents('php://input');
$headerParams = getallheaders();

if(!isset($signature = $headerParams['x-api-sha256-signature'])) {
    throw new Exception();
}

$facade->checkPaymentWebhookSignature($webhookRequest, $signature);

提款传入Webhook请求的示例

{
"amount": "763.46",
"status": "success",
"wallet": "5184559049166517",
"service": "card",
"order_id": "d1e747a4-8258-3e43-b600-7f320fbfb878",
"payoff_id": "306291d6-a432-47bf-8e4c-0744a7bad45a",
"commission": "20.66"
}

✅ 签名检查成功时,返回"True"

❌ 签名检查失败时,返回- "False"