Wrapper for Kakaopay REST API. Kakaopay provides convenient way to do internet transaction in Korea because it doesn't need a separate Payment Gateway (PG). The transaction is done only with the user's Kakaotalk account.
Official Kakaopay REST API documentation: here.
Example Implementation: here.
Demo: here.
Via Composer:
composer require se468/kakaopay-php
Used for requesting the user for the transaction. User will receive a message to confirm the transaction.
API Endpoint:
POST /v1/payment/ready HTTP/1.1
Usage Example:
$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'
]);Here's the explanation of the process:
-
Result from
payment/readywill have transation ID, ortid($result->tid), which you can safely store in your session. -
Store the
tidin session and redirect to$result->next_redirect_pc_url. Customer will be prompted to enter their Kakaopay phone number and password. -
After the customer fills in the form, they will receive a message in their Kakaotalk to approve the transaction. The screen will then redirect to the
approval_urlthat you've provided. -
You can then call
payment/approveusing thetidstored in the session and it will process the payments.
With the given tid from payment ready, approve the transaction to finalize.
POST /v1/payment/approve HTTP/1.1
Example:
$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']
]);- You can delete the
tidafter you get the result from here, and store the$resultin your DB, which contains the information about the transaction and show it back to the customer.
Example Payment Ready for subscription
$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'
]);Note that only thing different here from single payment is the
cidparameter.
Check the documentation for single payment. It is exactly same process.
On going subscription fees can be called like the following:
POST /v1/payment/subscription HTTP/1.1
Example:
$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
Example:
$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
Example:
$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
Example:
$payment = new \se468\Kakaopay\Payment();
\se468\Kakaopay\Kakaopay::setAdminKey(env('KAKAOPAY_ADMIN_KEY'));
$result = $payment->inactive([
'cid' => 'TCSUBSCRIP', // cid for testing
'sid' => 'S1234567890987654321',
]);