Skip to content
可能是最好的第三方宝付SDK
PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs
log
res/cer
src
.gitignore
README.md
composer.json

README.md

Baofoo

可能是最好的第三方宝付 SDK !

Latest Stable Version Latest Unstable Version License Total Downloads

使用说明

宝付认证支付

依据宝付认证支付 API 商户接入接口文档》(V4.0.4.0),本 Sdk 支持以下认证支付交易子类:

  • 01 直接绑卡类交易 [支持]
  • 02 解除绑定关系类交易 [支持]
  • 03 查询绑定关系类交易 [支持]
  • 11 预绑卡类交易 [支持]
  • 12 确认绑卡类交易 [支持]
  • 15 预支付交易(发送短信) [支持]
  • 16 支付确认交易 [支持]
  • 31 交易状态查询类交易 [支持]
  • 异步通知 [不支持]

以上 8 个接口都支持传入以下可选项:

    // 'additional_info' => '测试',  // 附加字段,可以不传或留空
    // 'req_reserved' => '保留字段',  // 请求方保留域,可以不传或留空

宝付代付

依据《宝付代付 API 接口文档》(V4.1.11),本 FoPaySdk 支持以下代付交易场景:

  • 代付交易接口(BF0040001) [支持]
  • 代付交易状态查证接口(BF0040002) [支持]
  • 代付交易退款查证接口(BF0040003) [支持]
  • 代付交易拆分接口(BF0040004) [支持]
  • 代付绑卡交易接口(BF0040006) [不支持]
  • 宝付账户实时交易接口(BF0040007) [不支持]
  • 账户收款方交易查证接口(BF0040010) [不支持]
  • 代付宝付回调接口 [不支持]

composer 包引入

composer.json 文件中添加上 "douyasi/baofoo": "~1.0" 项,然后执行 composer update 命令。

{
    "require": {
        "douyasi/baofoo": "~1.0"
    }
}

或者在 bash 下跳到项目根目录执行 composer require 'douyasi/baofoo:~1.0' 命令安装。

宝付认证支付使用示例

代码引入与初始化

<?php

// 自动加载
require __DIR__ . '/vendor/autoload.php';

$config = [
    'member_id'   => '100000276',  // 商户号
    'terminal_id' => '100000990',  // 终端号
    'request_url' => 'http://vgw.baofoo.com/cutpayment/api/backTransRequest',  // 请求宝付网关地址
];

$bfpayConf = [
    // 'timezone'                 => 'Asia/Shanghai',  // 时区设置,不填写,默认使用 `Asia/Shanghai`
    'private_key_password'     => '123456',  // 私钥密码
    'public_key_path'          => '',  // 公钥路径,留空使用 res\cer 文件
    'private_key_path'         => '',  // 私钥路径,留空使用 res\cer 文件
    'allowed_bind_credit_card' => false,  // 是否允许绑定信用卡,某些金融场景可能不允许使用信用卡 CC
    'debug'                    => false,  // 是否开启 debug 模式
    'logger_path'              => '',  // 记录请求日志的根路径,请使用绝对路径
];

$baofoo = new \Douyasi\Baofoo\Sdk($config, $bfpayConf);

直接绑卡(01)


$bindData = [
    // 'trans_serial_no' => '',  // 可以不传,sdk 会自动生成
    // 'trans_id' => '',  // 可以不传,sdk 会自动生成
    // 'trade_date' => '20170915191103', // 可以不传,sdk 会自动生成, 手动传入,必须符合宝付要求的日期格式
    /* 持卡人四要素*/
    'acc_no' => '6222020111122220000',
    'id_holder' => '张宝',
    'id_card' => '320301198502169142',
    'mobile' => '13800000000',
    // 'pay_code' => '',  // 建议不要手动传 `pay_code` ,sdk 会根据卡号自动查询得到 `pay_code` ,而且会根据配置 限制是否允许绑定信用卡
    // 'additional_info' => '测试',  // 附加字段,可以不传或留空,其他接口亦是如此
    // 'req_reserved' => '保留字段',  // 请求方保留域,可以不传或留空,其他接口亦是如此
];

$ret = $baofoo->bindCard($bindData);

