post('user_id')); $money = intval(Request::instance()->post('price')); $client = intval(Request::instance()->post('client')); $username = trim(Request::instance()->post('username')); $pay_type = intval(Request::instance()->post('pay_type')); $user = Db::name('user')->where(array('id' => $user_id, 'status' => 1, 'is_delete' => 0, 'agent' => 0))->find(); $zdlIdArr = explode(',',$user['agent_parent_id_path']); $area_list = config('area_list'); //判断是否金流支线,如果不是的话,不允许充值 $isAllow = false; foreach($area_list[$user['area_id']]['limit_agent'] as $allowAgentId){ if(in_array($allowAgentId,$zdlIdArr)){ $isAllow = true; } } if(!$isAllow){ return json(array('status' => 0, 'message' => '该账号暂不支持在线充值')); } $zdlId = $zdlIdArr[0]; $zdl = Db::name('user')->where(array('id' => $zdlId, 'status' => 1, 'is_delete' => 0, 'agent' => 1))->find(); if(!$zdl){ return json(array('status' => 0, 'message' => '所属代理账号异常,暂不能充值')); } if($zdl['money'] < $money){ return json(array('status' => 0, 'message' => '所属代理余额不足,暂不能充值')); } $pay_list = config('pay_list'); if($user && $user_id > 0 && $money > 0 && $client > 0){ $pay_memberid = "11319"; //商户ID $pay_orderid = 'E'.date("YmdHis").rand(100000,999999); //订单号 $pay_amount = $money; //交易金额 $pay_applydate = date("Y-m-d H:i:s"); //订单时间 $pay_notifyurl = $pay_list['yongheng']['notify_url']; //服务端返回地址 $pay_callbackurl = $pay_list['yongheng']['callback_url']; //页面跳转返回地址 $Md5key = "yfhjiq5rkdmx4xh3egt0f4hkay574wal"; //密钥 $tjurl = "https://www.aa168zf.com/Pay_Index.html"; //提交地址 $pay_bankcode = $pay_type; //银行编码 $native = array( "pay_memberid" => $pay_memberid, "pay_orderid" => $pay_orderid, "pay_amount" => $pay_amount, "pay_applydate" => $pay_applydate, "pay_bankcode" => $pay_bankcode, "pay_notifyurl" => $pay_notifyurl, "pay_callbackurl" => $pay_callbackurl, ); ksort($native); $md5str = ""; foreach ($native as $key => $val) { $md5str = $md5str . $key . "=" . $val . "&"; } //echo($md5str . "key=" . $Md5key); $sign = strtoupper(md5($md5str . "key=" . $Md5key)); $native["pay_md5sign"] = $sign; $native['pay_attach'] = "1234|456"; $native['pay_productname'] = 'VIP基础服务'; $native['format'] = 'json'; $postdata = http_build_query($native); $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded', 'content' => $postdata, 'timeout' => 15 * 60 // 超时时间(单位:s) ) ); $context = stream_context_create($options); $result = file_get_contents($tjurl, false, $context); $returnArray = json_decode($result,true); //echo "
";
            //print_r($returnArray);
            //echo "
