bootpay/backend-php

bootpay 2版本API的服务端PHP插件

2.1.1 2024-05-29 08:22 UTC

This package is auto-updated.

Last update: 2024-09-29 09:02:15 UTC


README

这是Bootpay官方PHP库(服务端使用)

可以用于用PHP编写的应用程序、框架等。

  • PG支付窗口的集成是在客户端库中完成的。(Javascript、Android、iOS、React Native、Flutter等)
  • 支付验证及取消、账单生成、实名认证等操作是在服务端进行的。(Java、PHP、Python、Ruby、Node.js、Go、ASP.NET等)

功能

  1. (用于Bootpay通信的)令牌发放

  2. 支付单条查询

  3. 支付取消(全额取消/部分取消)

  4. 信用卡自动支付(账单支付)

    4-1. 发放账单

    4-2. 使用发放的账单进行支付授权请求

    4-3. 使用发放的账单进行支付预约请求

    4-4. 使用发放的账单进行支付预约 - 取消请求

    4-5. 删除账单

    4-6. 账单查询

  5. (生物识别、密码支付)买家令牌发放

  6. 服务器授权请求

  7. 实名认证结果查询

  8. (使用埃斯克罗时)向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函数进行的一般方法,但有时需要使用服务器授权方式。

需要的原因

  1. 为了100%稳定地通知客户 - 由于客户端PG支付完成后onDone不会执行(互联网环境等),可能无法通知客户支付完成
  2. 需要单个交易的概念 - 对于需要库存管理的电子商务,可能需要交易概念,而这是通过使用服务器授权来实现的。
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());
    }
}
  1. (使用埃斯克罗时)向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 网站主页右下角的聊天窗口进行技术咨询!

许可证

MIT许可证.