bootpay / backend-php
bootpay 2版本API的服务端PHP插件
Requires
- php: >= 5.3.0
- ext-json: *
README
这是Bootpay官方PHP库(服务端使用)
可以用于用PHP编写的应用程序、框架等。
- PG支付窗口的集成是在客户端库中完成的。(Javascript、Android、iOS、React Native、Flutter等)
- 支付验证及取消、账单生成、实名认证等操作是在服务端进行的。(Java、PHP、Python、Ruby、Node.js、Go、ASP.NET等)
功能
-
(用于Bootpay通信的)令牌发放
-
支付单条查询
-
支付取消(全额取消/部分取消)
-
信用卡自动支付(账单支付)
4-1. 发放账单
4-2. 使用发放的账单进行支付授权请求
4-3. 使用发放的账单进行支付预约请求
4-4. 使用发放的账单进行支付预约 - 取消请求
4-5. 删除账单
4-6. 账单查询
-
(生物识别、密码支付)买家令牌发放
-
服务器授权请求
-
实名认证结果查询
-
(使用埃斯克罗时)向PG发送配送信息
使用composer安装
composer require bootpay/server-php
使用方法
<?php require_once '../vendor/autoload.php'; use Bootpay\ServerPhp\BootpayApi; BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $response = BootpayApi::getAccessToken(); var_dump($response);
函数单元的示例代码请参考此处。
1. (用于Bootpay通信的)令牌发放
为了与Bootpay服务器通信,需要从Bootpay服务器获取令牌。
发放的令牌有效期为30分钟,从首次发放之日起30分钟后,需要重新调用令牌发放函数。
$bootpay = BootpayApi::setConfig( '5b8f6a4d396fa665fdc2b5ea', 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw=' ); $response = $bootpay->requestAccessToken(); var_dump($response);
2. 支付单条查询
对于支付窗口和定期支付中批准/取消的支付项目,通过服务器间通信进行支付验证,以确认是否为正确的支付项目。
$bootpay = BootpayApi::setConfig( '5b8f6a4d396fa665fdc2b5ea', 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw=' ); $response = $bootpay->requestAccessToken(); $receiptId = '612c31000199430036b5165d'; $response = $bootpay->receiptPayment($receiptId); var_dump($response);
3. 支付取消(全额取消/部分取消)
如果不指定price,则将进行全额取消。
- 对于手机支付,如果延期,则可能因电信公司政策而无法取消。
- 如果取消金额大于应收金额,则可能因PG公司政策而无法取消。在这种情况下,请联系PG公司。
- 对于虚拟账户,如果CMS没有特别约定,则无法取消。因此,建议在支付测试时不要使用虚拟账户进行测试。
部分取消仅适用于信用卡支付的项目,并且只有部分PG公司支持。请指定price中的金额。
- (支持PG公司:이니시스、kcp、다날、페이레터、나이스페이、카카오페이、페이코)
有时,由于开发公司的错误,会多次发送部分取消请求,导致多次取消。因此,Bootpay为了防止部分取消重复请求,添加了cancel_id字段。指定cancel_id后,可以防止对该项目的重复请求。
$bootpay = BootpayApi::setConfig( '5b8f6a4d396fa665fdc2b5ea', 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw=' ); $response = $bootpay->requestAccessToken(); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::cancelPayment( array( 'receipt_id' => '62591cfcd01c7e001c19e259', 'cancel_price' => 1000, 'cancel_tax_free' => '0', 'cancel_id' => null, 'cancel_username' => 'test', 'cancel_message' => '테스트 결제 취소', 'refund' => array( 'bank_account' => '', 'bank_username' => '', 'bank_code' => '' ) ) ); var_dump($response); } catch (Exception $e) { echo($e->getMessage()); } }
4-1. 发放账单
通过REST API方式从客户那里传递卡信息,可以从PG公司获取账单。保存发放的账单,然后在需要的时间和金额下进行支付授权请求,可以应用于更自由的支付场景。
- 仅支持支持非认证定期支付(REST API)的PG公司。
$bootpay = BootpayApi::setConfig( '5b8f6a4d396fa665fdc2b5ea', 'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw=' ); $response = $bootpay->requestAccessToken(); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = $bootpay->getSubscribeBillingKey( 'nicepay', time(), '30일 정기권 결제', '카드 번호', '카드 비밀번호 앞에 2자리', '카드 만료 연도 2자리', '카드 만료 월 2자리', '주민등록번호 또는 사업자번호' ); var_dump($response); } catch (Exception $e) { echo($e->getMessage()); } }
4-2. 使用发放的账单进行支付授权请求
可以使用发放的账单在需要的时间和金额下进行支付授权请求。除非是余额不足或盗用卡等特殊情况,否则PG公司通常会立即批准支付。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::requestSubscribeCardPayment(array( 'billing_key' => '62591a5dd01c7e002219e255', 'order_name' => '테스트결제', 'price' => 1000, 'order_id' => time() )); } catch (Exception $e) { echo($e->getMessage()); } //62591a5dd01c7e002219e255 var_dump($response); }
4-3. 使用发放的账单进行支付预约请求
可以在4-1中发送支付授权请求,但可以在账单发放后立即进行支付预约。(每个账单最多10笔)
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::subscribePaymentReserve(array( 'billing_key' => '[ 빌링키 ]', 'order_name' => '테스트결제', 'price' => 1000, 'order_id' => time(), 'user' => array( 'phone' => '01000000000', 'username' => '홍길동', 'email' => 'test@bootpay.co.kr' ), 'reserve_execute_at' => date("Y-m-d H:i:s \U\T\C", time() + 5) )); } catch (Exception $e) { echo($e->getMessage()); } //62591a5dd01c7e002219e255 var_dump($response); }
4-4. 使用发放的账单进行支付预约 - 取消请求
取消预约的支付项目。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::subscribePaymentReserve(array( 'billing_key' => '[ 빌링키 ]', 'order_name' => '테스트결제', 'price' => 1000, 'order_id' => time(), 'user' => array( 'phone' => '01000000000', 'username' => '홍길동', 'email' => 'test@bootpay.co.kr' ), 'reserve_execute_at' => date("Y-m-d H:i:s \U\T\C", time() + 5) )); if (!$response->error_code) { $cancel = BootpayApi::cancelSubscribeReserve($response->reserve_id); var_dump($cancel); } } catch (Exception $e) { echo($e->getMessage()); } }
4-5. 删除账单
请求删除发放的账单,使其不再可以使用。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::destroyBillingKey('62591a5dd01c7e002219e255'); } catch (Exception $e) { echo($e->getMessage()); } var_dump($response); }
4-6. 账单查询
(仅限于从发放账单时返回的receipt_id)查询账单是哪一个。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { $response = BootpayApi::lookupSubscribeBillingKey('6257989ecf9f6d001d0aed1b'); var_dump($response); }
5. 用户令牌发放
(Bootpay独有)为了使用Bootpay提供的简单支付窗口和基于生物识别的支付,开发公司需要管理会员唯一编号,并为该会员发放用户令牌。基于此令牌值,客户可以发起支付请求。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::requestUserToken(array( 'user_id' => 'gosomi1', 'phone' => '01012345678' )); } catch (Exception $e) { echo($e->getMessage()); } //62591a5dd01c7e002219e255 var_dump($response); }
6. 服务器授权请求
支付授权方式共有两种:客户端授权方式和服务器授权方式。
客户端授权方式是通过javascript或native等中的confirm函数进行的一般方法,但有时需要使用服务器授权方式。
需要的原因
- 为了100%稳定地通知客户 - 由于客户端PG支付完成后onDone不会执行(互联网环境等),可能无法通知客户支付完成
- 需要单个交易的概念 - 对于需要库存管理的电子商务,可能需要交易概念,而这是通过使用服务器授权来实现的。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::confirmPayment('[ receipt_id ]'); var_dump($response); } catch (Exception $e) { echo($e->getMessage()); } }
7. 实名认证结果查询
查询다날实名认证后的结果。다날实名认证中,需要额外请求通信公司、外国人状态、电话号码这三种信息。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::certificate('625783a6cf9f6d001d0aed19'); var_dump($response); } catch (Exception $e) { echo($e->getMessage()); } }
- (使用埃斯克罗时)向PG发送配送信息现金交易的安全交易保障方式,是作为中介服务,使卖家和买家的在线电子交易得以顺利进行的一种买卖保护服务。根据国内法律,在电子交易中必须强制适用。PG也支持埃斯克罗支付,如果您希望使用埃斯克罗支付,请在PG加盟时提前讨论埃斯克罗支付,以便顺利地进行。
使用PG사配送信息(仅支持이니시스, KCP)来更改托管状态的API。
BootpayApi::setConfiguration( '59b731f084382614ebf72215', 'WwDv0UjfwFa04wYG0LJZZv1xwraQnlhnHE375n52X0U=' ); $token = BootpayApi::getAccessToken(); if (!$token->error_code) { try { $response = BootpayApi::shippingStart( array( 'receipt_id' => "62a95891d01c7e001d7dc20b", 'tracking_number' => '3982983', 'delivery_corp' => 'CJ대한통운', 'user' => array( 'username' => '테스트', 'phone' => '01000000000', 'zipcode' => '099382', 'address' => '서울특별시 종로구' ) ) ); var_dump($response); } catch (Exception $e) { echo($e->getMessage()); } }
示例项目
请参考应用示例项目。
文档
请参考Bootpay 开发手册。
技术咨询
请通过Bootpay 网站主页右下角的聊天窗口进行技术咨询!