Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简介

为了提高客户接入的便捷性,本系统提供 SDK 方式介入,使用本 SDK 将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的输入。

下载地址

SDK下载

版本记录

版本 日期 版本说明
v1.0.0 2021/05/06 初始版本
v1.0.1 2021/08/23 实现通用接口请求客户端演示demo,实现部分支付功能的封装
v1.1.0 2021/10/12 对接新版斗拱 API 接口
v1.1.1 2021/11/02 封装余额支付、取现、代发模块对象
v1.1.2 2021/12/08 1. 封装快捷代扣、延时交易、商户管理模块;
2. 优化 huifuid 方法参数,默认从配置文件中读取
v1.1.3 2021/12/13 1. 优化 huifuid 方法参数
2. 调整Demo 中 config.json 公私字段的命名
3. 优化接口通讯安全处理
v1.1.4 2021/12/21 1. 修复扫码接口地址问题
2. 修复扫码支付模块支付类型对象数据格式化问题
v1.1.5 2022/01/19 1. 封装微信、支付宝、云闪付商户管理模块对象;
2. 封装分账用户管理模块对象
v1.1.6 2022/04/21 1. 封装支付宝花呗分期模块对象;
2. 封装终端报备模块对象;
3. 封装银行卡分期模块对象;
4. 封装交易取现、出金交易查询模块对象;
5. 封装智能终端模块对象;
6. 封装交易确认模块对象;
7. 升级商户管理、快捷代扣、线上交易的部分接口为V2版本;
v1.1.7 2022/05/05 1. 实现机构列表查询功能封装;
2. 实现商户关系绑定功能封装;
3. 实现机构下属商户查询功能封装;
4. 升级商户图片上传接口为V2版本;
v1.1.8 2022/05/12 1. 实现支付托管H5、PC、支付宝小程序、微信小程序预下单功能封装;
2. 补充验签工具使用说明;
v1.1.9 2022/07/14 1. 网银支付页面版、手机网页支付、快捷支付页面版接口只加签不验签;
2. 商户图片上传接口免加解签;
3. 优化预下单功能封装;
v2.0.0 2022/09/16 1. 类名按资源路径生成;
2. demo中字段说明更详细;

版本要求

PHP 版本 5.6 及以上

SDK 包结构说明

BsPaySdk 目录下内容为待添加到项目中的文件;

BsPayDemo 目录下为示例项目,供接入时参考使用;

使用方法

1. 将 BsPaySdk 目录下文件内容整体复制到您的项目工程内

2. 在您的项目创建 SDK 初始化的入口文件,完成如下配置:

2.1 进行相关环境及调试参数的配置

 # 设置是否调试模式,不配置默认关闭:false
 define("DEBUG", true);
 
 # 设置调试日志路径,不配置默认为SDK同级的log目录下
 define("LOG", dirname(__FILE__)."/log");
 
 # 设置生产模式,不配置默认生产模式:true,设置为 false 时调用联调测试环境
 define("PROD_MODE", true);

2.2 完成 sdk 初始化

 # 加载 SDK 初始化文件
 require_once  dirname(__FILE__). "/../BsPaySdk/init.php";

2.3 完成系统参数的导入

 # 从文件导入商户系统参数
 BsPay::init(dirname(__FILE__). '/config/config_merch_default.json', false);
 
 # sdk也支持追加多套系统参数,并可以在调用接口时进行切换,适用于下辖多商户的系统接入
 BsPay::init(dirname(__FILE__). '/config/config_merch_2.json', false, "merchantKey2");
 BsPay::init(dirname(__FILE__). '/config/config_merch_3.json', false, "merchantKey3");
 ...

2.4 以上内容,建议参考 SDK Demo 中 loader.php 文件内的代码写法

3. SDK 调用方法(一):使用接口 request 实例调用,以商户业务开通接口为例

3.1 导入前一步实现的 SDK 初始化文件

# 导入初始化内容
require_once dirname(__FILE__) . "/loader.php";
require_once  dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiOpenRequest.php";

3.2 根据接口文档说明,创建对应请求的参数数据体

 # 请求必填参数
 $request = new V2MerchantBusiOpenRequest();
 // 请求流水号
 $request->setReqSeqId(date("YmdHis").mt_rand());
 // 请求日期
 $request->setReqDate(date("Ymd"));
 // 汇付ID
 $request->setHuifuId("6666000104778898");
 // 渠道商汇付ID
 $request->setUpperHuifuId("6666000003080000");
 
 # 请求拓展参数 (可选)
 $extendInfoMap = getExtendInfos() ;
 $request->setExtendInfo($extendInfoMap);

3.3 调用接口

# 创建请求Client对象,调用接口
 $client = new BsPayClient();
 $result = $client->postRequest($request);