返回值

  • 返回值 $ret 为数组。
  • $ret['code']200 时,正常成功结果;500 时为异常结果。
  • $ret['msg'] 会存放消息,异常时可以返回给前端使用。
  • $ret['need_query'] 当交易结果暂未知,需查询类时会返回 true ,其他情况返回 false 。具体请参考《宝付认证支付 API 商户接入接口文档》(V4.0.4.0)附录 - 应答码 那一节内容。
  • 宝付响应解密之后的内容会放在 $ret['data'] 中。

正常成功结果 json 化示例:

{
    "code":200,
    "msg":"ok",
    "need_query": false,
    "data":{
        "additional_info":"保留字段",
        "bind_id":"201709152043261000009906390",
        "data_type":"json",
        "member_id":"100000276",
        "req_reserved":"保留字段",
        "resp_code":"0000",
        "resp_msg":"交易成功",
        "terminal_id":"100000990",
        "trade_date":"20170915124325",
        "trans_id":"TI170915124325276174",
        "trans_serial_no":"TSN17091512432551565",
        "txn_sub_type":"01",
        "txn_type":"0431",
        "version":"4.0.0.0"
    }
}

异常结果 json 化示例:

{
    "code":500,
    "msg":"系统异常, 请联系宝付",
    "need_query": false,
    "data":{
        "resp_code":"BF00100",
        "resp_msg":"系统异常, 请联系宝付"
    }
}

其他接口返回值结构亦是如此,不再赘述返回值。

解除绑卡(02)


$unbindData = [
    // 'trans_serial_no' => '',  // 可以不传,sdk 会自动生成
    // 'trade_date' => '20170915191103', // 可以不传,sdk 会自动生成, 手动传入,必须符合宝付要求的日期格式
    'bind_id' => '201709151709081000009905295',  // 绑卡时得到的 bind_id
    'trans_id' => 'TI170915101656903557',  // 必须与绑卡的时候的订单号一致
];

$ret = $baofoo->unbindCard($unbindData);

查询绑卡状态(03)


$queryBindData = [
    // 'trans_serial_no' => '',  // 可以不传,sdk 会自动生成
    // 'trade_date' => '20170915191103', // 可以不传,sdk 会自动生成, 手动传入,必须符合宝付要求的日期格式
    'acc_no' => '6222020111122220000',
];

$ret = $baofoo->queryBindCard($queryBindData);

预支付(15)


$payData = [
    // 'trans_serial_no' => '',  // 可以不传,sdk 会自动生成
    // 'trans_id' => '',  // 可以不传,sdk 会自动生成
    'bind_id' => '201709151709081000009905295',
    'txn_amt' => 1,  // 金额,分为单位,这里是 1分
    'mobile' => '13800000000',
    'acc_no' => '6222020111122220000',  // 银行卡号
    'trade_date' => '20170915191103', // 可以不传,sdk 会自动生成, 手动传入,必须符合宝付要求的日期格式
    'risk_content' => [
        'client_ip' => '127.0.0.1', // 必须传入,请将客户真实 ip 传入
    ],
];

$ret = $baofoo->prePay($payData);

确定支付(16)


$payData = [
    // 'trans_serial_no' => '',  // 可以不传,sdk 会自动生成
    'business_no' => 'TI170915124325276174', // `prePay` 那一步宝付返回得到的业务流水号
    'sms_code' => '123456', // 支付时的短信验证码,若开通短信类交易则必填
    'trade_date' => '20170915191103', // 可以不传,sdk 会自动生成, 手动传入,必须符合宝付要求的日期格式
];

$ret = $baofoo->doPay($payData);

其它接口

其它接口暂不列出示例,请查阅 Sdk.php 代码调用。

宝付代付使用示例

代码引入与初始化

<?php

require __DIR__ . '/vendor/autoload.php';

$config = [
    'version'         => '4.0.0',  // 版本号
    'data_type'       => 'json',  // 加密报文的数据类型(xml/json)
    'member_id'       => '100000178',  // 默认测试商户号
    'terminal_id'     => '100000859',  // 默认测试终端号
];

