/** * 还款 * @param deal $deal 标的数据 * @param array $repaylist 还款列表 * @param int $deal_repay_id 还款计划ID * @param int $MerCode 商户ID * @param string $cert_md5 * @param string $post_url * @return string */ function RepaymentNewTrade($deal, $repaylist, $deal_repay_id, $MerCode, $cert_md5, $post_url) { $pWebUrl = SITE_DOMAIN . APP_ROOT . "/index.php?ctl=collocation&act=response&class_name=Ips&class_act=RepaymentNewTrade&from=" . $_REQUEST['from']; //web方式返回 $pS2SUrl = SITE_DOMAIN . APP_ROOT . "/index.php?ctl=collocation&act=notify&class_name=Ips&class_act=RepaymentNewTrade&from=" . $_REQUEST['from']; //s2s方式返回 $user = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "user where id = " . $deal['user_id']); $deal_id = $deal['id']; $pOutAmt = 0; $pOutFee = 0; $data = array(); $data['deal_id'] = $deal_id; $data['deal_repay_id'] = $deal_repay_id; $data['pMerCode'] = $MerCode; //“平台”账 号 由IPS颁发的商户号', $data['pMerBillNo'] = $deal_id . 'RT' . get_gmtime(); //'商户订单号 否 商户系统唯一不重复', $data['pRepaymentDate'] = to_date(get_gmtime(), 'Ymd'); //还款日期 格式:YYYYMMDD, $data['pBidNo'] = $deal_id; // '标的号 否 原投资交易的标的号,字母和数字,如a~z,A~Z,0~9 ', $data['pRepayType'] = 1; //'还款类型,1#手动还款,2#自动还款', $data['pIpsAuthNo'] = ''; //授权号 是/否 当还款类型为自动还款时不为空,为手动还款时为空 $data['pOutAcctNo'] = $user['ips_acct_no']; //转出方IPS账号 否 借款人在IPS注册的资金托管账号 $data['pOutAmt'] = 0; //'转出金额 否 表示此次还款总金额。 转出金额=Sum(pInAmt) Sum(pInAmt)代表转入金额的合计,一个或多个 投资人时的还款金额的累加。 金额单位:元,不能为负,不允许为 0,保留 2 位小 数; 格式:12.00 ', $data['pOutFee'] = 0; //'转出方总手续费 否 表示此次借款人或担保人所承担的还款手续费,此手 续费由商户平台向用户收取。 金额单位:元,不能为负,允许为0,保留 2位小数; 格式:12.00 pOutFee = Sum(pOutInfoFee) Sum(pOutInfoFee)代表转出方手续费的合计 ', //print_r($repaylist);die(); $GLOBALS['db']->autoExecute(DB_PREFIX . "ips_repayment_new_trade", $data, 'INSERT'); $id = $GLOBALS['db']->insert_id(); if ($id > 0) { $result['data'] = $data; $details = array(); $result['id'] = $id; foreach ($repaylist as $k => $v) { $detail = array(); $detail['pid'] = $id; $detail['deal_load_repay_id'] = $v['id']; $detail['impose_money'] = round($v['impose_money'], 2); $detail['repay_manage_impose_money'] = $v['repay_manage_impose_money']; $detail['repay_status'] = intval($v['status']) - 1; $detail['true_repay_time'] = TIME_UTC; //$detail['self_money'] = round($v['self_money'],2); //$detail['manage_interest_money'] = $v['manage_interest_money']; //转出方手续费 ===》收取:借款者 的管理费 + 管理逾期罚息 $item['repay_manage_money'] + $item['repay_manage_impose_money'] //转入方手续费 ===》收取:投资者 的管理费 $item['manage_money'] //转入金额 ===》还款金额 + 逾期罚息 $item['month_repay_money'] + $item['impose_money'] $detail['pInFee'] = str_replace(',', '', number_format(round($v['manage_money'] + $v['manage_interest_money'], 2), 2)); //转入方手续费 否 表示此次还款债权人所承担的还款手续费,此手续费由商 户平台向用户收取。金额单位:元,不能为负,允许为0,保留2位小数; 格式:12.00 $detail['pOutInfoFee'] = str_replace(',', '', number_format(round($v['repay_manage_money'] + $v['repay_manage_impose_money'], 2), 2)); //转出方手续费 否 表示此次借款人或担保人所承担的还款明细手续费,此手 续费由商户平台收取。; $detail['pInAmt'] = str_replace(',', '', number_format(round($v['month_repay_money'] + $v['impose_money'], 2), 2)); //转入金额 否 格式:0.00 必须大于0 且大于转入方手续费 if ($v['t_user_id']) { //债权转让后,还款时,转给:承接者, 在债权转让后需要更新 fanwe_deal_load_repay.t_user_id 数据值 $pInAcctNo = $v['t_ips_acct_no']; $detail['pCreMerBillNo'] = $v['t_pMerBillNo']; //登记债权人时提 交的订单号 否 登记债权人时提交的订单号,见<登记债权人接口>请求 参数中的“pMerBillNo” ' } else { $pInAcctNo = $v['ips_acct_no']; $detail['pCreMerBillNo'] = $v['pMerBillNo']; //登记债权人时提 交的订单号 否 登记债权人时提交的订单号,见<登记债权人接口>请求 参数中的“pMerBillNo” ' } $detail['pInAcctNo'] = $pInAcctNo; //转出方 IPS 托管 账户号 否 账户类型为1时,IPS个人托管账户号 账户类型为0时,由 IPS颁发的商户号 转账类型,1:投资,此为转出方(投资人); 转账类型,2:代偿,此为转出方(担保方); 转账类型,3:代偿还款,此为转出方(借款人); 转账类型,4:债权转让,此为转出方(受让方); 转账类型,5:结算担保收益,此为转出方(借款人); ' $pOutAmt = $pOutAmt + $detail['pInAmt']; $pOutFee = $pOutFee + $detail['pOutInfoFee']; $GLOBALS['db']->autoExecute(DB_PREFIX . "ips_repayment_new_trade_detail", $detail, 'INSERT'); $details[] = $detail; } $data2['pOutAmt'] = str_replace(',', '', number_format($pOutAmt, 2)); //'转出金额 否 表示此次还款总金额。 转出金额=Sum(pInAmt) Sum(pInAmt)代表转入金额的合计,一个或多个 投资人时的还款金额的累加。 金额单位:元,不能为负,不允许为 0,保留 2 位小 数; 格式:12.00 ', $data2['pOutFee'] = str_replace(',', '', number_format($pOutFee, 2)); //'转出方总手续费 否 表示此次借款人或担保人所承担的还款手续费,此手 续费由商户平台向用户收取。 金额单位:元,不能为负,允许为0,保留 2位小数; 格式:12.00 pOutFee = Sum(pOutInfoFee) Sum(pOutInfoFee)代表转出方手续费的合计 ', $data['pOutAmt'] = $data2['pOutAmt']; $data['pOutFee'] = $data2['pOutFee']; $GLOBALS['db']->autoExecute(DB_PREFIX . "ips_repayment_new_trade", $data2, 'UPDATE', ' id = ' . $id); } //print_r($repaylist);die(); $pDetails = ''; foreach ($details as $k => $v) { $pDetails .= RepaymentNewTradeRowXml($v); } $strxml = RepaymentNewTradeXml($data, $pDetails, $pWebUrl, $pS2SUrl); //echo $strxml;exit; $Crypt3Des = new Crypt3Des(); //new 3des class $p3DesXmlPara = $Crypt3Des->DESEncrypt($strxml); //3des 加密 $str = $MerCode . $p3DesXmlPara . $cert_md5; //print_r($cert_md5); exit; $pSign = md5($str); $html = ' <form name="form1" id="form1" method="post" action="' . $post_url . 'RepaymentNewTrade.aspx" target="_self"> <input type="hidden" name="pMerCode" value="' . $MerCode . '" /> <input type="hidden" name="p3DesXmlPara" value="' . $p3DesXmlPara . '" /> <input type="hidden" name="pSign" value="' . $pSign . '" /> </form> <script language="javascript">document.form1.submit();</script>'; //echo $html; exit; $ips_log = array(); $ips_log['code'] = 'RepaymentNewTrade'; $ips_log['create_date'] = to_date(TIME_UTC, 'Y-m-d H:i:s'); $ips_log['strxml'] = $strxml; $ips_log['html'] = $html; $GLOBALS['db']->autoExecute(DB_PREFIX . "ips_log", $ips_log); return $html; }
/** * 还款 * @param deal $deal 标的数据 * @param array $repaylist 还款列表 * @param int $deal_repay_id 还款计划ID * @param int $MerCode 商户ID * @param string $cert_md5 * @param string $post_url * @return string */ function RepaymentNewTrade($deal, $repaylist, $deal_repay_id, $platformNo, $post_url) { $pWebUrl = SITE_DOMAIN . APP_ROOT . "/index.php?ctl=collocation&act=response&class_name=Yeepay&class_act=RepaymentNewTrade&from=" . $_REQUEST['from']; //web方式返回 $pS2SUrl = SITE_DOMAIN . APP_ROOT . "/index.php?ctl=collocation&act=notify&class_name=Yeepay&class_act=RepaymentNewTrade&from=" . $_REQUEST['from']; //s2s方式返回 $fee = 0; //--记录日志 $yeepay_log = array(); $yeepay_log['code'] = 'toCpTransaction'; $yeepay_log['create_date'] = to_date(TIME_UTC, 'Y-m-d H:i:s'); $GLOBALS['db']->autoExecute(DB_PREFIX . "yeepay_log", $yeepay_log); $requestNo = $GLOBALS['db']->insert_id(); $cp_t = array(); $cp_t['requestNo'] = $requestNo; $cp_t['platformNo'] = $platformNo; $cp_t['platformUserNo'] = $deal["user_id"]; $u_info = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "user where user_id = " . $deal['user_id']); $cp_t['userType'] = $u_info; $cp_t['bizType'] = 'REPAYMENT'; if ($u_info['user_type'] == 0) { $cp_t['userType'] = 'MEMBER'; } else { $cp_t['userType'] = 'MERCHANT'; } $cp_t['tenderOrderNo'] = $deal["id"]; $cp_t['tenderName'] = $deal["sub_name"]; $cp_t['tenderAmount'] = $deal["borrow_amount"]; $cp_t['deal_repay_id'] = $deal_repay_id; $cp_t['tenderDescription'] = $deal['name']; //项目描述信息 $cp_t['borrowerPlatformUserNo'] = $deal['user_id']; //项目的借款人平台用户编 $cp_t['create_time'] = TIME_UTC; $GLOBALS['db']->autoExecute(DB_PREFIX . "yeepay_cp_transaction", $cp_t); $id = $GLOBALS['db']->insert_id(); $fee = 0; foreach ($repaylist as $k => $v) { //平台收取:借款者 的管理费 + 管理逾期罚息 $fee = $fee + $v['repay_manage_money'] + $v['repay_manage_impose_money']; //==============================投资者获取的,费用=================================== $detail = array(); $detail['pid'] = $id; $detail['deal_load_repay_id'] = $v['id']; $detail['repay_manage_impose_money'] = $v['repay_manage_impose_money']; //平台收取 借款者 的管理费逾期罚息 $detail['impose_money'] = $v['impose_money']; //投资者收取 借款者 的逾期罚息 $detail['repay_status'] = intval($v['status']) - 1; //还款状态 $detail['true_repay_time'] = TIME_UTC; //还款时间 //投资人会员编号 if ($v['t_user_id']) { //债权转让后,还款时,转给:承接者, 在债权转让后需要更新 fanwe_deal_load_repay.t_user_id 数据值 $detail['user_id'] = $v['t_user_id']; } else { $detail['user_id'] = $v['user_id']; } $detail_user_info = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "user where id = " . $detail['user_id']); if ($detail_user_info['user_type'] == 0) { $detail['userType'] = 'MEMBER'; } else { $detail['userType'] = 'MERCHANT'; } $detail['targetUserType'] = $detail_user_info["user_type"]; $detail['targetPlatformUserNo'] = $detail_user_info["ips_acct_no"]; $detail['bizType'] = 'REPAYMENT'; //平台收取:投资者 的投资金额管理费 + 利息管理费 $detail['fee'] = $v['manage_money'] + $v['manage_interest_money']; //投资者获取的 $v['month_repay_money'] + $v['impose_money'] - $v['manage_money'] - $v['manage_interest_money'] $detail['amount'] = $v['month_repay_money'] + $v['impose_money'] - $detail['fee']; $detail['amount'] = round($detail['amount'], 2); $GLOBALS['db']->autoExecute(DB_PREFIX . "yeepay_cp_transaction_detail", $detail, 'INSERT'); $details[] = $detail; } $data_update = array(); $data_update['requestNo'] = $requestNo; $data_update['fee'] = $fee; //手续费(涉及到满标、还款接口) $GLOBALS['db']->autoExecute(DB_PREFIX . "yeepay_cp_transaction", $data_update, 'UPDATE', ' requestNo=' . $requestNo); //$details = "<details></details>"; $actions = "<details>"; foreach ($details as $k => $v) { $actions .= "<detail><targetUserType>" . $v['userType'] . "</targetUserType><targetPlatformUserNo>" . intval($v['user_id']) . "</targetPlatformUserNo><amount>" . $v['amount'] . "</amount><bizType>" . $v["bizType"] . "</bizType></detail>" . "<detail><targetUserType>MERCHANT</targetUserType><targetPlatformUserNo>{$platformNo}</targetPlatformUserNo><amount>" . $v['fee'] . "</amount><bizType>COMMISSION</bizType></detail>"; } $actions .= "</details>"; $extend = '<extend>' . '<property name="tenderOrderNo" value="' . $deal["id"] . '" />' . '</extend>'; $strxml = RepaymentNewTradeXml($cp_t, $actions . $extend, $pWebUrl, $pS2SUrl); $pSign = "signdata"; $html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8" /></head><body> <form name="form1" id="form1" method="post" action="' . $post_url . '/bha/toCpTransaction" target="_self"> <input type="text" name="sign" value="' . $pSign . '" /> <textarea name="req" cols="100" rows="5">' . $strxml . '</textarea> <input type="submit" value="提交"></input> </form> </body></html> <script language="javascript">document.form1.submit();</script>'; $cp_t = array(); $cp_t['details'] = $actions; //项目描述信息 $cp_t['extend'] = $deal['extend']; //项目的借款人平台用户编 $GLOBALS['db']->autoExecute(DB_PREFIX . "yeepay_cp_transaction", $cp_t, " requestNo = " . $requestNo); $yeepay_log = array(); $yeepay_log['strxml'] = $strxml; $yeepay_log['html'] = $html; $GLOBALS['db']->autoExecute(DB_PREFIX . "yeepay_log", $yeepay_log, 'UPDATE', 'id=' . $requestNo); return $html; }
/** * 还款 * @param deal $deal 标的数据 * @param array $repaylist 还款列表 * @param int $deal_repay_id 还款计划ID * @param int $MerCode 商户ID * @param string $cert_md5 * @param string $post_url * @return string */ function RepaymentNewTrade($cfg, $deal, $repaylist, $deal_repay_id, $post_url) { $merchant_id = $cfg['merchant_id']; $terminal_id = $cfg['terminal_id']; $key = $cfg['key']; $iv = $cfg['iv']; //$deal = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."deal where id = ".$deal_id); //$user = $GLOBALS['db']->getRow("select * from ".DB_PREFIX."user where id = ".$user_id); $data = array(); $data['merchant_id'] = $merchant_id; //商户号 $data['terminal_id'] = $terminal_id; //终端号 $data['action_type'] = 4; //请求类型,投标为1,满标为2,流标为3,还标为4 $data['order_id'] = 0; $data['user_id'] = $deal['user_id']; //借款人 $data['special'] = 1; $data['cus_id'] = $deal['id']; $data['cus_name'] = $deal['sub_name']; //项目名称 $data['brw_id'] = $deal['user_id']; //借款人 $data['req_time'] = microtime_float(); // get_gmtime();//请求时间 例如 1405668253874 (当前时间转换毫秒) $data['fee'] = 0; //手续费(涉及到满标、还款接口) $data['repay_start_time'] = 0; // 开始还款日期 $data['load_amount'] = 0; // 记录投标金额 $data['bids_msg'] = ''; //流标原因 $data['deal_repay_id'] = $deal_repay_id; //还款计划ID $GLOBALS['db']->autoExecute(DB_PREFIX . "baofoo_business", $data, 'INSERT'); $id = $GLOBALS['db']->insert_id(); $fee = 0; foreach ($repaylist as $k => $v) { //平台收取:借款者 的管理费 + 管理逾期罚息 $fee = $fee + $v['repay_manage_money'] + $v['repay_manage_impose_money']; //==============================投资者获取的,费用=================================== $detail = array(); $detail['pid'] = $id; $detail['deal_load_repay_id'] = $v['id']; $detail['repay_manage_impose_money'] = $v['repay_manage_impose_money']; //平台收取 借款者 的管理费逾期罚息 $detail['impose_money'] = $v['impose_money']; //投资者收取 借款者 的逾期罚息 $detail['repay_status'] = intval($v['status']) - 1; //还款状态 $detail['true_repay_time'] = TIME_UTC; //还款时间 //投资人会员编号 if ($v['t_user_id']) { //债权转让后,还款时,转给:承接者, 在债权转让后需要更新 fanwe_deal_load_repay.t_user_id 数据值 $detail['user_id'] = $v['t_user_id']; } else { $detail['user_id'] = $v['user_id']; } //投资者获取的,费用 [宝付会自动扣除 $detail['fee'] 部分,所以最终获得的收入为:$v['month_repay_money'] + $v['impose_money'] - $v['manage_money'] - $v['manage_interest_money'] $detail['amount'] = round($v['month_repay_money'] + $v['impose_money'], 2); //平台收取:投资者 的投资金额管理费 + 利息管理费 $detail['fee'] = round($v['manage_money'] + $v['manage_interest_money'], 2); $GLOBALS['db']->autoExecute(DB_PREFIX . "baofoo_business_detail", $detail, 'INSERT'); $details[] = $detail; } $data_update = array(); $data_update['order_id'] = $id; $data['order_id'] = $id; $data['fee'] = round($fee, 2); //手续费(涉及到满标、还款接口) $GLOBALS['db']->autoExecute(DB_PREFIX . "baofoo_business", $data_update, 'UPDATE', 'id=' . $id); $actions = "<actions>"; foreach ($details as $k => $v) { $actions .= "<action><user_id>" . intval($v['user_id']) . "</user_id><amount>" . $v['amount'] . "</amount><fee>" . $v['fee'] . "</fee></action>"; } $actions .= "<action><user_id>" . intval($deal['user_id']) . "</user_id><special>1</special><fee>" . round($fee, 2) . "</fee></action>"; $actions .= "</actions>"; $strxml = RepaymentNewTradeXml($data, $actions); $pSign = md5($strxml . "~|~" . $key); /* $pWebUrl= SITE_DOMAIN.APP_ROOT."/index.php?ctl=collocation&act=response&class_name=Baofoo&class_act=RepaymentNewTrade&from=".$_REQUEST['from']."&order_id=".$id;//web方式返回 $pS2SUrl= SITE_DOMAIN.APP_ROOT."/index.php?ctl=collocation&act=notify&class_name=Baofoo&class_act=RepaymentNewTrade&from=".$_REQUEST['from']."&order_id=".$id;//s2s方式返回 $html = '<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8" /></head><body> <form name="form1" id="form1" method="post" action="'.$post_url.'custody/businessPage.do" target="_self"> merchant_id:<input type="text" name="merchant_id" value="'.$merchant_id.'" /><br> terminal_id:<input type="text" name="terminal_id" value="'.$terminal_id.'" /><br> sign:<input type="text" name="sign" value="'.$pSign.'" /><br> requestParams:<textarea name="requestParams" cols="100" rows="5">'.$strxml.'</textarea> <br> page_url:<input type="text" name="page_url" value="'.$pWebUrl.'" /><br> service_url:<input type="text" name="service_url" value="'.$pS2SUrl.'" /><br> <input type="submit" value="提交"></input> </form> </body></html> ';//<script language="javascript">document.form1.submit();</script>'; //echo $html; exit; */ $post_data = array("merchant_id" => $merchant_id, "terminal_id" => $terminal_id, "sign" => $pSign, "requestParams" => $strxml); $baofoo_log = array(); $baofoo_log['code'] = 'business_4'; $baofoo_log['create_date'] = to_date(TIME_UTC, 'Y-m-d H:i:s'); $baofoo_log['strxml'] = $strxml; $baofoo_log['html'] = print_r($post_data, true); $GLOBALS['db']->autoExecute(DB_PREFIX . "baofoo_log", $baofoo_log); $resultStr = httpRequestPOST($post_url . "custody/p2pRequest.do", $post_data); $baofoo_log = array(); $baofoo_log['code'] = 'p2pRequest_4'; $baofoo_log['create_date'] = to_date(TIME_UTC, 'Y-m-d H:i:s'); $baofoo_log['strxml'] = print_r($resultStr, true); $baofoo_log['html'] = ''; $GLOBALS['db']->autoExecute(DB_PREFIX . "baofoo_log", $baofoo_log); //还款 require_once APP_ROOT_PATH . 'system/collocation/ips/xml.php'; $str3ParaInfo = @XML_unserialize($resultStr); $str3Req = $str3ParaInfo['crs']; $sign = $str3Req["sign"]; $Md5sign = Md5($str3Req["code"] . '~|~' . $str3Req["msg"] . '~|~' . $key); if ($sign == $Md5sign) { $order_id = $id; $where = " order_id = '" . $order_id . "'"; $sql = "update " . DB_PREFIX . "baofoo_business set is_callback = 1 where is_callback = 0 and " . $where; $GLOBALS['db']->query($sql); if ($GLOBALS['db']->affected_rows()) { //操作成功 $GLOBALS['db']->autoExecute(DB_PREFIX . "baofoo_business", $str3Req, 'UPDATE', $where); $ipsdata = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "baofoo_business where " . $where); $deal_id = intval($ipsdata['cus_id']); $deal_repay_id = intval($ipsdata['deal_repay_id']); if ($str3Req['code'] == 'CSD000') { $sql = "select * from " . DB_PREFIX . "baofoo_business_detail where deal_load_repay_id > 0 and pid = " . $ipsdata['id']; $list = $GLOBALS['db']->getAll($sql); foreach ($list as $k => $v) { $load_repay = $GLOBALS['db']->getRow("select * from " . DB_PREFIX . "deal_load_repay where id = " . $v['deal_load_repay_id']); //repay_status,repay_manage_impose_money $detail = array(); $detail['repay_manage_impose_money'] = $v["repay_manage_impose_money"]; //平台收取 借款者 的管理费逾期罚息 $detail['impose_money'] = $v["impose_money"]; //投资者收取 借款者 的逾期罚息 $detail['status'] = $v["repay_status"]; //还款状态 $detail['true_repay_time'] = $v["true_repay_time"]; //还款时间 $detail['true_repay_date'] = to_date($v["true_repay_time"]); $detail['has_repay'] = 1; //0未收到还款,1已收到还款 $detail['true_manage_money'] = $load_repay['manage_money']; $detail['true_manage_interest_money'] = $load_repay["manage_interest_money"]; $detail['true_repay_manage_money'] = $load_repay["repay_manage_money"]; $detail['true_repay_money'] = $load_repay["repay_money"]; $detail['true_self_money'] = $load_repay['self_money']; $detail['true_interest_money'] = $load_repay['interest_money']; $GLOBALS['db']->autoExecute(DB_PREFIX . "deal_load_repay", $detail, 'UPDATE', " has_repay = 0 and id = " . intval($v['deal_load_repay_id'])); //普通会员邀请返利 get_referrals($v['deal_load_repay_id']); } //更新用户回款计划 require_once APP_ROOT_PATH . "app/Lib/deal.php"; syn_deal_repay_status($deal_id, $deal_repay_id); return '已还款'; } else { return 'code:' . $str3Req['code'] . ';msg:' . $str3Req['msg']; } } else { return '重复调用'; } } else { return '验证不通过'; } }