se468/kakaopay-php

PHP 对 Kakaopay REST API 的封装

v0.0.3 2018-04-09 01:28 UTC

This package is not auto-updated.

Last update: 2024-09-26 06:57:47 UTC


README

Latest Stable Version Total Downloads License

Kakaopay REST API 封装器。Kakaopay 提供了一种方便的韩国网络交易方式,因为它不需要单独的支付网关(PG)。交易仅通过用户的 Kakaotalk 账户完成。

官方 Kakaopay REST API 文档:[此处](https://developers.kakao.com/docs/restapi/kakaopay-api)。

示例实现:[此处](https://github.com/se468/kakaopay-laravel-example)。

演示:[此处](http://package-demos.seyongcho.com/kakaopay)。

安装

通过 Composer

composer require se468/kakaopay-php

使用方法

单次支付流程

支付准备

用于请求用户进行交易。用户将收到确认交易的短信。

API 端点

POST /v1/payment/ready HTTP/1.1

使用示例

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->ready([
    'cid' => 'TC0ONETIME',
    'partner_order_id' => 'partner_order_id',
    'partner_user_id' => 'partner_user_id',
    'item_name' => '초코파이',
    'quantity' => '1',
    'total_amount' => '2200',
    'vat_amount' => '200',
    'tax_free_amount' => '0',
    'approval_url' => 'http://package-development.valet/kakaopay/success',
    'cancel_url' => 'http://package-development.valet/kakaopay/fail',
    'fail_url' => 'http://package-development.valet/kakaopay/cancel'
]);

以下是过程的说明

  • 来自 payment/ready 的结果将包含交易 ID,或 tid$result->tid),您可以安全地将其存储在会话中。

  • tid 存储在会话中,并重定向到 $result->next_redirect_pc_url。客户将被提示输入他们的 Kakaopay 手机号码和密码。

  • 客户填写表格后,他们将在 Kakaotalk 中收到确认交易的短信。屏幕将重定向到您提供的 approval_url

  • 然后,您可以使用会话中存储的 tid 调用 payment/approve 并处理支付。

支付批准

使用来自支付准备的给定 tid 批准交易以完成。

POST /v1/payment/approve HTTP/1.1

示例

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));
$result = $payment->approve([
    'cid' => 'TC0ONETIME',
    'tid' => 'T1234567890123456789', //tid received from result from 'ready'
    'partner_order_id' => 'partner_order_id',
    'partner_user_id' => 'partner_user_id',
    'pg_token' => $input['pg_token']
]);
  • 您可以在获得此处的结果后删除 tid,并将包含交易信息的 $result 存储在您的数据库中,并将其显示给客户。

订阅过程

支付准备

示例支付准备用于订阅

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->ready([
    'cid' => 'TCSUBSCRIP',
    'partner_order_id' => 'partner_order_id',
    'partner_user_id' => 'partner_user_id',
    'item_name' => '음악정기결제',
    'quantity' => '1',
    'total_amount' => '9900',
    'vat_amount' => '900',
    'tax_free_amount' => '0',
    'approval_url' => 'http://package-development.valet/kakaopay/subscription/success',
    'cancel_url' => 'http://package-development.valet/kakaopay/subscription/fail',
    'fail_url' => 'http://package-development.valet/kakaopay/subscription/cancel'
]);

注意,这里与单次支付不同的只有 cid 参数。

支付批准

请参阅单次支付的文档。过程完全相同。

从第二次支付开始的订阅

可以进行中的订阅费用调用如下

POST /v1/payment/subscription HTTP/1.1

示例

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->subscription([
    'cid' => 'TCSUBSCRIP', // cid for testing
    'sid' => 'S1234567890987654321',
    'partner_order_id' => 'subscription_order_id_1',
    'partner_user_id' => 'subscription_user_id_1',
    'item_name' => '음악정기결제',
    'quantity' => '1',
    'total_amount' => '9900',
    'vat_amount' => '900',
    'tax_free_amount' => '0',
]);

取消支付

POST /v1/payment/cancel HTTP/1.1
$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->cancel([
    'cid' => 'TC0ONETIME', // cid for testing
    'tid' => 'T1234567890123456789',
    'cancel_amount' => '2200',
    'cancel_tax_free_amount' => '0',
    'cancel_vat_amount' => '200',
    'cancel_available_amount' => '4000',
]);

订单检查

GET/POST /v1/payment/order HTTP/1.1

示例

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->order([
    'cid' => 'TC0ONETIME', // cid for testing
    'tid' => 'T1234567890123456789',
]);

检查订阅信息

POST /v1/payment/manage/subscription/status HTTP/1.1

示例

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->order([
    'cid' => 'TCSUBSCRIP', // cid for testing
    'tid' => 'S1234567890987654321',
]);

停用订阅

POST /v1/payment/manage/subscription/inactive HTTP/1.1

示例

$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));

$result = $payment->inactive([
    'cid' => 'TCSUBSCRIP', // cid for testing
    'sid' => 'S1234567890987654321',
]);