$bfpayConf = [
    'fo_pay_env'               => 'TESTING',  // 环境,可选 测试 TESTING 和 生产PRODUCTION
    // 'timezone'                 => 'Asia/Shanghai',  // 时区设置,不填写,默认使用 `Asia/Shanghai`
    'private_key_password'     => '123456',  // 私钥密码
    'public_key_path'          => '',  // 公钥路径,留空使用 res\cer 文件
    'private_key_path'         => '',  // 私钥路径,留空使用 res\cer 文件
    'debug'                    => false,  // 是否开启 debug 模式
    'logger_path'              => '',  // 记录请求日志的根路径,请使用绝对路径
];

$foPay = new \Douyasi\Baofoo\FoPaySdk($config, $bfpayConf);

代付交易接口(BF0040001)


// 单条数据
$data = [
    'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M (建议在自己程序中自行生成订单号,这里使用本包 `Tool` 类 助手方法) 
    'trans_money'   => '100',  // 转账金额 (元)M 
    'to_acc_name'   => '张宝',  // 收款人姓名 M
    'to_acc_no'     => '6222020111122220000',
    'to_bank_name'  => '中国银行',  // 收款人银行名称 M
    'to_pro_name'   => '',  // 收款人开户行省名 C
    'to_city_name'  => '',  // 收款人开户行市名 C
    'to_acc_dept'   => '',  // 收款人开户行机构名 C
    'trans_card_id' => '',  // 银行卡身份证件号码 C
    'trans_mobile'  => '',  // 银行卡预留手机号 C
    'trans_summary' => '',  // 摘要 R
];

$ret1 = $foPay->agentPay($data);

// 多条数据,宝付一个批次最多5条数据,这里演示 2条

# 依次传入
$data1 = [
    'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M
    'trans_money'   => '100',  // 转账金额 (元)M 
    'to_acc_name'   => '张宝',  // 收款人姓名 M
    'to_acc_no'     => '6222020111122220000',
    'to_bank_name'  => '中国银行',  // 收款人银行名称 M
];
$data2 = [
    'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M
    'trans_money'   => '200',  // 转账金额 (元)M 
    'to_acc_name'   => '张宝',  // 收款人姓名 M
    'to_acc_no'     => '6222020111122220000',
    'to_bank_name'  => '中国银行',  // 收款人银行名称 M
];

$ret2 = $foPay->agentPay($data1, $data2);

# 一次性传入

$data3 = [
    [
        'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M
        'trans_money'   => '300',  // 转账金额 (元)M 
        'to_acc_name'   => '张宝',  // 收款人姓名 M
        'to_acc_no'     => '6222020111122220000',
        'to_bank_name'  => '中国银行',  // 收款人银行名称 M
    ],
    [
        'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M
        'trans_money'   => '400',  // 转账金额 (元)M 
        'to_acc_name'   => '张宝',  // 收款人姓名 M
        'to_acc_no'     => '6222020111122220000',
        'to_bank_name'  => '中国银行',  // 收款人银行名称 M
    ],
];

$ret3 = $foPay->agentPay($data3);

返回值

  • 返回值 $ret 为数组。
  • 请特别注意:本 FoPaySdk 不对宝付代付响应的结果做额外的结构包装,各接口返回的数组由宝付代付接口自身响应经 RSA 解密 JSON 转换之后所得,几乎可视为原样输出,请开发者参阅《宝付代付 API 接口文档》(V4.1.11)并结合实际在代码中进行逻辑处理。

正常成功结果 json 化示例:

{
    "trans_content":{
        "trans_reqDatas":[
            {
                "trans_reqData":[
                    {
                        "to_acc_dept":"||中国银行",
                        "to_acc_name":"张宝",
                        "to_acc_no":"6222020111122220000",
                        "trans_batchid":20868159,
                        "trans_money":"300.00",
                        "trans_no":"TI171007162051843424",
                        "trans_orderid":17098873,
                        "trans_summary":""
                    },
                    {
                        "to_acc_dept":"||中国银行",
                        "to_acc_name":"张宝",
                        "to_acc_no":"6222020111122220000",
                        "trans_batchid":20868159,
                        "trans_money":"400.00",
                        "trans_no":"TI171007162051952720",
                        "trans_orderid":17098874,
                        "trans_summary":""
                    }
                ]
            }
        ],
        "trans_head":{
            "return_code":"0000",
            "return_msg":"代付请求交易成功"
        }
    }
}

异常结果 json 化示例:

