跳转至内容
  • 斗拱开发者站点
  • 版块
  • 0 未读 0
  • 最新
  • 热门
  • 用户
皮肤
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

斗拱开发者论坛

  1. 主页
  2. 技术分享
  3. 开源技术
  4. 汇付支付斗拱 PHP 语言 SDK(bspay-php-sdk)

汇付支付斗拱 PHP 语言 SDK(bspay-php-sdk)

已定时 已固定 已锁定 已移动 开源技术
斗拱sdkphp
1 帖子 1 发布者 197 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 其宝undefined 离线
    其宝undefined 离线
    其宝
    写于 最后由 其宝 编辑
    #1

    汇付支付斗拱 PHP 语言 SDK简介

    Repository:https://github.com/huifurepo/bspay-php-sdk

    为了提高客户接入的便捷性,本系统提供 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);
    

    1 条回复 最后回复
    0
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 斗拱开发者站点
    • 版块
    • 未读 0
    • 最新
    • 热门
    • 用户