| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613 |
- <?php
- namespace addons\HuifuPay\common\service;
- use addons\HuifuPay\common\models\HuifupayPayRequestLog;
- use addons\HuifuPay\common\service\params\HuifuBalancePayParam;
- use addons\HuifuPay\common\service\params\HuifuBalancePayRefundParam;
- use addons\HuifuPay\common\service\params\HuifuFastPayParam;
- use addons\HuifuPay\common\service\params\HuifuBalanceOnlineRefundParam;
- use addons\HuifuPay\common\service\params\HuifuMerchantBusiModifyParam;
- use BsPaySdk\core\BsPay;
- use BsPaySdk\core\BsPayClient;
- use BsPaySdk\core\BsPayTools;
- use BsPaySdk\request\BaseRequest;
- use BsPaySdk\request\V2MerchantBusiOpenRequest;
- use BsPaySdk\request\V2QuickbuckleApplyRequest;
- use BsPaySdk\request\V2QuickbuckleUnbindRequest;
- use BsPaySdk\request\V2TradeAcctpaymentPayRequest;
- use BsPaySdk\request\V2TradeAcctpaymentRefundRequest;
- use BsPaySdk\request\V2TradeHostingPaymentPreorderAliRequest;
- use BsPaySdk\request\V2TradeHostingPaymentPreorderWxRequest;
- use BsPaySdk\request\V2TradeOnlinepaymentTransferAccountRequest;
- use BsPaySdk\request\V2TradePaymentDelaytransConfirmRequest;
- use BsPaySdk\request\V2TradePaymentJspayRequest;
- use BsPaySdk\request\V2TradePaymentScanpayRefundRequest;
- use BsPaySdk\request\V2TradeOnlinepaymentQuickpayApplyRequest;
- use BsPaySdk\request\V2QuickbuckleConfirmRequest;
- use BsPaySdk\request\V2TradeOnlinepaymentQuickpayConfirmRequest;
- use BsPaySdk\request\V2TradeOnlinepaymentRefundRequest;
- use BsPaySdk\request\V2MerchantBusiModifyRequest;
- use common\enums\AddonsEnum;
- # 以下配置为开发联调时覆盖SDK的配置项,需在引入SDK的init.php之前配置以覆盖SDK初始配置
- # 设置是否调试模式,不配置默认关闭:false
- define("DEBUG", true);
- # 设置调试日志路径,不配置默认为SDK同级的log目录下
- //define("LOG", dirname(__FILE__) . "/log");
- define("LOG", \Yii::$app->basePath . '/../api/runtime/huifu');
- # 设置生产模式,不配置默认生产模式:true
- //define("PROD_MODE", false);
- # SDK 初始化文件加载
- require_once dirname(__FILE__) . "/../BsPaySdk/init.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2QuickbuckleApplyRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2QuickbuckleUnbindRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradePaymentJspayRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeHostingPaymentPreorderWxRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradePaymentScanpayRefundRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeOnlinepaymentTransferAccountRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeHostingPaymentPreorderAliRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeAcctpaymentPayRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeAcctpaymentRefundRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2QuickbuckleConfirmRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeOnlinepaymentQuickpayApplyRequest.php";
- require_once dirname(__FILE__) . "/../BsPaySdk/request/V2TradeOnlinepaymentQuickpayConfirmRequest.php";
- require_once dirname(__FILE__). "/../BsPaySdk/request/V2TradeOnlinepaymentRefundRequest.php";
- require_once dirname(__FILE__). "/../BsPaySdk/request/V2TradePaymentDelaytransConfirmRequest.php";
- require_once dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiModifyRequest.php";
- require_once dirname(__FILE__). "/../BsPaySdk/request/V2MerchantBusiOpenRequest.php";
- use common\traits\ErrorTrait;
- use ReflectionClass;
- use RuntimeException;
- use yii\db\Exception;
- use \Yii;
- class HuifuService
- {
- use ErrorTrait;
- public $public_key = '';
- public $config = [];
- public $mall_id;
- public $requestId;
- public function __construct($mall_id = null)
- {
- if (!empty($mall_id)) {
- $this->config = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_HUIFU_PAY, 'basic');
- # init方法,从 config.json 加载系统参数
- $config = [
- 'sys_id' => $this->config['huifupay_sys_id'],
- 'product_id' => $this->config['huifupay_product_id'],
- 'rsa_merch_private_key' => $this->config['huifupay_private_key'],
- 'rsa_huifu_public_key' => $this->config['huifupay_public_key'],
- ];
- $this->public_key = "-----BEGIN PUBLIC KEY-----\n" . wordwrap($this->config['huifupay_public_key'], 64, "\n", true) . "\n-----END PUBLIC KEY-----";
- BsPay::init($config, true);
- $this->mall_id = $mall_id;
- }
- }
- public function verifySign($signature, $data)
- {
- return BsPayTools::verifySign_sort($signature, $data, $this->config['huifupay_public_key']);
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2024/05/29 12:59:02
- * 大额转账要素切换
- * 01-四要素(卡号,户名,金额,调账标识),05-三要素(金额+姓名+12位纯数字打款标识);示例值:01
- */
- //
- public function merchantBusiBigPayModify($type='05')
- {
- // 2.组装请求参数
- $request = new V2MerchantBusiModifyRequest();
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 汇付客户Id
- $request->setHuifuId($this->config['huifupay_huifu_id']);
- // 设置非必填字段
- $param['biz_type']=$type;
- $extendInfoMap = HuifuMerchantBusiModifyParam::getExtendInfosNoInfo($param);
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2024/01/08 12:59:02
- * 余额支付(这是一个同步响应操作)
- */
- public function balancePay($data, $splitAccount = [])
- {
- // 2.组装请求参数
- $request = new V2TradeAcctpaymentPayRequest();
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 出款方商户号
- $request->setOutHuifuId($data['huifu_id']);
- // 支付金额
- $request->setOrdAmt($data['amount']);
- // 分账对象
- $request->setAcctSplitBunch(HuifuBalancePayParam::getAcctSplitBunch($splitAccount));
- // 安全信息
- $request->setRiskCheckData(HuifuBalancePayParam::getRiskCheckData());
- // 设置非必填字段
- $extendInfoMap = HuifuBalancePayParam::getExtendInfos();
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2024/01/08 12:59:02
- * 余额支付退款
- */
- public function balanceReturn($data, $splitAccount)
- {
- // 2.组装请求参数
- $request = new V2TradeAcctpaymentRefundRequest();
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 原余额支付请求日期org_hf_seq_id和(orgReqDate+orgReqSeqId)二选一;<br/>格式:yyyyMMdd;<font color="green">示例值:20221023</font>
- $request->setOrgReqDate($data['old_req_date']);
- // 原余额支付请求流水号org_hf_seq_id和(orgReqDate+orgReqSeqId)二选一;<br/><font color="green">示例值:2021091708126665001</font>
- $request->setOrgReqSeqId($data['org_req_seq_id']);
- // 原余额支付支付全局流水号org_hf_seq_id和(orgReqDate+orgReqSeqId)二选一;<br/><font color="green">示例值:00470topo1A211015160805P090ac132fef00000</font>
- $request->setOrgHfSeqId("");
- // 退款金额
- $request->setOrdAmt($data['amount']);
- // 设置非必填字段
- $extendInfoMap = HuifuBalancePayRefundParam::getExtendInfos($splitAccount);
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 大额支付
- */
- public function bigPay($notify_url, $data)
- {
- // 2.组装请求参数
- $request = new V2TradeOnlinepaymentTransferAccountRequest();
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 收款方商户号
- $request->setHuifuId($data['huifu_id']);
- // 交易金额
- $request->setTransAmt($data['amount']);
- // 商品描述
- $request->setGoodsDesc($data['goods_title']);
- //基本信息
- $extendInfoMap = array();
- // // 收款方用户客户号
- //$extendInfoMap["user_huifu_id"] = $data['huifu_id'];
- // // 收款方账户号
- // $extendInfoMap["acct_id"] = "";
- // 付款方名称
- $extendInfoMap["certificate_name"] = $data['real_name'];
- // 付款方银行卡号
- $extendInfoMap["bank_card_no"] = BsPayTools::encrypt_with_rsa_pubkey($data['bank_card_no'], $this->config['huifupay_public_key']);
- // 订单类型
- // $extendInfoMap["order_type"]= "";
- // 备注
- $extendInfoMap["remark"] = "";
- // 异步通知地址
- $extendInfoMap["notify_url"] = $notify_url;
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- // 设置非必填字段
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2024/01/03 15:44:57
- * 线上交易退款
- */
- public function onlineRefund($data, $splitAccount = [])
- {
- // 2.组装请求参数
- $request = new V2TradeOnlinepaymentRefundRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 退款金额
- $request->setOrdAmt($data['amount']);
- // 设备信息
- $request->setTerminalDeviceData(HuifuBalanceOnlineRefundParam::getTerminalDeviceData());
- // 安全信息
- $request->setRiskCheckData(HuifuBalanceOnlineRefundParam::getRiskCheckData());
- // 设置非必填字段
- $extendInfoMap = HuifuBalanceOnlineRefundParam::getExtendInfos($data,$splitAccount);
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2024/01/03 15:44:57
- * 扫码交易退款
- */
- public function refund($data, $splitAccount = [])
- {
- // 2.组装请求参数
- $request = new V2TradePaymentScanpayRefundRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 申请退款金额
- $request->setOrdAmt($data['amount']);
- // 原交易请求日期
- $request->setOrgReqDate($data['old_req_date']);
- // 设置非必填字段
- $extendInfoMap = HuifuRefundParam::getExtendInfos($data['org_req_seq_id'], $splitAccount);
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua-支付托管
- * 创建时间:2023/12/30 10:27:21
- * 微信小程序预下单接口
- * @data 数据
- * @notify_url 通知地址
- * @expireDate 过期时间
- * @return array
- */
- public function preWxOrder($data, $notify_url, $expireDate, $splitAccount = [])
- {
- // 2.组装请求参数
- $request = new V2TradeHostingPaymentPreorderWxRequest();
- // 预下单类型
- $request->setPreOrderType("3");
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 交易金额
- $request->setTransAmt($data['amount']);
- // 商品描述
- $request->setGoodsDesc($data['goods_title']);
- // 微信小程序扩展参数集合
- $request->setMiniappData(HuifuPreOrderParam::getMiniappDataRucan());
- // 设置非必填字段
- $extendInfoMap = HuifuPreOrderParam::getExtendInfos($expireDate, $notify_url, $splitAccount);
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 支付产品
- * @param $data
- * @param $notify_url
- * @param $expireDate
- * @param $splitAccount
- * @return mixed
- * @throws Exception
- */
- public function preWxOrder2($data, $notify_url, $expireDate, $splitAccount = [])
- {
- try {
- // 2.组装请求参数
- $request = new V2TradePaymentJspayRequest();
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 汇付ID
- $request->setHuifuId($data['huifu_id']);
- // 交易金额
- $request->setTransAmt($data['amount']);
- // 商品描述
- $request->setGoodsDesc($data['goods_title']);
- $request->setTradeType($data['trade_type']);
- // 微信参数集合
- $request->setWxData(HuifuJsPayParam::getWxData($data['mall_id'],$data['open_id']));
- // 设置非必填字段
- $extendInfoMap = HuifuPreOrderParam::getExtendInfos($expireDate, $notify_url, $splitAccount);
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_code'].$resData['resp_desc']);
- }
- }catch (\Exception $e){
- throw new Exception($e->getMessage());
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/30 10:27:21
- * 支付宝预下单接口
- * @data 数据
- * @notify_url 通知地址
- * @expireDate 过期时间
- * @return array
- */
- public function preAliOrder($data, $notify_url, $expireDate, $splitAccount = [])
- {
- // 2.组装请求参数
- $request = new V2TradeHostingPaymentPreorderAliRequest();
- // 预下单类型
- $request->setPreOrderType("2");
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 交易金额
- $request->setTransAmt($data['amount']);
- // 商品描述
- $request->setGoodsDesc($data['goods_title']);
- // app扩展参数集合
- $dto = array();
- // 小程序返回码
- $dto["app_schema"] = "app跳转链接";
- // 私有信息
- // $dto["private_info"] = "";
- $request->setAppData(json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
- // 设置非必填字段
- $extendInfoMap = HuifuPreOrderParam::getExtendInfos($expireDate, $notify_url, $splitAccount);
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/28 13:02:41
- * 聚合正扫接口
- * @data 数据
- * @notify_url 通知地址
- * @expireDate 过期时间
- * @wxData 微信扩展信息
- * @alipayData 支付宝扩展信息
- */
- public function jsPay($data, $notify_url, $expireDate, $splitAccount = [], $wxData = [], $alipayData = [])
- {
- // 2.组装请求参数
- $request = new V2TradePaymentJspayRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 商户号
- $request->setHuifuId($this->config['huifu_id']);
- // 商品描述
- $request->setGoodsDesc($data['goods_title']);
- // 交易类型
- $request->setTradeType($data['trade_type']);
- // 交易金额
- $request->setTransAmt($data['amount']);
- // 设置非必填字段
- $extendInfoMap = HuifuJsPayParam::getExtendInfos($notify_url, $wxData, $alipayData, $expireDate, $splitAccount = []);
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/28 13:05:32
- * 签约银行卡
- * @param array data UserBankCard->id
- * @throws Exception
- * @return bool
- */
- public function signCard($data)
- {
- // 2.组装请求参数
- $request = new V2QuickbuckleApplyRequest;
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 汇付客户Id
- $request->setHuifuId($data['huifu_id']);
- // 商户用户id
- $request->setOutCustId($data['user_id']);
- // 订单号
- $request->setOrderId($data['order_no']);
- // 订单日期
- $request->setOrderDate(date("Ymd"));
- // 银行卡号
- $card_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['bank_card_no'], $this->config['huifupay_public_key']);
- $request->setCardId($card_id_rsa);
- // 银行卡开户姓名
- $real_name_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['payer_name'], $this->config['huifupay_public_key']);
- $request->setCardName($real_name_rsa);
- // 银行卡绑定证件类型
- $request->setCertType("00");
- // 银行卡绑定身份证
- $user_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['id_no'], $this->config['huifupay_public_key']);
- $request->setCertId($user_id_rsa);
- // 个人证件有效期类型
- $request->setCertValidityType($data['is_longer'] ? "1" : '0');
- // 个人证件有效期起始日
- $request->setCertBeginDate(str_replace('-', '', $data['sdate']));
- // 个人证件有效期到期日长期有效不填;<font color="green">示例值:20420905</font>
- $request->setCertEndDate($data['is_longer'] ? '' : str_replace('-', '', $data['edate']));
- // 银行卡绑定手机号
- $mobile_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['mobile_no'], $this->config['huifupay_public_key']);
- $request->setCardMp($mobile_rsa);
- // CVV2信用卡交易专用需要密文传输。<br/>使用汇付RSA公钥加密(加密前3位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);<br/><font color="green">示例值:Ly+fnExeyPOTzfOtgRRur77nJB9TAe4PGgK9M……fc6XJXZss=</font>
- $request->setVipCode('');
- // 卡有效期信用卡交易专用,格式:MMYY,需要密文传输;<br/>使用汇付RSA公钥加密(加密前4位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);<br/><font color="green">示例值:Ly+fnExeyPOTzfOtgRRur77nJB9TAe4PGgK9M……fc6XJXZss=JXZss=</font>
- // $request->setExpiration("test");
- // 挂网协议编号授权信息(招行绑卡需要上送);<font color="green">示例值:34463343</font>
- // $request->setProtocolNo("test");
- // 设备信息域
- // $request->setTrxDeviceInf(getTrxDeviceInf());
- // 设置非必填字段
- $extendInfoMap = HuifuSignParam::getExtendInfos();
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 解绑银行卡
- * @param $data
- * @return true
- */
- public function unbindBankCard($data)
- {
- try {
- $request = new V2QuickbuckleUnbindRequest;
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 请求商户Id
- $request->setHuifuId($data['huifu_id']);
- // 商户用户id
- $request->setOutCustId($data['user_id']);
- // 银行卡号卡密
- $request->setTokenNo($data['sign_no']);
- $client = new BsPayClient();
- $result = $client->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['trans_status'] == 'S') {
- return true;
- }
- throw new Exception($resData['resp_desc']);
- }
- } catch (\Exception $e) {
- Yii::$app->custom->logs('请求错误', $e->getMessage());
- throw new \Exception($e->getMessage());
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/28 13:05:32
- * 确认绑定
- * @param array data UserBankCard->id
- * @throws Exception
- * @return bool
- */
- public function confirmBindSms($data)
- {
- // 2.组装请求参数
- $request = new V2QuickbuckleConfirmRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 汇付商户Id
- $request->setHuifuId($data['huifu_id']);
- // 用户id
- $request->setOutCustId($data['user_id']);
- // 订单号
- $request->setOrderId($data['order_no']);
- // 订单日期
- $request->setOrderDate(date("Ymd"));
- // 银行卡号
- $card_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['bank_card_no'], $this->config['huifupay_public_key']);
- $request->setCardId($card_id_rsa);
- // 银行卡开户姓名
- $real_name_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['payer_name'], $this->config['huifupay_public_key']);
- $request->setCardName($real_name_rsa);
- // 银行卡绑定证件类型
- $request->setCertType("00");
- // 银行卡绑定身份证
- $user_id_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['id_no'], $this->config['huifupay_public_key']);
- $request->setCertId($user_id_rsa);
- // 银行卡绑定手机号
- $mobile_rsa = BsPayTools::encrypt_with_rsa_pubkey($data['mobile_no'], $this->config['huifupay_public_key']);
- $request->setCardMp($mobile_rsa);
- // 验证码
- $request->setVerifyCode($data['code']);
- // CVV2信用卡代扣专用需要密文传输,使用汇付RSA公钥加密(加密前3位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);<br/><font color="green">示例值:Ly+fnExeyPOTzf……rGq0l0NTebfc6XJXZss=</font>
- //$request->setVipCode("BndOZvPCXIMcRJi1uCkw4DiNHht+KkARa+sbKbiLh4cXhjywxYM8GMl7g1a5cc1aD2PD6rVvnGzhhgpJ8mzeb/gbzNcYbU5hEXJZm5HShghGucQJB/SoqCIlyaWlz3hnclaGzznWJa5qNa50mCxVqX4zbpuGPWXv+8AnYTu8/Vk=");
- // 卡有效期信用卡代扣专用,格式:MMYY,需要密文传输。<br/>使用汇付RSA公钥加密(加密前4位,加密后最长2048位),[参见参考文档](https://paas.huifu.com/partners/guide/#/api_jiami_jiemi);<br/><font color="green">示例值:Ly+fnExeyPO……ebfc6XJXZss=</font>
- // $request->setExpiration("test");
- // 设备信息域
- // $request->setTrxDeviceInf(getTrxDeviceInf());
- // 设置非必填字段
- $extendInfoMap = array();
- // 商户名称
- //$extendInfoMap["merch_name"] = "测试";
- // 验卡流水号
- $extendInfoMap["trans_id"] = $data['trans_id'];
- // 卡的借贷类型
- // $extendInfoMap["dc_type"]= "";
- // 风控信息
- // $extendInfoMap["risk_info"]= getRiskInfo();
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/28 13:05:32
- * 发送快捷支付短信
- * @param array data UserBankCard->id
- * @throws Exception
- * @return bool
- */
- public function sendPaySms($data, $notify_url, $expireDate, $splitAccount = [])
- {
- // 2.组装请求参数
- $request = new V2TradeOnlinepaymentQuickpayApplyRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId(date("YmdHis") . mt_rand());
- // 汇付商户Id
- $request->setHuifuId($data['huifu_id']);
- // 用户客户号
- $request->setUserHuifuId($data['cust_id']);
- // 绑卡id
- $request->setCardBindId($data['sign_no']);
- // 订单金额
- $request->setTransAmt($data['amount']);
- // 银行扩展字段
- $request->setExtendPayData(HuifuFastPayParam::getExtendPayData());
- // 安全信息
- $request->setRiskCheckData(HuifuFastPayParam::getRiskCheckData());
- // 设备数据
- $request->setTerminalDeviceData(HuifuFastPayParam::getTerminalDeviceData());
- // 异步通知地址
- $request->setNotifyUrl($notify_url);
- // 设置非必填字段
- $extendInfoMap = HuifuFastPayParam::getExtendInfos($splitAccount, $expireDate);
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/28 13:05:32
- * 发送快捷支付短信确认
- * @param array data UserBankCard->id
- * @throws Exception
- * @return bool
- */
- public function sendPaySmsConfirm($data, $notify_url)
- {
- // 2.组装请求参数
- $request = new V2TradeOnlinepaymentQuickpayConfirmRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId($data['order_id']);
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 短信验证码
- $request->setSmsCode($data['sms_code']);
- // 商品描述
- $request->setGoodsDesc($data['goods_title']);
- // 外部地址
- $request->setNotifyUrl($notify_url);
- $extendInfoMap = [];
- if (!empty($data['delay_acct_flag'])) $extendInfoMap['delay_acct_flag'] = $data['delay_acct_flag'];
- // 设置非必填字段
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- throw new Exception($result->getErrorInfo());
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- throw new Exception($resData['resp_desc']);
- }
- }
- // 单独分账
- public function shareCommission($data, $splitAccount)
- {
- $request = new V2TradePaymentDelaytransConfirmRequest();
- // 请求日期
- $request->setReqDate(date("Ymd"));
- // 请求流水号
- $request->setReqSeqId($data['order_id']);
- // 商户号
- $request->setHuifuId($data['huifu_id']);
- // 订单编号
- $request->setOrgMerOrdId($data['trade_no']);
- $extendInfoMap["acct_split_bunch"] = HuifuPreOrderParam::getAcctSplitBunchRucan($splitAccount);
- // 原交易为快捷支付必填:QUICK_PAY,
- // 原交易为余额支付必填:ACCT_PAYMENT;
- if (!empty($data['pay_type'])) $extendInfoMap["pay_type"] = $data['pay_type'];
- // $extendInfoMap['org_mer_ord_id'] = $data['trade_no'];
- $extendInfoMap['org_req_date'] = $data['org_req_date'];
- $extendInfoMap['org_req_seq_id'] = $data['org_req_seq_id'];
- $request->setExtendInfo($extendInfoMap);
- // 3. 发起API调用
- $result = $this->postRequest($request);
- if (!$result || $result->isError()) { //失败处理
- // throw new \Exception(is_string($result->getErrorInfo()) ? $result->getErrorInfo() : var_export($result->getErrorInfo(), true));
- self::$static_error = !empty($result) ? (is_string($result->getErrorInfo()) ? $result->getErrorInfo() :
- var_export($result->getErrorInfo(), true)) : '未获取到响应数据';
- return false;
- } else { //成功处理
- $resData = $result->getRspDatas();
- $resData = $resData['data'];
- if ($resData['resp_code'] == '00000000' || $resData['resp_code'] == '00000100') {
- return $resData;
- }
- self::$static_error = $resData;
- return false;
- // throw new \Exception($resData['resp_desc']);
- }
- }
- /**
- * 发起post请求,并记录请求日志
- *
- * @param BaseRequest $request
- *
- * @return BsPay
- */
- public function postRequest($request)
- {
- $client = new BsPayClient();
- /** @var $result BsPay */
- $result = $client->postRequest($request);
- // 写入接口请求日志
- try {
- if (is_object($result)) {
- $logRes = HuifupayPayRequestLog::setData(
- $this->mall_id,
- [
- 'mall_id' => $this->mall_id,
- 'url' => $result->getUrl() ?: '',
- 'path' => (new ReflectionClass($request))->getShortName(),
- 'method' => 'post',
- 'request_data' => $result->getReqDatas() ?: [],
- 'response_data' => $result->getRspDatas() ?: '',
- 'http_state_code' => $result->getHttpStateCode() ?: 0,
- 'headers' => $result->getHttpHeaders() ?: [],
- 'err_msg' => $result->getErrorInfo() ?: '',
- ]
- );
- if (!$logRes) {
- throw new RuntimeException(HuifupayPayRequestLog::getStaticError());
- }
- $this->requestId = $logRes['id'];
- }
- }catch (\Exception $e) {
- Yii::$app->custom->logs('【汇付】记录请求日志失败', compact('result', 'request'));
- }
- return $result;
- }
- }
- class HuifuJsPayParam
- {
- /**
- * 作者:zengfanhua
- * 创建时间:2023/12/28 13:45:00
- * @return array
- */
- public static function getExtendInfos($notify_url, $wxData = [], $alipayData = [], $expireDate, $splitAccount = [])
- {
- $extendInfoMap = [];
- // 交易有效期
- $extendInfoMap["time_expire"] = date('YmdHis', $expireDate);
- // 聚合正扫微信拓展参数集合
- $extendInfoMap["wx_data"] = $wxData;
- // 支付宝扩展参数集合
- $extendInfoMap["alipay_data"] = $alipayData;
- // 银联参数集合
- // $extendInfoMap["unionpay_data"]= getUnionpayData();
- // 数字人民币参数集合
- // $extendInfoMap["dc_data"]= getDcData();
- // 分账对象
- $extendInfoMap["acct_split_bunch"] = self::getAcctSplitBunch($splitAccount);
- // 传入分帐遇到优惠的处理规则
- $extendInfoMap["term_div_coupon_type"] = "0";
- // 补贴支付信息
- // $extendInfoMap["combinedpay_data"]= getCombinedpayData();
- // 账户号
- // $extendInfoMap["acct_id"]= "";
- // 手续费扣款标志
- // $extendInfoMap["fee_flag"]= "";
- // 禁用信用卡标记
- $extendInfoMap["limit_pay_type"] = "NO_CREDIT";
- // 是否延迟交易
- $extendInfoMap["delay_acct_flag"] = "N";
- // 商户贴息标记
- $extendInfoMap["fq_mer_discount_flag"] = "N";
- // 渠道号
- $extendInfoMap["channel_no"] = "";
- // 场景类型
- $extendInfoMap["pay_scene"] = "02";
- // 安全信息
- $extendInfoMap["risk_check_data"] = self::getRiskCheckData();
- // 设备信息
- $extendInfoMap["terminal_device_data"] = self::getTerminalDeviceData();
- // 备注
- $extendInfoMap["remark"] = "String";
- // 异步通知地址
- $extendInfoMap["notify_url"] = $notify_url;
- return $extendInfoMap;
- }
- public static function getGoodsDetailWxRucan()
- {
- $dto = array();
- // 商品编码
- // $dto["goods_id"] = "";
- // 商品名称
- // $dto["goods_name"] = "";
- // 商品单价(元)
- // $dto["price"] = "";
- // 商品数量
- // $dto["quantity"] = "";
- // 微信侧商品编码
- // $dto["wxpay_goods_id"] = "";
- $dtoList = array();
- array_push($dtoList, $dto);
- return $dtoList;
- }
- public static function getDetail()
- {
- $dto = array();
- // 单品列表
- // $dto["goods_detail"] = getGoodsDetailWxRucan();
- // 订单原价(元)
- // $dto["cost_price"] = "";
- // 商品小票ID
- // $dto["receipt_id"] = "";
- return $dto;
- }
- public static function getStoreInfo()
- {
- $dto = array();
- // 门店id
- // $dto["id"] = "";
- // 门店名称
- // $dto["name"] = "";
- // 门店行政区划码
- // $dto["area_code"] = "";
- // 门店详细地址
- // $dto["ass"] = "";
- $dtoList = array();
- array_push($dtoList, $dto);
- return $dtoList;
- }
- public static function getSceneInfo()
- {
- $dto = array();
- // 门店信息
- // $dto["store_info"] = getStoreInfo();
- return $dto;
- }
- public static function getWxData($mall_id,$open_id,$extra = [])
- {
- $wechat_config = \Yii::$app->services->pay->getWechatConfig($mall_id);
- $dto = array();
- // 子商户公众账号id
- $dto["sub_appid"] = $wechat_config['mini_program_app_id']??'';
- // 用户标识
- // $dto["openid"] = "";
- // 子商户用户标识
- $dto["sub_openid"] = $open_id;
- // 附加数据
- // $dto["attach"] = "";
- // // 商品描述
- // $dto["body"] = "";
- // // 商品详情
- // $dto["detail"] = getDetail();
- // // 设备号
- // $dto["device_info"] = "";
- // // 订单优惠标记
- // $dto["goods_tag"] = "";
- // // 实名支付
- // $dto["identity"] = "";
- // // 开发票入口开放标识
- // $dto["receipt"] = "";
- // // 场景信息
- // $dto["scene_info"] = getSceneInfo();
- // // 终端ip
- // $dto["spbill_create_ip"] = "";
- // // 单品优惠标识
- // $dto["promotion_flag"] = "";
- // // 新增商品ID
- // $dto["product_id"] = "";
- // // 指定支付者
- // $dto["limit_payer"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getExtendParams()
- {
- $dto = array();
- // 卡类型
- // $dto["card_type"] = "";
- // // 支付宝点餐场景类型
- // $dto["food_order_type"] = "qr_order";
- // // 花呗分期数
- // $dto["hb_fq_num"] = "";
- // // 花呗卖家承担的手续费百分比
- // $dto["hb_fq_seller_percent"] = "";
- // // 行业数据回流信息
- // $dto["industry_reflux_info"] = "String";
- // // 停车场id
- // $dto["parking_id"] = "123wsx";
- // // 系统商编号
- // $dto["sys_service_provider_id"] = "1111111";
- // 信用卡分期资产方式
- // $dto["fq_channels"] = "";
- return $dto;
- }
- public static function getGoodsDetail()
- {
- $dto = array();
- // 商品的编号
- // $dto["goods_id"] = "12312321";
- // // 商品名称(元)
- // $dto["goods_name"] = "阿里";
- // // 商品单价
- // $dto["price"] = "0.01";
- // // 商品数量
- // $dto["quantity"] = "20";
- // // 商品描述信息
- // $dto["body"] = "";
- // // 商品类目树
- // $dto["categories_tree"] = "String";
- // // 商品类目
- // $dto["goods_category"] = "";
- // // 商品的展示地址
- // $dto["show_url"] = "";
- // $dtoList = array();
- // array_push($dtoList, $dto);
- return $dto;
- }
- public static function getExtUserInfo()
- {
- $dto = array();
- // 姓名
- // $dto["name"] = "";
- // 手机号
- // $dto["mobile"] = "";
- // 证件类型
- // $dto["cert_type"] = "";
- // 证件号
- // $dto["cert_no"] = "";
- // 允许的最小买家年龄
- // $dto["min_age"] = "";
- // 是否强制校验付款人身份信息
- // $dto["fix_buyer"] = "";
- // 是否强制校验身份信息
- // $dto["need_check_info"] = "";
- return $dto;
- }
- public static function getAlipayData()
- {
- $dto = array();
- // 买家的支付宝唯一用户号
- $dto["buyer_id"] = "20880414938706770000";
- // 支付宝的店铺编号
- $dto["alipay_store_id"] = "";
- // 买家支付宝账号
- $dto["buyer_logon_id"] = "String";
- // 业务扩展参数
- $dto["extend_params"] = self::getExtendParams();
- // 订单包含的商品列表信息
- $dto["goods_detail"] = self::getGoodsDetail();
- // 商户原始订单号
- $dto["merchant_order_no"] = "String";
- // 商户操作员编号
- $dto["operator_id"] = "123213213";
- // 销售产品码
- $dto["product_code"] = "String";
- // 卖家支付宝用户号
- $dto["seller_id"] = "String";
- // 商户门店编号
- $dto["store_id"] = "";
- // 外部指定买家
- // $dto["ext_user_info"] = getExtUserInfo();
- // 订单标题
- // $dto["subject"] = "";
- // 商家门店名称
- // $dto["store_name"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getPayeeInfo()
- {
- $dto = array();
- // 商户类别
- // $dto["mer_cat_code"] = "";
- // 二级商户代码
- // $dto["sub_id"] = "";
- // 二级商户名称
- // $dto["sub_name"] = "";
- // 终端号
- // $dto["term_id"] = "";
- return $dto;
- }
- public static function getUnionpayData()
- {
- $dto = array();
- // 收款方附加数据
- // $dto["acq_addn_data"] = "";
- // 地区信息
- // $dto["area_info"] = "";
- // 持卡人ip
- // $dto["customer_ip"] = "";
- // 前台通知地址
- // $dto["front_url"] = "";
- // 订单描述
- // $dto["order_desc"] = "";
- // 收款方附言
- // $dto["payee_comments"] = "";
- // 收款方信息
- // $dto["payee_info"] = getPayeeInfo();
- // 银联分配的服务商机构标识码
- // $dto["pnr_ins_id_cd"] = "";
- // 请求方自定义域
- // $dto["req_reserved"] = "";
- // 终端信息
- // $dto["term_info"] = "";
- // 云闪付用户标识
- // $dto["user_id"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getDcData()
- {
- $dto = array();
- // 数字货币银行编号
- // $dto["digital_bank_no"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getAcctInfosRucan($splitAccount)
- {
- $dtoList = array();
- foreach ($splitAccount as $key => $value) {
- $dto = array();
- // 分账金额
- $dto["div_amt"] = $value['num'];
- // 被分账方ID
- $dto["huifu_id"] = $value['id'];
- // 账户号
- $dto["acct_id"] = "";
- array_push($dtoList, $dto);
- }
- return $dtoList;
- }
- public static function getAcctSplitBunch($splitAccount)
- {
- $dto = array();
- if (empty($splitAccount)) {
- return $dto;
- }
- // 分账明细
- $dto["acct_infos"] = self::getAcctInfosRucan($splitAccount);
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getCombinedpayData()
- {
- $dto = array();
- // 补贴方汇付编号
- // $dto["huifu_id"] = "test";
- // 补贴方类型
- // $dto["user_type"] = "test";
- // 补贴方账户号
- // $dto["acct_id"] = "test";
- // 补贴金额
- // $dto["amount"] = "test";
- $dtoList = array();
- array_push($dtoList, $dto);
- return json_encode($dtoList, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getRiskCheckData()
- {
- $dto = array();
- // ip地址
- $dto["ip_addr"] = "180.167.105.130";
- // 基站地址
- $dto["base_station"] = "192.168.1.1";
- // 纬度
- $dto["latitude"] = "33.3";
- // 经度
- $dto["longitude"] = "33.3";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getTerminalDeviceData()
- {
- $dto = array();
- // 商户设备类型
- // $dto["mer_device_type"] = "test";
- // 汇付机具号
- $dto["devs_id"] = "SPINTP357338300264411";
- // 设备类型
- $dto["device_type"] = "1";
- // 交易设备IP
- $dto["device_ip"] = "10.10.0.1";
- // 交易设备MAC
- $dto["device_mac"] = "";
- // 交易设备IMEI
- $dto["device_imei"] = "";
- // 交易设备IMSI
- $dto["device_imsi"] = "";
- // 交易设备ICCID
- $dto["device_icc_id"] = "";
- // 交易设备WIFIMAC
- $dto["device_wifi_mac"] = "";
- // 交易设备GPS
- $dto["device_gps"] = "192.168.0.0";
- // 商户终端应用程序版本
- // $dto["app_version"] = "";
- // SIM 卡卡号
- // $dto["icc_id"] = "";
- // 商户终端实时经纬度信息
- // $dto["location"] = "";
- // 商户交易设备IP
- // $dto["mer_device_ip"] = "";
- // 移动国家代码
- // $dto["mobile_country_cd"] = "";
- // 移动网络号码
- // $dto["mobile_net_num"] = "";
- // 商户终端入网认证编号
- // $dto["network_license"] = "";
- // 商户终端序列号
- // $dto["serial_num"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- }
- class HuifuSignParam
- {
- /**
- * 非必填字段
- *
- */
- public static function getExtendInfos()
- {
- // 设置非必填字段
- $extendInfoMap = array();
- // 商户名称
- //$extendInfoMap["merch_name"] = "全球鹰(浙江)网络科技有限公司";
- // 电子邮箱
- //$extendInfoMap["email"] = "290475886@qq.com";
- // 卡的借贷类型
- // $extendInfoMap["dc_type"]= "";
- // 风控信息
- // $extendInfoMap["risk_info"]= getRiskInfo();
- return $extendInfoMap;
- }
- }
- class HuifuPreOrderParam
- {
- /**
- * 非必填字段
- *
- */
- public static function getExtendInfos($expireDate, $notify_url, $splitAccount)
- {
- // 设置非必填字段
- $extendInfoMap = array();
- // 收银台ID
- $extendInfoMap["checkout_id"] = "";
- // 是否延迟交易
- $extendInfoMap["delay_acct_flag"] = "N";
- // 分账对象
- $extendInfoMap["acct_split_bunch"] = self::getAcctSplitBunchRucan($splitAccount);
- // 交易失效时间
- $extendInfoMap["time_expire"] = date('YmdHis', $expireDate);
- // 业务信息
- // $extendInfoMap["biz_info"]= getBizInfo();
- // 交易异步通知地址
- $extendInfoMap["notify_url"] = $notify_url;
- return $extendInfoMap;
- }
- public static function getAcctInfosRucan($accountList)
- {
- $dtoList = array();
- foreach ($accountList as $key => $value) {
- $dto = array();
- //分账金额
- $dto["div_amt"] = $value['num'];
- // 被分账方ID
- $dto["huifu_id"] = $value['id'];
- array_push($dtoList, $dto);
- }
- return $dtoList;
- }
- public static function getAcctSplitBunchRucan($accountList)
- {
- $dto = array();
- if (empty($accountList)) {
- return $dto;
- }
- // 分账明细
- $dto["acct_infos"] = self::getAcctInfosRucan($accountList);
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getMiniappDataRucan()
- {
- $dto = array();
- // 是否生成scheme_code
- $dto["need_scheme"] = "N"; // 之前是Y
- // 应用ID
- $dto["seq_id"] = "";
- // 私有信息
- $dto["private_info"] = "oppsHosting://";
- return $dto;
- //return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getPayCheckWx()
- {
- $dto = array();
- // 指定支付者
- // $dto["limit_payer"] = "";
- // 微信实名验证
- // $dto["real_name_flag"] = "";
- return $dto;
- }
- public static function getPersonPayer()
- {
- $dto = array();
- // 姓名
- // $dto["name"] = "";
- // 证件类型
- // $dto["cert_type"] = "";
- // 证件号
- // $dto["cert_no"] = "";
- return $dto;
- }
- public function getBizInfo()
- {
- $dto = array();
- // 付款人验证(微信)
- // $dto["payer_check_wx"] = getPayCheckWx();
- // 个人付款人信息
- // $dto["person_payer"] = getPersonPayer();
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- }
- class HuifuRefundParam
- {
- /**
- * 非必填字段
- *
- */
- public static function getExtendInfos($org_req_seq_id, $splitAccount = [])
- {
- // 设置非必填字段
- $extendInfoMap = array();
- // 原交易全局流水号
- //$extendInfoMap["org_hf_seq_id"] = '';
- // 原交易微信支付宝的商户单号
- // $extendInfoMap["org_party_order_id"]= "";
- // 原交易请求流水号
- $extendInfoMap["org_req_seq_id"]= $org_req_seq_id;
- // 分账对象
- $extendInfoMap["acct_split_bunch"] = self::getAcctSplitBunchRucan($splitAccount);
- // 聚合正扫微信拓展参数集合
- // $extendInfoMap["wx_data"]= self::getWxData();
- // 数字货币扩展参数集合
- // $extendInfoMap["digital_currency_data"]= self::getDigitalCurrencyData();
- // 补贴支付信息
- // $extendInfoMap["combinedpay_data"]= self::getCombinedpayData();
- // 备注
- // $extendInfoMap["remark"]= "";
- // 是否垫资退款
- // $extendInfoMap["loan_flag"]= "";
- // 垫资承担者
- // $extendInfoMap["loan_undertaker"]= "";
- // 垫资账户类型
- // $extendInfoMap["loan_acct_type"]= "";
- // 安全信息
- // $extendInfoMap["risk_check_data"]= self::getRiskCheckData();
- // 设备信息
- // $extendInfoMap["terminal_device_data"]= self::getTerminalDeviceData();
- // 异步通知地址
- // $extendInfoMap["notify_url"]= "";
- return $extendInfoMap;
- }
- public static function getAcctInfosRucan($splitAccount)
- {
- $dtoList = array();
- foreach ($splitAccount as $key => $value) {
- $dto = array();
- // 分账金额
- $dto["div_amt"] = $value['num'];
- // 被分账方ID
- $dto["huifu_id"] = $value['id'];
- // 账户号
- $dto["acct_id"] = "";
- array_push($dtoList, $dto);
- }
- return $dtoList;
- }
- public static function getAcctSplitBunchRucan($splitAccount)
- {
- $dto = array();
- if (empty($splitAccount)) {
- return $dto;
- }
- // 分账信息列表
- $dto["acct_infos"] = self::getAcctInfosRucan($splitAccount);
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getGoodsDetail()
- {
- $dto = array();
- // 商品编码
- // $dto["goods_id"] = "test";
- // 优惠退款金额
- // $dto["refund_amount"] = "test";
- // 商品退货数量
- // $dto["refund_quantity"] = "test";
- // 商品单价
- // $dto["price"] = "test";
- $dtoList = array();
- array_push($dtoList, $dto);
- return $dtoList;
- }
- public static function getDetail()
- {
- $dto = array();
- // 商品详情列表
- // $dto["goods_detail"] = getGoodsDetail();
- return $dto;
- }
- public static function getWxData()
- {
- $dto = array();
- // 退款商品详情
- // $dto["detail"] = getDetail();
- return $dto;
- }
- public static function getDigitalCurrencyData()
- {
- $dto = array();
- // 退款原因
- // $dto["refund_desc"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getCombinedpayData()
- {
- $dto = array();
- // 补贴方汇付编号
- // $dto["huifu_id"] = "test";
- // 补贴方类型
- // $dto["user_type"] = "test";
- // 补贴方账户号
- // $dto["acct_id"] = "test";
- // 补贴金额
- // $dto["amount"] = "test";
- $dtoList = array();
- array_push($dtoList, $dto);
- return json_encode($dtoList, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getRiskCheckData()
- {
- $dto = array();
- // ip地址
- // $dto["ip_addr"] = "";
- // 基站地址
- // $dto["base_station"] = "";
- // 纬度
- // $dto["latitude"] = "";
- // 经度
- // $dto["longitude"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- public static function getTerminalDeviceData()
- {
- $dto = array();
- // 设备类型
- // $dto["device_type"] = "";
- // 交易设备IP
- // $dto["device_ip"] = "";
- // 交易设备MAC
- // $dto["device_mac"] = "";
- // 交易设备IMEI
- // $dto["device_imei"] = "";
- // 交易设备IMSI
- // $dto["device_imsi"] = "";
- // 交易设备ICCID
- // $dto["device_icc_id"] = "";
- // 交易设备WIFIMAC
- // $dto["device_wifi_mac"] = "";
- // 交易设备GPS
- // $dto["device_gps"] = "";
- return json_encode($dto, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
- }
- }
|