{
    "trans_content":{
        "trans_head":{
            "return_code":"0004",
            "return_msg":"交易请求记录条数超过上限!"
        }
    }
}

具体 return_code 对应的异常请参阅《宝付代付 API 接口文档》(V4.1.11)。

代付交易状态查证接口(BF0040002)

// 这里只演示单条数据,多条的参考上面 `代付交易接口(BF0040001)` 用法
$data = [
    'trans_no'      => 'TI171007162051843424',  // 商户订单号 M
    'trans_batchid' => 20868159,  // 宝付批次号 O
];

$ret = $foPay->agentPayStatusQuery($data);

上面测试代码返回值 json 化结果:

state 订单交易处理状态 M 0:转账中; 1:转账成功; -1:转账失败; 2:转账退款.

{
    "trans_content":{
        "trans_reqDatas":[
            {
                "trans_reqData":{
                    "state":-1,
                    "to_acc_dept":"||中国银行",
                    "to_acc_name":"张宝",
                    "to_acc_no":"6222020111122220000",
                    "trans_batchid":20868159,
                    "trans_endtime":"2017-10-07 16:20:55",
                    "trans_fee":"",
                    "trans_money":"300.00",
                    "trans_no":"TI171007162051843424",
                    "trans_orderid":17098873,
                    "trans_remark":"收款帐号与银行名称不匹配",
                    "trans_starttime":"2017-10-07 16:20:54",
                    "trans_summary":""
                }
            }
        ],
        "trans_head":{
            "return_code":"0000",
            "return_msg":"代付请求交易成功"
        }
    }
}

代付交易退款查证接口(BF0040003)

// 本接口只支持单条数据传入,同天查询
$data = [
    'trans_btime' => '20171007',  // 格式:YYYYMMDD(最多查询一天记录) 查询起始时间 M
    'trans_etime' => '20171007',  // 格式:YYYYMMDD(最多查询一天记录) 查询结束时间 M 
];

$ret = $foPay->agentPayRefundQuery($data);

代付交易拆分接口(BF0040004)

$data1 = [
    'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M
    'trans_money'   => '100',  // 转账金额 (元)M 
    'to_acc_name'   => '张宝',  // 收款人姓名 M
    'to_acc_no'     => '6222020111122220000',
    'to_bank_name'  => '中国银行',  // 收款人银行名称 M
];

$data2 = [
    'trans_no'      => \Douyasi\Baofoo\Tool::generateTransId(),  // 商户订单号 M
    'trans_money'   => '200',  // 转账金额 (元)M 
    'to_acc_name'   => '张宝',  // 收款人姓名 M
    'to_acc_no'     => '6222020111122220000',
    'to_bank_name'  => '中国银行',  // 收款人银行名称 M
];
$ret = $foPay->agentPaySplit($data1, $data2);

上面测试代码返回值 json 化结果:

{
    "trans_content":{
        "trans_reqDatas":[
            {
                "trans_reqData":[
                    {
                        "to_acc_dept":"||中国银行",
                        "to_acc_name":"张宝",
                        "to_acc_no":"6222020111122220000",
                        "trans_batchid":20868174,
                        "trans_money":"100.00",
                        "trans_no":"TI171007220502112918",
                        "trans_orderid":17098890,
                        "trans_summary":""
                    },
                    {
                        "to_acc_dept":"||中国银行",
                        "to_acc_name":"张宝",
                        "to_acc_no":"6222020111122220000",
                        "trans_batchid":20868174,
                        "trans_money":"200.00",
                        "trans_no":"TI171007220502102969",
                        "trans_orderid":17098891,
                        "trans_summary":""
                    }
                ]
            }
        ],
        "trans_head":{
            "return_code":"0000",
            "return_msg":"代付请求交易成功"
        }
    }
}

其它

其它未尽事宜,请开发者自行参阅《宝付代付 API 接口文档》(V4.1.11)。

参考资源

  • 《宝付认证支付 API 商户接入接口文档》(V4.0.4.0)link
  • 《宝付代付 API 接口文档》(V4.1.11)link
  • Inspired by navyxie/baofoo

联系方式

在使用中,遇到问题可以发 issue ,或者通过以下方式联系作者我。

You can’t perform that action at this time.