2,//'微信公众号支付', // 'WECHAT_JSXCX' => '微信小程序支付', // 'ALIPAY_ALSHH' => '支付宝生活号支付', // 'ALIPAY_ALXCX' => '支付宝小程序支付', 'ALIPAY_NATIVE' => 1 //'支付宝主扫' ]; public function apply($loginNo, $email, $token) { $data = []; $data['loginNo'] = $loginNo; $data['email'] = $email; $data['notifyUrl'] = NotifyList::getNotifyUrl('apply', $token); return $this->pc('apply', $data); } public function register($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; $data['dataContent'] = NotifyList::getNotifyUrl('register', $token); return $this->h5('register', $data, $token); } public function cardBind($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; $data['dataContent'] = NotifyList::getNotifyUrl('card-bind', $token); return $this->h5('card-bind', $data, $token); } public function cardUnbind($loginNo, $agreementNo, $requestNo = '') { if (empty($requestNo)) { $requestNo = StringHelper::generateOrderNo(StringHelper::ORDER_NO_TYPE_UNBIND_CARD); } $data = []; $data['loginNo'] = $loginNo; $data['requestNo'] = $requestNo; $data['agreementNo'] = $agreementNo; return $this->api('unbind-card', $data); } public function getBalance($loginNo) { $data = []; $data['loginNo'] = $loginNo; $data['accountType'] = 'BALANCE'; return $this->api('get-balance-new', $data); } public function withdraw($params, $token) { $data = []; $data['amount'] = $params['amount']; $data['loginNo'] = $params['loginNo']; $data['agreementNo'] = Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()); $data['outOrderNo'] = $params['outOrderNo']; $data['notifyUrl'] = NotifyList::getNotifyUrl('withdraw', $token); return $this->withReturnUrl($this->api('withdraw', $data), $token); } public function assurePaymentSplit($params, $token) { $data = []; $data['loginNo'] = $params['loginNo']; $data['amount'] = $params['amount']; $data['outOrderNo'] = $params['outOrderNo']; $data['paidType'] = $params['paidType'] ?: 'CARD'; $data['agreementNo'] = Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()); $data['splitInfoList'] = json_encode($params['splitInfoList']); $data['expireDate'] = date('YmdHis', time() + 15*60); $data['validDate'] = date('Ymd'); $data['notifyUrl'] = $params['notifyUrl']; return $this->withReturnUrl($this->api('assure-payment-split', $data), $token); } public function paymentSplit($params, $token) { $data = []; $data['loginNo'] = $params['loginNo']; $data['amount'] = $params['amount']; $data['outOrderNo'] = $params['outOrderNo']; $data['paidType'] = $params['paidType'] ?: 'CARD'; $data['agreementNo'] = Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()); $data['splitInfoList'] = json_encode($params['splitInfoList']); $data['pwdPayExpTime'] = $params['pwdPayExpTime']; $data['notifyUrl'] = NotifyList::getNotifyUrl('payment', $token); return $this->withReturnUrl($this->api('payment-split', $data), $token); } public function transferSplitPay($params, $token) { $dataContent = [ 'goodsName' => $params['goodsName'], 'amount' => $params['amount'], 'outOrderNo' => $params['outOrderNo'], 'agreementNo' => Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()), 'notifyUrl' => NotifyList::getNotifyUrl('payment', $token), 'expireDate' => $params['expireDate'], 'validDate' => $params['validDate'], 'splitInfoList' => $params['splitInfoList'], 'marketInfo' => [ 'marketAmount' => $params['marketInfo']['amount'], 'remark' => $params['marketInfo']['remark'], ], ]; $data = []; $data['loginNo'] = $params['loginNo']; $data['callType'] = 'TRANSFER_ASSURE_PORTFOLIO_PAYMENT'; $data['dataContent'] = json_encode($dataContent, JSON_UNESCAPED_UNICODE); $data['isDeductMarketAmount'] = '0'; return $this->api('transfer-split-pay', $data); } public function unifyPay($params) { $dataContent = [ 'goodsName' => $params['goodsName'], 'amount' => $params['amount'], 'outOrderNo' => $params['outOrderNo'], 'expireDate' => date('YmdHis', time() + 15*60), 'notifyUrl' => $params['notifyUrl'], 'splitInfoList' => $params['splitInfoList'], 'paidType' => $params['paidType'], 'validDate' => date('Ymd'), ]; $data = []; $data['loginNo'] = $params['loginNo']; $data['orderType'] = 'SPLIT_PAY'; $data['dataContent'] = json_encode($dataContent); // 1.微信支付(公众号、小程序)需填公众号授权获取微信用户openid // 2.支付宝支付(生活号、小程序)需填生活号授权获取支付宝用户userid // 3.支付宝主扫可不填写 $data['channelId'] = $params['channelId'] ?: ''; $data['forbidCredit'] = $params['forbidCredit'] ? 1 : 0; $data['simId'] = $params['simId'] ?: $this->getSimID($params['paidType']); $data['isRaw'] = 0; $data['appId'] = $params['appId'] ?: ''; $data['anonymityPayRemark'] = $params['anonymityPayRemark']; $res = base64_decode($this->api('unifyPay', $data)['data']); if(self::PEYMENT_PAID_TYPE[$params['paidType']]){ $res = json_decode($res, true); if($res['body']){ return $res['body']; } } } public function cloudB2cAssureRecharge($params){ $dataContent = [ 'goodsName' => $params['goodsName'], 'amount' => $params['amount'], 'outOrderNo' => $params['outOrderNo'], 'notifyUrl' => $params['notifyUrl'], 'splitInfoList' => $params['splitInfoList'], 'expireDate' => date('YmdHis', time() + 15*60), 'validDate' => date('Ymd'), ]; $data = []; $data['loginNo'] = $params['loginNo']; $data['payId'] = $params['payId']; $data['dataContent'] = json_encode($dataContent); return $this->api('cloud-b2c-assure-recharge', $data); } public function payment($params, $token) { $dataContent = [ 'goodsName' => $params['goodsName'], 'amount' => $params['amount'], 'outOrderNo' => $params['outOrderNo'], 'expireDate' => $params['expireDate'], 'notifyUrl' => NotifyList::getNotifyUrl('payment', $token), 'splitInfoList' => $params['splitInfoList'], 'paidType' => $params['paidType'], 'validDate' => date('Ymd'), ]; $data = []; $data['loginNo'] = $params['loginNo']; $data['simId'] = $this->getSimID($params['paidType']); // 1.微信支付(公众号、小程序)需填公众号授权获取微信用户openid // 2.支付宝支付(生活号、小程序)需填生活号授权获取支付宝用户userid // 其余时间不传 $data['chanalId'] = $params['chanalId'] ?? ''; $data['dataContent'] = json_encode($dataContent); // 1.微信支付(公众号、小程序)需填公众号授权获取微信的appid // 2.支付宝支付(生活号、小程序)需填生活号授权获取支付宝的appid // 支付宝主扫 不需要 $data['appId'] = $params['appId'] ?: ''; $data['isRaw'] = 0; $data['callType'] = $params['callType']; $res = base64_decode($this->api('payment', $data)); return json_decode($res, true); } public function recharge($params, $token) { $data = []; $data['loginNo'] = $params['loginNo']; $data['amount'] = $params['amount']; $data['outOrderNo'] = $params['outOrderNo']; $data['agreementNo'] = Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()); $data['notifyUrl'] = NotifyList::getNotifyUrl('recharge', $token); return $this->withReturnUrl($this->api('recharge', $data), $token); } public function merchantTransferRecharge($params, $token) { $data = []; $data['loginNo'] = $params['loginNo']; $data['amount'] = $params['amount']; $data['outOrderNo'] = $params['outOrderNo']; $data['agreementNo'] = Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()); $data['notifyUrl'] = NotifyList::getNotifyUrl('recharge', $token); return $this->api('merchant-transfer-recharge', $data); } public function confirmAssurePay($params) { $dataContent = [ 'amount' => $params['amount'], 'outOrderNo' => $params['outOrderNo'], 'assureConfirmSplitInfoList' => $params['assureConfirmSplitInfoList'], 'oldOutOrderNo' => $params['oldOutOrderNo'], ]; $data = []; $data['loginNo'] = $params['loginNo']; $data['dataContent'] = json_encode($dataContent); $data['notifyUrl'] = $params['notifyUrl']; return $this->api('confirm-assure-pay', $data); } public function confirmAssurePortfolioPay($params, $token) { $dataContent = [ 'amount' => $params['amount'], 'outOrderNo' => $params['outOrderNo'], 'assureConfirmSplitInfoList' => $params['assureConfirmSplitInfoList'], 'oldOutOrderNo' => $params['oldOutOrderNo'], ]; $data = []; $data['loginNo'] = $params['loginNo']; $data['dataContent'] = json_encode($dataContent); $data['notifyUrl'] = NotifyList::getNotifyUrl('confirm-assure-portfolio-pay', $token); return $this->api('confirm-assure-portfoli-pay', $data); } public function findBindBankCards($params) { $data = []; $data['loginNo'] = $params['loginNo']; $data['contractNo'] = $params['contractNo']; $data['tradeType'] = 'BASE_LIST'; return $this->api('find-bind-bank-cards', $data); } public function queryCustomerInfo($loginNo, $customerType = 'PERSON') { $requestNo = StringHelper::generateOrderNo(StringHelper::ORDER_NO_TYPE_QUERY_CUSTOMER_INFO); $data = []; $data['loginNo'] = $loginNo; $data['customerType'] = $customerType; $data['requestNo'] = $requestNo; $result = $this->api('query-customer-info', $data); return json_decode($result, true); } public function pwdModify($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; return $this->h5('pwd-modify', $data, $token); } public function enterprisePwdModify($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; return $this->h5('enterprise-pwd-modify', $data, $token); } public function pwdForget($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; return $this->h5('pwd-forget', $data, $token); } public function pwReset($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; return $this->h5('pw-reset', $data, $token); } public function refund($params, $token) { $data = []; $data['loginNo'] = $params['loginNo']; $data['refundTradeId'] = $params['refundTradeId']; $data['orgTradeId'] = $params['orgTradeId']; $data['refundMoney'] = $params['refundMoney']; $data['refundReason'] = $params['refundReason']; if ($params['refundSplitInfoList']) { $data['refundSplitInfoList'] = json_encode($params['refundSplitInfoList']); } else { $data['oldSubOutOrderNo'] = $params['oldSubOutOrderNo']; } $data['notifyUrl'] = NotifyList::getNotifyUrl('refund', $token); return $this->api('refund-request', $data); } public function modifyLoginNo($origLoginNo, $loginNo) { $data = []; $data['loginNo'] = $loginNo; $data['origLoginNo'] = $origLoginNo; return $this->api('modify-login-no', $data); } public function enterpriseUnbindCard($loginNo, $agreementNo, $token) { $data = []; $data['loginNo'] = $loginNo; $data['agreementNo'] = $agreementNo; $data['notifyUrl'] = NotifyList::getNotifyUrl('enterprise-unbind-card', $token); return $this->api('enterprise-unbind-card', $data); } public function sendBindCardEmail($loginNo) { $data = []; $data['loginNo'] = $loginNo; return $this->api('send-bind-card-email',$data); } public function applyBindCard($loginNo, $info, $token) { $data = []; $data['loginNo'] = $loginNo; $data['cardNo'] = BFRSA::encryptByCERFile($info['cardNo'], config('baofu.cerFilePath')); $data['cardName'] = $info['cardName']; $data['bankName'] = $info['bankName']; $data['branchName'] = $info['branchName']; $data['provinceName'] = $info['provinceName']; $data['cityName'] = $info['cityName']; $data['notifyUrl'] = NotifyList::getNotifyUrl('apply-bind-card', $token); return $this->api('apply-bind-card', $data); } public function openAccount($loginNo, $info) { $data = []; $data['loginNo'] = $loginNo; $data['customerName'] = BFRSA::encryptByCERFile($info['customerName'], config('baofu.cerFilePath')); $data['certificateNo'] = BFRSA::encryptByCERFile($info['certificateNo'], config('baofu.cerFilePath')); $data['base64imageFront'] = $info['imageFront']; $data['base64imageBack'] = $info['imageBack']; return $this->api('open-account', $data); } public function bindCard($loginNo, $info, $token) { $data = []; $data['loginNo'] = $loginNo; $data['cardNo'] = BFRSA::encryptByCERFile($info['cardNo'], config('baofu.cerFilePath')); $data['bankMobile'] = BFRSA::encryptByCERFile($info['bankMobile'], config('baofu.cerFilePath')); $data['notifyUrl'] = NotifyList::getNotifyUrl('card-bind', $token); return $this->api('bind-card',$data); } public function fixedBinding($loginNo, $info, $token) { $data = []; $data['loginNo'] = $loginNo; $data['requestNo'] = $info['requestNo']; $data['verifyCode'] = $info['verifyCode']; $result = $this->api('bind-card-check', $data); return $this->withReturnUrl($result['url'], $token); } public function profitShareRefundApply($params){ $data = []; $data['loginNo'] = $params['loginNo'] ?: '';// 匿名支付不需要传 $data['refundTradeId'] = $params['refundTradeId']; $data['refundTradeType'] = 'REFUND_APPLY'; $data['orgTradeId'] = $params['orgTradeId']; $data['refundAmount'] = $params['refundAmount']; // 单位:分 $data['refundReason'] = $params['refundReason']; $data['refundSplitInfoList'] = $params['refundSplitInfoList']; return $this->api('profit-share-refund-apply', $data); } public function profitShareRefundConfirm($params, $token){ $data = []; $data['loginNo'] = $params['loginNo'] ?: '';// 匿名支付不需要传 $data['refundTradeId'] = $params['refundTradeId']; // 与退款申请中的退款请求订单号一致 $data['refundTradeType'] = 'REFUND_CONFIRM'; $data['orgTradeId'] = $params['orgTradeId']; // 原始支付商户订单号 $data['refundAmount'] = $params['refundAmount']; // 单位:分 $data['notifyUrl'] = NotifyList::getNotifyUrl('confirm-split', $token); return $this->api('profit-share-refund-confirm', $data); } public function profitShareRefundCancel($params){ $data = []; $data['loginNo'] = $params['loginNo'] ?: '';// 匿名支付不需要传 $data['refundTradeId'] = $params['refundTradeId']; // 与退款申请中的退款请求订单号一致 $data['refundTradeType'] = 'REFUND_CANCEL'; return $this->api('profit-share-refund-cancel', $data); } public function merchantReportCreate($params){ $data = []; $data['uniqueId'] = $params['uniqueId']; $data['loginNo'] = $params['loginNo']; $data['reportType'] = $params['reportType']; $data['bizContent'] = json_encode([ 'servicePhone' => $params['servicePhone'], 'businessLicense' => $params['businessLicense'], 'businessLicenseType' => $params['businessLicenseType'], 'merchantName' => $params['merchantName'], 'merchantShortName' => $params['merchantShortName'], 'channelId' => $this->getChannelId(), 'channelName' => $this->getChannelName(), 'business' => $params['business'], 'contactWechatIdType' => $params['contactWechatIdType'], 'contactWechatId' => $params['contactWechatId'], 'serviceCodes' => $params['serviceCodes'], 'addressInfo' => $params['addressInfo'], 'bankCardInfo' => $params['bankCardInfo'] ]); return $this->api('merchant-report-create', $data); } public function authBind($params){ $data = []; $data['simId'] = $params['simId']; $data['authType'] = $params['authType']; $data['authContent'] = $params['authContent']; return $this->api('auth-bind', $data); } public function queryOrder($params){ $data = []; $data['loginNo'] = $params['loginNo']; $data['tradeId'] = $params['tradeId']; return $this->api('query-order', $data); } public function transferWithdraw($params) { $items = []; foreach ($params['transContent'] as $transItem) { $item = []; $item['transNo'] = $transItem['transNo']; $item['transMoney'] = $transItem['transMoney']; $item['transType'] = $transItem['transType']; $item['transAccNo'] = $transItem['transAccNo']; $item['transAccName'] = $transItem['transAccName']; $item['transSummary'] = $transItem['transSummary'] ?? '转账'; if ($transItem['transType'] == 0) { // 付款类型为银行时 传银行信息 $item['cardBankName'] = $transItem['cardBankName']; $item['cardProName'] = $transItem['cardProName']; $item['cardCityName'] = $transItem['cardCityName']; $item['cardAccDept'] = $transItem['cardAccDept']; $item['cardCnap'] = $transItem['cardCnap']; $item['transIdCard'] = $transItem['transIdCard']; $item['transMobile'] = $transItem['transMobile']; } ksort($item); $items[] = $item; } $body = ['transContent' => $items]; return $this->unionPayPost($body, 'T-1001-003-01'); } public function transferWithdrawQuery($params) { $items = []; foreach ($params['transContent'] as $transItem) { $item = []; $item['transNo'] = $transItem['transNo']; $item['transBatchId'] = $transItem['transBatchId']; ksort($item); $items[] = $item; } $body = ['transContent' => $items]; return $this->unionPayPost($body, 'T-1001-003-02'); } private function unionPayPost($body, $serviceTp) { $header = []; $header['memberId'] = $this->getMerchantNo(); $header['terminalId'] = $this->getTerminalNo(); $header['serviceTp'] = $serviceTp; $header['verifyType'] = 1; $content = [ 'header' => $header, 'body' => $body, ]; ksort($content); echo json_encode($content); echo PHP_EOL; $contentSign = Rsa::encryptedByPrivateKey(json_encode($content), $this->getPfxFilePath(), $this->getPrivateKeyPassword()); $header['content'] = $contentSign; echo json_encode($header); echo PHP_EOL; $url = 'https://public.baofu.com/union-gw/api/' . $header['serviceTp'] . '/transReq.do'; $response = HttpClient::post($url, $header); echo $response; echo PHP_EOL; $result = Rsa::decryptByPublicKey($response, $this->getCerFilePath()); echo $result; echo PHP_EOL; $result = json_decode($result, true); if ($result['header']['sysRespCode'] == 'S_0000' && $result['body']['transHeader']['returnCode'] == '0000') { return $result['body']['transContent']; } else { $msg = $result['header']['sysRespCode'] == 'S_0000' ? $result['body']['transHeader']['returnMsg'] : $result['header']['sysRespDesc']; throw new BusinessException($msg); } } public function signWithdrawEntrust($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; return $this->h5('sign-withdraw-entrust', $data, $token); } public function unbindWithdrawEntrust($loginNo, $token) { $data = []; $data['loginNo'] = $loginNo; return $this->h5('unbind-withdraw-entrust', $data, $token); } public function entrustWithdraw($params, $token) { $data = []; $data['amount'] = $params['amount']; $data['loginNo'] = $params['loginNo']; $data['agreementNo'] = Rsa::encryptByCERFile($params['agreementNo'], $this->getCerFilePath()); $data['outOrderNo'] = $params['outOrderNo']; $data['notifyUrl'] = NotifyList::getNotifyUrl('withdraw', $token); return $this->withReturnUrl($this->api('entrust-withdraw', $data), $token); } public function findSignEntrustResult($loginNo, $agreementType = 'W_ENTRUST') { $data = []; $data['loginNo'] = $loginNo; $data['agreementType'] = $agreementType; return $this->api('find-sign-entrust-result', $data); } }