You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace yisheng\account;
use yisheng\Base;
class Ledger extends Base
{
/**
* 分账接收方请求绑定
* @param string $ledger_bind_number 绑定订单号
* @param string $org_mercode 子商户-交易商户号
* @param string $org_termno 子商户-交易终端号
* @date 2022-06-07
*/
public function bind($ledger_bind_number, $org_mercode, $org_termno)
{
//请求参数
$data = [
'orgId' => $this->config['org_id'], //客户编号
'orgMerCode' => $this->config['org_mercode'], //交易商户号
'orgTermNo' => $this->config['org_termno'], //交易终端号
'orgTrace' => $ledger_bind_number, //外部系统订单号(确保唯一,前后不允许带空格) 交易流水号
'signType' => 'RSA', //签名方式
'bizData' => [ //业务请求数据,签名数据
'orgMercode' => $org_mercode,
'orgTermno' => $org_termno
],
];
$data['sign'] = $this->getSign($data['bizData']); //签名
$this->setUrl($this->baseUrlLedger);
$result = $this->actionApi($data, '/ledger/mposbind');
// 记录日志
$uid = defined('UID') ? UID : '';
platformLog($data, $result, 'yisheng_ledger_bind_uid_' . $uid);
return $result;
}
/**
* 请求分账
* @param string $ledger_number 分账订单号
* @param string $ori_order_number 原订单号
* @param array $data_list 分账列表org_mercode--交易商户号 org_termno--交易终端号org_sub_trace--交易订单号trans_amt--分账金额fee_cost_amt--子订单成本金额
* @date 2022-06-07
*/
public function ledger($ledger_number, $ori_order_number, $data_list = [])
{
//请求参数
$data = [
'orgId' => $this->config['org_id'], //客户编号
'orgMercode' => $this->config['org_mercode'], //交易商户号
'orgTermNo' => $this->config['org_termno'], //交易终端号
'orgTrace' => $ledger_number, //外部系统订单号(确保唯一,前后不允许带空格) 交易流水号
'signType' => 'RSA', //签名方式
'bizData' => [ //业务请求数据,签名数据
'oriOrgTrace' => $ori_order_number,
'transCount' => (string)count($data_list), //子订单总笔数 字符串
'transAmt' => (string)(array_sum(array_column($data_list, 'trans_amt')) * 100), //子订单总金额 字符串
],
];
foreach ($data_list as $k => $v) {
$orderSubDetails[] = [
// 子商户号
'orgMercode' => $v['org_mercode'],
// 子终端号
'orgTermno' => $v['org_termno'],
// 子交易流水
'orgSubTrace' => $v['org_sub_trace'],
// 子订单分账金额
'transAmt' => (string)($v['trans_amt'] * 100),
// 子订单成本金额
'feeCostAmt' => (string)($v['fee_cost_amt'] * 100)
];
}
//生成32位对称秘钥
$key = $this->getKey();
//使用对称密钥, 按照AES256_ECB算法对敏感信息加密
$data['bizData']['orderSubDetails'] = $this->encrypt($orderSubDetails, $key); //子订单明细,加密后
//使用接收方的公钥对32位对称秘钥进行加密
$data['bizData']['dgtlEnvlp'] = $this->encryptWithPKCS1($key);
$data['sign'] = $this->getSign($data['bizData']); //签名
$this->setUrl($this->baseUrlLedger);
$result = $this->actionApi($data, '/ledger/mpos');
// 记录日志
$uid = defined('UID') ? UID : '';
platformLog($data, $result, 'yisheng_ledger_uid_' . $uid);
return $result;
}
/**
* 分账请求结果查询
* @param string $ledger_query_number 分账查询编号
* @param string $ori_ledger_number 原订单号
* @date 2022-06-30
*/
public function ledgerQuery($ledger_query_number, $ori_ledger_number)
{
//请求参数
$data = [
// 客户编号
'orgId' => $this->config['org_id'],
// 交易商户号
'orgMerCode' => $this->config['org_mercode'],
// 交易终端号
'orgTermNo' => $this->config['org_termno'],
// 分账查询编号
'orgTrace' => $ledger_query_number,
// 产品代码
'prodCode' => 'W04',
// 签名方式
'signType' => 'RSA ',
// 业务请求数据,签名数据
'bizData' => [
// 原分账订单编号
'oriOrgTrace' => $ori_ledger_number
],
];
// 签名
$data['sign'] = $this->getSign($data['bizData']);
$this->setUrl($this->baseUrlLedger);
$result = $this->actionApi($data, '/ledger/mposfind');
// 记录日志
$uid = defined('UID') ? UID : '';
platformLog($data, $result, 'yisheng_ledger_query_uid_' . $uid);
return $result;
}
}