PHP¶
简介¶
为了提高客户的接入体验,特提供封装的开发SDK,使用本SDK将极大的简化开发者的工作,开发者将无需考虑通信、签名、验签等,只需要关注业务参数的拼装。
版本要求¶
PHP 版本 5.6 及以上
接入方法¶
下载 SDK
下载文件里包含 BsPaySdk 和 BsPayDemo 两个目录。BsPaySdk 目录下为待添加到项目中的文件,BsPayDemo 目录下为示例项目,供接入时参考使用。
SDK 导入
在支付模块中引入 SDK, 参考如下:
<?php
# 以下配置为开发联调时覆盖SDK的配置项,需在引入SDK的init.php之前配置以覆盖SDK初始配置
# 设置是否调试模式,不配置默认关闭:false
define("DEBUG", true);
# 设置调试日志路径,不配置默认为SDK同级的log目录下
define("LOG", dirname(__FILE__)."/log");
# 设置生产模式,不配置默认生产模式:true
define("PROD_MODE", true);
// SDK 初始化文件加载
require_once dirname(__FILE__). "/../BsPaySdk/init.php";
使用方法¶
系统初始化
在使用 SDK 调用汇付接口前,请先进行商户配置,否则可能导致交易异常。
正常情况下只有一套商户配置,如有业务需求向汇付申请了多套配置信息,也可配置多个商户配置,并做好商户配置命名管理,配置名必须唯一
调用示例
<?php
/**
* init方法参数介绍
* 第一个是配置文件路径或者配置数组对象
* 第二个参数是是标识第一个参数的类型 true为数组对象 false为文件路径,默认false
* 第三个是标识配置信息的key,可自定义,保证多套配置不重复即可,默认default,只有一套配置可不传
**/
BsPay::init(dirname(__FILE__). '/config/config.json', false);
// 追加第二套配置信息
$merConfig = array(
"product_id" => DemoConstants::DEMO_PRODUCT_ID,
"sys_id" => DemoConstants::DEMO_SYS_ID,
"rsa_private_key" => DemoConstants::RSA_PRIVATE_KEY,
"rsa_public_key" => DemoConstants::RSA_PUBLIC_KEY
);
BsPay::init($merConfig, true, "merchantKey2");
接口调用¶
接口调用均由 BsPayClient.postRequest 方法发起,上传文件接口由 BsPayClient.postFileRequest 方法发起
<?php
/**
* 请求接口
* @param string $funcCode 接口功能编码
* @param array 请求接口参数集合
* @param string $merChantKey 商户配置名
*/
public function postRequest($funcCode, $params=array(), $merChantKey = 'default')
/**
* 文件上传请求接口
* @param string $funcCode 接口功能编码
* @param array $params 请求接口参数集合
* @param \CURLFile $file 待上传的文件
* @param string $merChantKey 商户配置名
*/
public function postFileRequest($funcCode, $params=array(), $file=null, $merChantKey = 'default')
params
为请求报文体BODY中的 data
- 「接口规则-参数规定-报文体」 ,需根据调用接口的API说明组装参数。
funcCode
为请求接口的功能编码,请参考 交易接口功能编码、商户管理接口功能编码。
file
为文件上传时文件对象。
merchantKey
为上一步初始化时配置的商户配置key。
接口调用实例¶
以下以聚合反扫接口为例,展示如何使用 SDK 来调用接口。
<?php
namespace BsPayDemo;
use BsPaySdk\BsPayClient;
use BsPayDemo\constants\DemoConstants;
/**
* 聚合反扫调用实例
*/
// 配置商户信息
require_once dirname(__FILE__). "/config.php";
$nowStr = date("YmdHis");
$nowDate = date("Ymd");
$reqSeqId = $nowStr . "01234567890";
// $merOrdId = $nowStr . "1234567890";
$merOrdId = $reqSeqId;
$timeExpire = date("YmdHis",strtotime(date("YmdHis") . " +2 minutes"));
$trans_params = array(
// 请求流水号,需保证当天商户下唯一,推荐采用日期时间+几位流水号的形式
"req_seq_id" => $reqSeqId,
// 请求日期,请求接口的日期,因服务器时间可能有差异,允许前后1天
"req_date"=> date("Ymd"),
// 系统号,由汇付分配
"sys_id"=>DemoConstants::DEMO_SYS_ID,
// 商户订单号,需保证商户下唯一,推荐采用日期时间+几位流水号的形式,可与req_seq_id相同
"mer_ord_id"=>$merOrdId,
// 分配商户号
"huifu_id"=>DemoConstants::DEMO_HUIFU_ID,
// 渠道号,若需使用自有渠道请联系业务对接人
"bank_channel_no" => "",
// 交易金额
"trans_amt"=>"0.02",
// 商品描述
"goods_desc"=>"测试商品",
"auth_code" => "xxxxx",
// 设备信息
"terminal_device_info"=>array (
"device_type"=>"4",
"device_ip"=>"139.207.19.246"
),
// 风控信息
// 注意,风控信息为JSON字符串
"risk_check_info" => json_encode(array(
"riskMngInfo" => array(
"subTradeType" => "4300"
),
"ipAddr"=>"139.207.19.246"
)),
// 异步通知地址
"notify_url"=>"virgo://http://www.vclinker.com",
// 交易有效期
"time_expire"=>$timeExpire,
// 指定支付方式 是否禁止用户使用信用卡支付。默认不禁用,若禁止请填1
"limit_pay"=>"1",
// 延时标志 1为延迟 0为不延迟
"is_delay_acct"=>"0",
// 传入分帐遇到优惠的处理规则 1-按比例分 2-按顺序保障 3-只给交易商户
"term_div_coupon_type"=>"3",
// 分账串
// 注意只有真实分账场景才需要传入分账串,请避免传入多个分账方为同一商户的分账串
"acct_split_bunch"=>array(
"acct_infos" => array(
// 分账方1
array(
"huifu_id"=>DemoConstants::DEMO_HUIFU_ID,
"div_amt"=>"0.01"
),
// 分账方2
array(
"huifu_id"=>DemoConstants::DIV_HUIFU_ID,
"div_amt"=>"0.01"
)
)
),
// 商户私有域
"mer_priv"=>"",
// 微信扩展参数集合
"wx_data"=>"",
// 支付宝扩展参数集合
"alipay_data"=>"",
// 银联扩展参数集合
"unionpay_data"=>"",
// 手续费类型 01:标准费率线上,02:标准费率线下,03:非盈利费率,04:缴费费率,05:保险费率,06:行业活动费率,07:校园餐饮费率,08:K12中小幼费率
// 不送时取业务入驻配置的默认费率
"pay_scene"=>"02",
);
$trans = new BsPayClient();
# 请求聚合反扫接口
$trans->postRequest("top.trans.authCodePay", $trans_params);
# 如有多套配置,可指定使用哪套配置,指定merchanKey为初始化时设置的。
#$trans->postRequest("top.trans.authCodePay", $trans_params, "merchantKey2");
if ($trans->isError()){
//失败处理
var_dump($trans->result);
} else {
//成功处理
var_dump($trans->result);
}
$query_params = array(
"huifu_id"=> DemoConstants::DEMO_HUIFU_ID,
"req_date"=> $nowDate,
"sys_id"=> DemoConstants::DEMO_SYS_ID,
"req_seq_id"=> $reqSeqId
);
# 请求交易查询接口
$trans->postRequest("topqur.transQuery", $query_params);
# 如有多套配置,可指定使用哪套配置,指定merchanKey为初始化时设置的。
#$trans->postRequest("topqur.transQuery", $query_params, "merchantKey2");
# 对进件结果进行处理
if ($trans->isError()){
//失败处理
var_dump($trans->result);
} else {
//成功处理
var_dump($trans->result);
}
?>