3.4 处理返回结果

# 成功/失败应答的处理
if (!$result || $result->isError()){  //失败处理
    var_dump($result -> getErrorInfo());
} else {    //成功处理
    var_dump($result);
}

3.5 以上内容,建议参考 SDK Demo 中 V2MerchantBusiOpenRequestDemo.php 文件内的代码写法

4. SDK 调用方法(二):使用集中传参方式调用,以商户业务开通接口为例

除基于接口 request 实例调用外,另提供一种集中传参方式,拓展适应不同需求;

4.1 导入前一步实现的 SDK 初始化文件

# 导入初始化内容
require_once dirname(__FILE__) . "/loader.php";
require_once  dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiOpenRequest.php";

4.2 根据接口文档说明,创建对应请求的参数数据体

 # 请求实例
 $request = new V2MerchantBusiOpenRequest();
 
 // 请求参数,不区分必填和可选,按照 api 文档 data 参数结构依次传入
 $param = array(
     "funcCode" => $request->getFunctionCode(),
     "params" => array(
         "req_seq_id" => date("YmdHis").mt_rand(),
         "req_date" => date("Ymd"),
         "huifu_id" => "6666000104778898",
         "upper_huifu_id" => "6666000003080000",
         "balance_pay_config" => json_encode(array(
             "fee_rate" =>"2",
             "fee_fix_amt" =>"1",
         ),JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),
     ),
 );

4.3 调用接口

# 创建请求Client对象,调用接口
 $client = new BsPayClient();
 $result = $client->postRequest($param);

4.4 处理返回结果

# 成功/失败应答的处理
if (!$result || $result->isError()){  //失败处理
    var_dump($result -> getErrorInfo());
} else {    //成功处理
    var_dump($result);
}

5 验签工具(BsPayTools.php)

  • 校验签名 - verifySign_sort

    (此方法为返回报文签名验签,将返回data 按字母顺序排序后组成json 字符串,依据 RSA2 算法使用公钥进行验签

    示例:

$data = array(
    'bank_code' =>'10000',
    'bank_message' =>'Success',
    'hf_seq_id' =>'002900TOP2B220511142822P984ac132ff400000',
    'huifu_id' =>'6666000108854952',
    'qr_code' =>'https://qr.alipay.com/bax04465kcijedllqhuq004b',
    'req_date' =>'20220511',
    'req_seq_id' =>'202205111428211506200',
    'resp_code' =>'00000100',
    'resp_desc' =>'下单成功',
    'trade_type' =>'A_NATIVE',
    'trans_amt' =>'1.00',
    'trans_stat' =>'P',
);
$sign = "OUotiU75VW7SdEwLIZX3gAqSgZk8hCjE7r01WQr8mDdm23B+zd58r8HNWvE9BWV+mTwZ2iAOSuht9SOGM+spSYFANa3VIqMZzGim3y4aZmptQTTptNcclocsWyocn78efdAuTcGvf5dhUc6/Ue1oYV+BVhphYPmkKUKfxpEvBEvw/vlpsCu0I0Dx/k7kN6IaxY6mODypFmDtnEaZbkGaxbh8yxH1lJDn5/91YfD6vpK+sRJXiVXLzDK13BPAjQ3RAlFUxHJ8LPJbWQQpABQ94Gd1TTc/bfOluqUwJJbofC7WZiIOW6MKsa9gL5Y6lmbqFcMBKfvexJ0SlRFLWvSkQg==";
$merConfig = BsPay::getConfig();
$result = BsPayTools::verifySign_sort($sign,$data,$merConfig->rsa_huifu_public_key);
  • 校验 webhook 返回报文签名 - verify_webhook_sign

    (此方法为异步回调验签方法,将返回 data 字符串与商户配置的key 组合后进行md5计算,返回的md5值与回调sign的比较结果

    示例:

$data = array(
    'bank_code' =>'10000',
    'bank_message' =>'Success',
    'hf_seq_id' =>'002900TOP2B220511142822P984ac132ff400000',
    'huifu_id' =>'6666000108854952',
    'qr_code' =>'https://qr.alipay.com/bax04465kcijedllqhuq004b',
    'req_date' =>'20220511',
    'req_seq_id' =>'202205111428211506200',
    'resp_code' =>'00000100',
    'resp_desc' =>'下单成功',
    'trade_type' =>'A_NATIVE',
    'trans_amt' =>'1.00',
    'trans_stat' =>'P',
);
$sign = 'dcc64089c44ea77cfde785de4cfa97ba';
$key = 'test_key';
$result = BsPayTools::verify_webhook_sign($sign,$data,$key);

About

No description, website, or topics provided.

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages