๋ถํธํ์ด ๊ณต์ PHP ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค (์๋ฒ์ฌ์ด๋ ์ฉ)
PHP ์ธ์ด๋ก ์์ฑ๋ ์ดํ๋ฆฌ์ผ์ด์ , ํ๋ ์์ํฌ ๋ฑ์์ ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
- PG ๊ฒฐ์ ์ฐฝ ์ฐ๋์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ํ๋ฉ๋๋ค. (Javascript, Android, iOS, React Native, Flutter ๋ฑ)
- ๊ฒฐ์ ๊ฒ์ฆ ๋ฐ ์ทจ์, ๋น๋งํค ๋ฐ๊ธ, ๋ณธ์ธ์ธ์ฆ ๋ฑ์ ์ํ์ ์๋ฒ์ฌ์ด๋์์ ์งํ๋ฉ๋๋ค. (Java, PHP, Python, Ruby, Node.js, Go, ASP.NET ๋ฑ)
- ์ฌ์ฉํ๊ธฐ
composer require bootpay/server-php- PHP >= 5.3.0
- ext-json
์์ ์ ํ
์คํธ๋ ๊ฐ SDK ๋ฃจํธ์ .env ํ์ผ์ ์ฐ์ ์ฝ์ต๋๋ค. ๋จผ์ .env.example์ ๋ณต์ฌํ ๋ค ํ์ํ ํค๋ง ๋ณ๊ฒฝํ์ธ์. .env๋ gitignore ์ฒ๋ฆฌ๋์ด ์ปค๋ฐ๋์ง ์์ต๋๋ค.
cp .env.example .env
# BOOTPAY_ENV=production ๋๋ development์ฃผ์ ๋ณ์:
BOOTPAY_ENV=production
BOOTPAY_PG_CLIENT_KEY_PROD=...
BOOTPAY_PG_SECRET_KEY_PROD=...
BOOTPAY_PG_CLIENT_KEY_DEV=...
BOOTPAY_PG_SECRET_KEY_DEV=...
BOOTPAY_COMMERCE_CLIENT_KEY_PROD=...
BOOTPAY_COMMERCE_SECRET_KEY_PROD=...
BOOTPAY_COMMERCE_CLIENT_KEY_DEV=...
BOOTPAY_COMMERCE_SECRET_KEY_DEV=...๋ณ์๊ฐ ์์ผ๋ฉด SDK ํ ์คํธ์ฉ ๊ธฐ๋ณธ๊ฐ(NodeJS ๊ธฐ์ค ck/sk)์ผ๋ก fallback ํฉ๋๋ค.
<?php
require_once 'vendor/autoload.php';
use Bootpay\ServerPhp\BootpayApi;
BootpayApi::setClientKeyConfiguration(
getenv('BOOTPAY_PG_CLIENT_KEY_PROD'),
getenv('BOOTPAY_PG_SECRET_KEY_PROD')
);
// Legacy application_id/private_key ๋ฐฉ์์ setConfiguration()์ผ๋ก ๊ณ์ ์ง์๋ฉ๋๋ค.
$response = BootpayApi::getAccessToken();
var_dump($response);ํจ์ ๋จ์์ ์ํ ์ฝ๋๋ tests/pg ํด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ถํธํ์ด์ ์๋ฒ๊ฐ ํต์ ์ ํ๊ธฐ ์ํด์๋ ๋ถํธํ์ด ์๋ฒ๋ก๋ถํฐ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค. ๋ฐ๊ธ๋ ํ ํฐ์ 30๋ถ๊ฐ ์ ํจํ๋ฉฐ, ์ต์ด ๋ฐ๊ธ์ผ๋ก๋ถํฐ 30๋ถ์ด ์ง๋ ๊ฒฝ์ฐ ํ ํฐ ๋ฐ๊ธ ํจ์๋ฅผ ์ฌํธ์ถ ํด์ฃผ์ ์ผ ํฉ๋๋ค.
<?php
require_once 'vendor/autoload.php';
use Bootpay\ServerPhp\BootpayApi;
BootpayApi::setClientKeyConfiguration(
getenv('BOOTPAY_PG_CLIENT_KEY_PROD'),
getenv('BOOTPAY_PG_SECRET_KEY_PROD')
);
$response = BootpayApi::getAccessToken();
var_dump($response);๊ฒฐ์ ์ฐฝ ๋ฐ ์ ๊ธฐ๊ฒฐ์ ์์ ์น์ธ/์ทจ์๋ ๊ฒฐ์ ๊ฑด์ ๋ํ์ฌ ์ฌ๋ฐ๋ฅธ ๊ฒฐ์ ๊ฑด์ธ์ง ์๋ฒ๊ฐ ํต์ ์ผ๋ก ๊ฒฐ์ ๊ฒ์ฆ์ ํฉ๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::receiptPayment('receipt_id_here');
var_dump($response);
}price๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ ์ก์ทจ์ ๋ฉ๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::cancelPayment(array(
'receipt_id' => 'receipt_id_here',
'cancel_price' => 1000, // ๋ถ๋ถ์ทจ์ ๊ธ์ก (์์ผ๋ฉด ์ ์ก์ทจ์)
'cancel_tax_free' => 0,
'cancel_username' => '๊ด๋ฆฌ์',
'cancel_message' => 'ํ
์คํธ ๊ฒฐ์ ์ทจ์'
));
var_dump($response);
}REST API ๋ฐฉ์์ผ๋ก ๊ณ ๊ฐ์ผ๋ก๋ถํฐ ์นด๋ ์ ๋ณด๋ฅผ ์ ๋ฌํ์ฌ, PG์ฌ์๊ฒ ๋น๋งํค๋ฅผ ๋ฐ๊ธ๋ฐ์ ์ ์์ต๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::getSubscribeBillingKey(
'nicepay', // PG์ฌ
'subscription_' . time(), // subscription_id
'30์ผ ์ ๊ธฐ๊ถ ๊ฒฐ์ ', // order_name
'5570********1074', // card_no
'12', // card_pw (์ 2์๋ฆฌ)
'25', // card_expire_year
'12', // card_expire_month
'901012' // card_identity_no (์๋
์์ผ ๋๋ ์ฌ์
์๋ฒํธ)
);
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::requestSubscribeAutomaticTransferBillingKey(array(
'pg' => 'nicepay',
'subscription_id' => 'subscription_' . time(),
'order_name' => '์๋์ด์ฒด ๋ฑ๋ก',
'auth_type' => 'ARS',
'username' => 'ํ๊ธธ๋',
'bank_name' => '๊ตญ๋ฏผ์ํ',
'bank_account' => '12345678901234',
'identity_no' => '901012'
));
var_dump($response);
}๋ฐ๊ธ๋ ๋น๋งํค๋ก ์ํ๋ ์์ ์ ๊ฒฐ์ ์น์ธ ์์ฒญ์ ํฉ๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::requestSubscribeCardPayment(array(
'billing_key' => 'billing_key_here',
'order_name' => '์ ๊ธฐ๊ฒฐ์ ํ
์คํธ',
'price' => 1000,
'order_id' => 'order_' . time()
));
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::subscribePaymentReserve(array(
'billing_key' => 'billing_key_here',
'order_name' => '์์ฝ๊ฒฐ์ ํ
์คํธ',
'price' => 1000,
'order_id' => 'order_' . time(),
'reserve_execute_at' => date('Y-m-d H:i:s', strtotime('+1 day'))
));
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::subscribePaymentReserveLookup('reserve_id_here');
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::cancelSubscribeReserve('reserve_id_here');
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::destroyBillingKey('billing_key_here');
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::lookupSubscribeBillingKey('receipt_id_here');
var_dump($response);
}๋ถํธํ์ด์์ ์ ๊ณตํ๋ ๊ฐํธ๊ฒฐ์ ์ฐฝ, ์์ฒด์ธ์ฆ ๊ธฐ๋ฐ์ ๊ฒฐ์ ์ฌ์ฉ์ ์ํด ์ฌ์ฉ์ ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::requestUserToken(array(
'user_id' => 'user_123',
'phone' => '01012345678'
));
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::confirmPayment('receipt_id_here');
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::certificate('receipt_id_here');
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::shippingStart(array(
'receipt_id' => 'receipt_id_here',
'tracking_number' => '1234567890',
'delivery_corp' => 'CJ๋ํํต์ด',
'user' => array(
'username' => 'ํ๊ธธ๋',
'phone' => '01012345678'
)
));
var_dump($response);
}๊ธฐ์กด ๊ฒฐ์ ๊ฑด์ ๋ํด ํ๊ธ์์์ฆ์ ๋ฐํํฉ๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::cashReceiptPublishOnReceipt(array(
'receipt_id' => 'receipt_id_here',
'identity_no' => '01012345678',
'cash_receipt_type' => '์๋๊ณต์ '
));
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::cashReceiptCancelOnReceipt('receipt_id_here');
var_dump($response);
}๊ฒฐ์ ๊ฑด๊ณผ ๋ณ๊ฐ๋ก ํ๊ธ์์์ฆ์ ๋ฐํํฉ๋๋ค.
$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::requestCashReceipt(array(
'pg' => 'nicepay',
'price' => 1000,
'order_name' => 'ํ
์คํธ ์ํ',
'order_id' => 'order_' . time(),
'cash_receipt_type' => '์๋๊ณต์ ',
'identity_no' => '01012345678'
));
var_dump($response);
}$token = BootpayApi::getAccessToken();
if (!$token->error_code) {
$response = BootpayApi::cancelCashReceipt('receipt_id_here');
var_dump($response);
}<?php
require_once 'vendor/autoload.php';
use Bootpay\ServerPhp\BootpayCommerceApi;
$bootpay = new BootpayCommerceApi(
'your_client_key',
'your_secret_key',
'production' // ๋๋ 'development'
);
try {
// ํ ํฐ ๋ฐ๊ธ
$bootpay->getAccessToken();
// API ํธ์ถ ์์
$response = $bootpay->user->getList(array('page' => 1, 'limit' => 10));
print_r($response);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}ํจ์ ๋จ์์ ์ํ ์ฝ๋๋ tests/commerce ํด๋๋ฅผ ์ฐธ์กฐํ์ธ์.
Commerce API ์ฌ์ฉ์ ์ํ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
$bootpay = new BootpayCommerceApi(
'your_client_key',
'your_secret_key',
'production'
);
$bootpay->getAccessToken();$response = $bootpay->user->token('user_id_here');$response = $bootpay->user->join(array(
'login_id' => 'test_user',
'login_pw' => 'password123',
'username' => 'ํ๊ธธ๋',
'email' => 'test@example.com',
'phone' => '01012345678'
));$response = $bootpay->user->getList(array(
'page' => 1,
'limit' => 10
));$response = $bootpay->user->detail('user_id_here');$response = $bootpay->user->update(array(
'user_id' => 'user_id_here',
'username' => '๋ณ๊ฒฝ๋ ์ด๋ฆ'
));$response = $bootpay->user->delete('user_id_here');$response = $bootpay->userGroup->create(array(
'company_name' => 'ํ
์คํธ ํ์ฌ',
'business_number' => '1234567890',
'ceo_name' => 'ํ๊ธธ๋',
'corporate_type' => 2
));$response = $bootpay->userGroup->getList(array(
'page' => 1,
'limit' => 10
));$response = $bootpay->userGroup->detail('user_group_id_here');$response = $bootpay->userGroup->update(array(
'user_group_id' => 'user_group_id_here',
'company_name' => '๋ณ๊ฒฝ๋ ํ์ฌ๋ช
'
));$response = $bootpay->product->getList(array(
'page' => 1,
'limit' => 10
));$response = $bootpay->product->create(array(
'name' => 'ํ
์คํธ ์ํ',
'price' => 10000,
'type' => 1
));$response = $bootpay->product->detail('product_id_here');$response = $bootpay->product->update(array(
'product_id' => 'product_id_here',
'name' => '๋ณ๊ฒฝ๋ ์ํ๋ช
'
));$response = $bootpay->product->delete('product_id_here');$response = $bootpay->order->getList(array(
'page' => 1,
'limit' => 10
));$response = $bootpay->order->detail('order_id_here');$response = $bootpay->orderCancel->request(array(
'order_id' => 'order_id_here',
'cancel_reason' => '๊ณ ๊ฐ ์์ฒญ'
));$response = $bootpay->invoice->getList(array(
'page' => 1,
'limit' => 10
));$response = $bootpay->invoice->create(array(
'user_id' => 'user_id_here',
'price' => 10000,
'order_name' => '์ฒญ๊ตฌ์ ํ
์คํธ'
));$response = $bootpay->invoice->notify('invoice_id_here', array(
'send_types' => array(1) // 1: SMS
));$response = $bootpay->orderSubscription->getList(array(
'page' => 1,
'limit' => 10
));$response = $bootpay->orderSubscription->detail('order_subscription_id_here');$response = $bootpay->orderSubscription->requestIng->pause(array(
'order_subscription_id' => 'order_subscription_id_here'
));$response = $bootpay->orderSubscription->requestIng->resume(array(
'order_subscription_id' => 'order_subscription_id_here'
));$response = $bootpay->orderSubscription->requestIng->calculateTerminationFee(array(
'order_subscription_id' => 'order_subscription_id_here'
));$response = $bootpay->orderSubscription->requestIng->termination(array(
'order_subscription_id' => 'order_subscription_id_here'
));Commerce API์์๋ ์ญํ (Role)์ ๋ฐ๋ผ ์ ๊ทผ ๊ถํ์ด ๋ฌ๋ผ์ง๋๋ค.
// ๋งค๋์ ์ญํ ๋ก ์ค์
$bootpay->asManager();
// ์ฌ์ฉ์ ์ญํ ๋ก ์ค์
$bootpay->asUser();
// ํํธ๋ ์ญํ ๋ก ์ค์
$bootpay->asPartner();
// ์ญํ ์ด๊ธฐํ
$bootpay->clearRole();์ ์ฉํ ์ํ ํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์
๋ถํธํ์ด ๊ฐ๋ฐ๋งค๋ด์ผ์ ์ฐธ์กฐํด์ฃผ์ธ์
๋ถํธํ์ด ํํ์ด์ง ์ฐ์ธก ํ๋จ ์ฑํ ์ ํตํด ๊ธฐ์ ๋ฌธ์ ์ฃผ์ธ์!