"; //exit(); $data = $returnArray['data']; if($returnArray['status'] == 'ok'){ $order_record = array(); $order_record['pay_channel_id'] = 1; $order_record['pay_channel_name'] = '永恒168'; $order_record['user_id'] = $user_id; $order_record['order_sn'] = $data['orderid']; $order_record['appid'] = $pay_memberid; $order_record['api_key'] = $Md5key; $order_record['money'] = $pay_amount; $order_record['sign'] = $sign; $order_record['create_time'] = time(); $order_record['back_order_sn'] = $data['transaction_id']; $order_record['client'] = $client; $order_id = Db::name('order_record')->insertGetId($order_record); $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $pay_amount; $order_log['create_time'] = time(); $order_log['remake'] = 'user_id:'.$user_id.',用户名:'.$username.',发起充值:'.$pay_amount.',充值时间:'.date('Y-m-d H:i:s',time()); $order_log['order_id'] = $order_id; $order_log['client'] = $client; Db::name('order_log')->insert($order_log); return json(array('status' => 1, 'message' => '发起支付成功,即将跳转...', 'url' => $returnArray['data']['pay_url'])); }else{ return json(array('status' => 0, 'message' => $returnArray['msg'])); } }else{ return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试')); } } public function call_back_url(){ Log::record(Request::instance()->post(),'callback'); exit(); } public function call_back(){ $post = Request::instance()->post(); $serializePost = json_encode($post); Log::record(Request::instance()->post(),'callback'); $update = array(); $memberid = Request::instance()->post("memberid"); // 商户ID $orderid = Request::instance()->post("orderid"); // 订单号 $amount = Request::instance()->post("amount"); // 交易金额 $datetime = Request::instance()->post("datetime"); // 交易时间 $transaction_id = Request::instance()->post("transaction_id"); // 支付流水号 $returncode = Request::instance()->post("returncode"); // 支付成功代码 $callBackSign = Request::instance()->post("sign"); // 返回签名 $returnArray = array( "memberid" => $memberid, "orderid" => $orderid, "amount" => $amount, "datetime" => $datetime, "transaction_id" => $transaction_id, "returncode" => $returncode, ); $md5key = "yfhjiq5rkdmx4xh3egt0f4hkay574wal"; ksort($returnArray); reset($returnArray); $md5str = ""; foreach ($returnArray as $key => $val) { $md5str = $md5str . $key . "=" . $val . "&"; } $sign = strtoupper(md5($md5str . "key=" . $md5key)); $order = Db::name('order_record')->where('order_sn',$returnArray['orderid'])->find(); if(!$order){ $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['create_time'] = time(); $order_log['remake'] = "收到回调,但是查询不到订单号,回调内容:".$serializePost; Db::name('order_log')->insert($order_log); exit('OK');//订单不存在,回调失败 } $user = Db::name('user')->where(array('id' => $order['user_id'], 'status' => 1, 'is_delete' => 0, 'agent' => 0))->find(); if(!$user){ $update['status'] = 1; $update['remake'] = '收到回调,无法查询到会员'; Db::name('order_record')->where('id',$order['id'])->update($update); $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['create_time'] = time(); $order_log['remake'] = "收到回调,但是查询不到会员信息,会员可能已经删除或者停用,回调内容:".$serializePost; Db::name('order_log')->insert($order_log); exit('OK');//用户不存在,回调失败 } if($order['status'] == 3){ $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $order['money']; $order_log['create_time'] = time(); $order_log['remake'] = "收到回调,但订单已经支付完成".$serializePost; $order_log['order_id'] = $order['id']; Db::name('order_log')->insert($order_log); exit('OK');//用户订单已经支付完成 } //签名 if ($sign != $callBackSign) { $update['status'] = 1; $update['remake'] = '签名不对,交易暂停'; Db::name('order_record')->where('id',$order['id'])->update($update); $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $order['money']; $order_log['create_time'] = time(); $order_log['remake'] = "收到回调,但是签名不对,回调内容:".$serializePost; $order_log['order_id'] = $order['id']; Db::name('order_log')->insert($order_log); exit('OK');//签名不对,回调失败 } //状态 if ($returncode != "00") { $update['status'] = 1; $update['remake'] = '支付不成功'.$returncode; Db::name('order_record')->where('id',$order['id'])->update($update); $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $order['money']; $order_log['create_time'] = time(); $order_log['remake'] = "收到回调,支付不成功,回调内容:".$serializePost; $order_log['order_id'] = $order['id']; Db::name('order_log')->insert($order_log); exit('OK');//支付状态不对,回调失败 } //返回金额 if($amount != $order['money']){ $update['status'] = 1; $update['remake'] = '支付金额小于订单金额,交易停止'; Db::name('order_record')->where('id',$order['id'])->update($update); $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $order['money']; $order_log['create_time'] = time(); $order_log['remake'] = "收到回调,但是金额不对,回调内容:".$serializePost; $order_log['order_id'] = $order['id']; Db::name('order_log')->insert($order_log); exit('OK');//金额不对,回调失败 } //总代理金额 $zdlIdArr = explode(',',$user['agent_parent_id_path']); $zdlId = $zdlIdArr[0]; $zdl = Db::name('user')->where(array('id' => $zdlId, 'status' => 1, 'is_delete' => 0, 'agent' => 1))->find(); if(!$zdl || $zdl['money'] < $order['money']){ $update['status'] = 1; $update['remake'] = '无法找到总代理,或者总代理账号余分不足,交易暂停'; Db::name('order_record')->where('id',$order['id'])->update($update); $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $order['money']; $order_log['create_time'] = time(); $order_log['remake'] = "无法找到总代理,或者总代理账号余分不足,回调内容:".$serializePost; $order_log['order_id'] = $order['id']; Db::name('order_log')->insert($order_log); exit('OK');//找不到总代理,回调失败 } $call_back_data = array(); //更新订单表 $call_back_data['back_money'] = $amount; $call_back_data['back_sign'] = $callBackSign; $call_back_data['back_time'] = time(); $call_back_data['status'] = 3; $call_back_data['agent_parent_id'] = $user['agent_parent_id']; $call_back_data['agent_parent_username'] = $user['agent_parent_username']; $call_back_data['zdl_id'] = $zdl['id']; $call_back_data['zdl_username'] = $zdl['username']; $call_back_data['zdl_money_before'] = $zdl['money']; $call_back_data['zdl_money_after'] = $zdl['money'] - $order['money']; $call_back_data['money_before'] = $user['money']; $call_back_data['money_after'] = $user['money'] + $order['money']; Db::name('order_record')->where(array('id' => $order['id']))->update($call_back_data); //记录支付日志 $order_log = array(); $order_log['pay_channel_id'] = 1; $order_log['pay_channel_name'] = '永恒168'; $order_log['money'] = $order['money']; $order_log['create_time'] = time(); $order_log['remake'] = "回调支付成功"; $order_log['order_id'] = $order['id']; Db::name('order_log')->insert($order_log); //插入上分表并增加余分 $recharge = array(); $recharge['type'] = 4; $recharge['amount'] = $order['money']; $recharge['mode'] = 1; $recharge['agent_or_admin'] = 3; $recharge['controller_id'] = $zdl['id']; $recharge['controller_username'] = $zdl['username']; $recharge['controller_nickname'] = $zdl['nickname']; $recharge['controller_type'] = '第三方充值平台充值,扣取总代理余分'; $recharge['controller_old_money'] = $zdl['money']; $recharge['controller_new_money'] = $zdl['money'] - $order['money']; $recharge['user_id'] = $order['user_id']; $recharge['user_type'] = $user['agent']; $recharge['user_agent_level'] = 0; $recharge['username_for'] = $user['username']; $recharge['nickname_for'] = $user['nickname']; $recharge['user_parent_id'] = $user['agent_parent_id']; $recharge['create_time'] = time(); $recharge['old_money'] = $user['money']; $recharge['new_money'] = $user['money'] + $order['money']; $recharge['controller_system'] = 3; $recharge['remake'] = '第三方充值成功'; Db::name('recharge')->insert($recharge); $updateZdl = array(); $updateZdl['money'] = $zdl['money'] - $order['money']; $updateZdl['last_recharge_out'] = $order['money']; $updateZdl['last_recharge_out_time'] = time(); $updateZdl['recharge_out_count'] = $zdl['recharge_out_count'] + 1; $updateZdl['recharge_out_total_amount'] = $zdl['recharge_out_total_amount'] + $order['money']; $updateUser = array(); $updateUser['money'] = $user['money'] + $order['money']; $updateUser['last_recharge'] = $order['money']; $updateUser['last_recharge_time'] = time(); $updateUser['recharge_count'] = $user['recharge_count'] + 1; $updateUser['recharge_total_amount'] = $user['recharge_total_amount'] + $order['money']; Db::name('user')->where(array('id' => $zdl['id']))->limit(1)->update($updateZdl); Db::name('user')->where(array('id' => $order['user_id']))->limit(1)->update($updateUser); exit('OK'); } }