init: 从宝塔同步到 Gitea
This commit is contained in:
@@ -0,0 +1,315 @@
|
||||
<?php
|
||||
namespace app\onlinechip\controller\traits;
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Request;
|
||||
trait happyPay{
|
||||
|
||||
|
||||
public function happy_online_order(){
|
||||
$user_id = intval(Request::instance()->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 = "API1362913582567500"; //商户CID
|
||||
$pay_orderid = 'E'.date("YmdHis").rand(100000,999999); //订单号
|
||||
$pay_amount = $money; //交易金额
|
||||
$pay_notifyurl = $pay_list['happyPay']['notify_url']; //服务端返回地址
|
||||
$pay_callbackurl = $pay_list['happyPay']['callback_url']; //页面跳转返回地址
|
||||
$Md5key = "77f4a079992f4e16b0d2cb4dbd1d7f0f"; //密钥
|
||||
$tjurl = "http://khgri4829.com:6084/api/pay/V2"; //提交地址
|
||||
$native = [
|
||||
'version'=>'V2',//版本号
|
||||
'signType'=>'MD5',//签名类型
|
||||
'merchantNo'=>$pay_memberid,//商户号
|
||||
'date'=>date('Ymdhis',time()),//时间戳格式:YYYYMMDDhhmmss
|
||||
'channleType'=>$pay_type,//通道类型
|
||||
'noticeUrl'=>$pay_notifyurl,
|
||||
'orderNo'=>$pay_orderid,
|
||||
'bizAmt'=>$pay_amount,
|
||||
];
|
||||
|
||||
|
||||
ksort($native);
|
||||
$md5str = "";
|
||||
foreach ($native as $key => $val) {
|
||||
$md5str = $md5str . $key . "=" . $val . "&";
|
||||
}
|
||||
$md5str = trim($md5str,'&');
|
||||
$sign = md5($md5str . $Md5key);
|
||||
$native["sign"] = $sign;
|
||||
|
||||
$postData = http_build_query($native);
|
||||
$options = array(
|
||||
'http' => array(
|
||||
'method' => 'POST',
|
||||
'header' =>[
|
||||
'Content-type:application/json',
|
||||
'Accept:application/json'
|
||||
],
|
||||
'content' => json_encode($native),
|
||||
'timeout' => 15 * 60 // 超时时间(单位:s)
|
||||
)
|
||||
);
|
||||
$context = stream_context_create($options);
|
||||
$result = file_get_contents($tjurl, false, $context);
|
||||
$returnArray = json_decode($result,true);
|
||||
// print_r($returnArray);die;
|
||||
if(is_array($returnArray) && isset($returnArray['code'])){
|
||||
if($returnArray['code'] == 0){
|
||||
|
||||
if(isset($returnArray['detail']['PayURL'])){
|
||||
$returnUrl = $returnArray['detail']['PayURL'];
|
||||
}else{
|
||||
$parms = base64_encode(encrypt_data(['user_id'=>$user_id,'orderNo'=>$pay_orderid]));
|
||||
$returnUrl = $pay_callbackurl.'?value='.$parms;
|
||||
}
|
||||
$order_record = array();
|
||||
$order_record['pay_channel_id'] = 5;
|
||||
$order_record['pay_channel_name'] = 'happyPay';
|
||||
$order_record['user_id'] = $user_id;
|
||||
$order_record['order_sn'] = $pay_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'] = '';
|
||||
$order_record['client'] = $client;
|
||||
|
||||
if(isset($returnArray['detail']['PayHtml'])){
|
||||
$order_record['remake'] = $returnArray['detail']['PayHtml'];
|
||||
}
|
||||
$order_id = Db::name('order_record')->insertGetId($order_record);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$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' => $returnUrl));
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => $returnArray['msg']));
|
||||
}
|
||||
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}
|
||||
public function happy_call_back_url(){
|
||||
$getData = Request::instance()->get('value');
|
||||
$content = '页面或订单已失效或订单';
|
||||
if(base64_decode($getData)){
|
||||
$data = decrypt_data(['encryptData'=>base64_decode($getData)]);
|
||||
if(isset($data['orderNo']) && isset($data['user_id'])){
|
||||
$orderInfo = Db::name('order_record')->where(['order_sn'=>$data['orderNo'],'user_id'=>$data['user_id']])->find();
|
||||
if($orderInfo){
|
||||
if($orderInfo['status'] == 3){
|
||||
$content = '订单已完成';
|
||||
}else{
|
||||
$content = $orderInfo['remake'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
$this->assign('content',$content);
|
||||
return $this->fetch();
|
||||
|
||||
}
|
||||
public function happy_call_back(){
|
||||
$post = Request::instance()->post();
|
||||
$serializeData = json_encode($post);
|
||||
if(!is_array($post) || !isset($post['orderNo']) || !isset($post['bizAmt']) || !isset($post['status']) || !isset($post['sign']) || !isset($post['status'])){
|
||||
Log::record($post,'error_pay_callback');
|
||||
exit();
|
||||
}
|
||||
|
||||
Log::record($post,'callback');
|
||||
|
||||
if($post['status'] != 1){
|
||||
Log::record($post,'fail_pay_callback');
|
||||
exit('SUCCESS');
|
||||
}
|
||||
$order = Db::name('order_record')->where(['order_sn'=>$post['orderNo']])->find();
|
||||
if(!$order){
|
||||
$order_log['pay_channel_id'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到订单号,回调内容:".$serializeData;
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('SUCCESS');//订单不存在,回调失败
|
||||
}
|
||||
$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['pay_channel_id'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到会员信息,会员可能已经删除或者停用,回调内容:".$serializeData;
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('SUCCESS');//用户不存在,回调失败
|
||||
}
|
||||
//验证签名
|
||||
$Md5key = "77f4a079992f4e16b0d2cb4dbd1d7f0f"; //密钥
|
||||
$postData = $post;
|
||||
unset($postData['sign']);
|
||||
ksort($postData);
|
||||
$md5str = "";
|
||||
foreach ($postData as $key => $val) {
|
||||
$md5str = $md5str . $key . "=" . $val . "&";
|
||||
}
|
||||
$md5str = trim($md5str,'&');
|
||||
$sign = md5($md5str . $Md5key);
|
||||
|
||||
if ($sign != $post['sign']) {
|
||||
$update['status'] = 1;
|
||||
$update['remake'] = '签名不对,交易暂停';
|
||||
Db::name('order_record')->where('id',$order['id'])->update($update);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是签名不对,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('SUCCESS');//签名不对,回调失败
|
||||
}
|
||||
|
||||
//返回金额
|
||||
if(round($post['bizAmt'],2) != $order['money']){
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是金额不对,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('SUCCESS');//金额不对,回调失败
|
||||
}
|
||||
|
||||
//总代理金额
|
||||
$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'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "无法找到总代理,或者总代理账号余分不足,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('SUCCESS');//找不到总代理,回调失败
|
||||
}
|
||||
|
||||
|
||||
|
||||
//更新订单表
|
||||
$call_back_data['back_money'] = $post['bizAmt'];
|
||||
$call_back_data['back_sign'] = '';
|
||||
$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'] = 5;
|
||||
$order_log['pay_channel_name'] = 'happyPay';
|
||||
$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('SUCCESS');
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
<?php
|
||||
namespace app\onlinechip\controller\traits;
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Request;
|
||||
trait hengfuPay{
|
||||
public function hengfu_online_order(){
|
||||
$user_id = intval(Request::instance()->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){
|
||||
$sn = '1965312301';
|
||||
$Authorization = 'aE86s4HKxKghfXLOmAPBKMIJymFedk6W99RJe4L9QOOwNvWFlKZgNyqfycP4lXVS';
|
||||
$PaymentType = $pay_type;
|
||||
$VendorSerialNumber = 'E'.date("YmdHis").rand(100000,999999); //订单号
|
||||
$SourceName = $user['username']; //来源名称
|
||||
$TransactionAmount = $money; //交易金额
|
||||
$CallBack = $pay_list['hengfuPay']['notify_url']; //回调返回地址
|
||||
$RedirectUrl = $pay_list['hengfuPay']['callback_url']; //页面跳转返回地址
|
||||
$curl = curl_init();
|
||||
curl_setopt_array($curl, array(
|
||||
CURLOPT_URL => "https://hengfu.cool/api/2.0.0/recharge/order/",
|
||||
CURLOPT_RETURNTRANSFER => true,
|
||||
CURLOPT_ENCODING => "",
|
||||
CURLOPT_MAXREDIRS => 10,
|
||||
CURLOPT_TIMEOUT => 0,
|
||||
CURLOPT_FOLLOWLOCATION => true,
|
||||
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
|
||||
CURLOPT_CUSTOMREQUEST => "POST",
|
||||
CURLOPT_POSTFIELDS => "sn=".$sn."&PaymentType=".$PaymentType."&TransactionAmount=".$TransactionAmount."&VendorSerialNumber=".$VendorSerialNumber."&CallBack=".$CallBack."&RedirectUrl=".$RedirectUrl."&SourceName=".$SourceName,
|
||||
CURLOPT_HTTPHEADER => array(
|
||||
"Authorization: ".$Authorization,
|
||||
"Content-Type: application/x-www-form-urlencoded"
|
||||
),
|
||||
));
|
||||
$response = curl_exec($curl);
|
||||
curl_close($curl);
|
||||
$response = json_decode($response,true);
|
||||
//echo "<pre>";
|
||||
//print_r($response);
|
||||
//echo "</pre>";
|
||||
//exit();
|
||||
if($response['api_status'] == true){
|
||||
$orderUrl = $response['data']['path'];
|
||||
$back_order_sn = $response['data']['serial_number'];
|
||||
//创建订单
|
||||
$order_record = array();
|
||||
$order_record['pay_channel_id'] = 6;
|
||||
$order_record['pay_channel_name'] = 'hengfuPay';
|
||||
$order_record['user_id'] = $user_id;
|
||||
$order_record['order_sn'] = $VendorSerialNumber;
|
||||
$order_record['appid'] = $sn;
|
||||
$order_record['api_key'] = $Authorization;
|
||||
$order_record['money'] = $TransactionAmount;
|
||||
$order_record['create_time'] = time();
|
||||
$order_record['back_order_sn'] = $back_order_sn ;
|
||||
$order_record['client'] = $client;
|
||||
$order_id = Db::name('order_record')->insertGetId($order_record);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$order_log['money'] = $TransactionAmount;
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = 'user_id:'.$user_id.',用户名:'.$username.',发起充值:'.$TransactionAmount.',充值时间:'.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' => $orderUrl));
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => $response['code']));
|
||||
}
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}
|
||||
public function hengfu_call_back(){
|
||||
if(Request::instance()->isPost()){
|
||||
$serializeData = Request::instance()->post('data');
|
||||
$post = json_decode(Request::instance()->post('data'), true);
|
||||
if(isset($post['Status']) && intval($post['Status']) == 3){
|
||||
$order = Db::name('order_record')->where(['order_sn' => $post['VendorSerialNumber']])->find();
|
||||
if(!$order){
|
||||
//订单不存在,回调失败
|
||||
$order_log['pay_channel_id'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到订单号,回调内容:".$serializeData;
|
||||
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, 'username' => $post['SourceName']))->find();
|
||||
if(!$user){
|
||||
//用户不存在,回调失败
|
||||
$update['status'] = 1;
|
||||
$update['remake'] = '收到回调,无法查询到会员';
|
||||
Db::name('order_record')->where('id',$order['id'])->update($update);
|
||||
$order_log['pay_channel_id'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到会员信息,会员可能已经删除或者停用,回调内容:".$serializeData;
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('OK');
|
||||
}
|
||||
//验证签名
|
||||
$Md5key = "WYPJVZInmafDxRFCEc6Nn9Ss8FRG0U2FHaZ4sT8buxx0LCncIz9nM12dokbiJjWr";
|
||||
$postData = $post;
|
||||
unset($postData['Sign']);
|
||||
ksort($postData);
|
||||
$md5str = "";
|
||||
foreach ($postData as $key => $val) {
|
||||
$md5str = $md5str . $key . "=" . $val . "&";
|
||||
}
|
||||
$sign = md5($md5str . "Key=" . $Md5key);
|
||||
if ($sign != $post['Sign']) {
|
||||
//签名不对,回调失败
|
||||
$update['status'] = 1;
|
||||
$update['remake'] = '签名不对,交易暂停';
|
||||
Db::name('order_record')->where('id',$order['id'])->update($update);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是签名不对,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('OK');
|
||||
}
|
||||
//返回金额
|
||||
if(round($post['TransactionAmount'],2) != $order['money']){
|
||||
//金额不对,回调失败
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是金额不对,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('success');
|
||||
}
|
||||
|
||||
//总代理金额
|
||||
$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'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "无法找到总代理,或者总代理账号余分不足,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('success');
|
||||
}
|
||||
//更新订单表
|
||||
$call_back_data['back_money'] = $post['TransactionAmount'];
|
||||
$call_back_data['back_sign'] = $post['Sign'];
|
||||
$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'] = 6;
|
||||
$order_log['pay_channel_name'] = 'hengfuPay';
|
||||
$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');
|
||||
}else{
|
||||
Log::record(Request::instance()->post(),'error_pay_callback');
|
||||
exit('OK');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
namespace app\onlinechip\controller\traits;
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Request;
|
||||
|
||||
trait hipPay{
|
||||
|
||||
/**
|
||||
* 创建支付订单和返回支付链接
|
||||
* @return \think\response\Json
|
||||
* DateTime: 2019/12/27 18:42
|
||||
*/
|
||||
public function hip_online_order(){
|
||||
$user_id = intval(Request::instance()->post('user_id'));
|
||||
$money = intval(Request::instance()->post('price'));
|
||||
$client = intval(Request::instance()->post('client'));
|
||||
$username = trim(Request::instance()->post('username'));
|
||||
$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_orderid = date("YmdHis").rand(10,99); //订单号
|
||||
$pay_amount = $money; //交易金额
|
||||
$pay_notifyurl = $pay_list['hipPay']['callback_url']; //服务端返回地址
|
||||
$pay_notifyurl_page = $pay_list['hipPay']['notify_url']; //服务端返回地址--页面
|
||||
$tjurl = "http://www.hip168.net/api/getway01/CodeRequest.ashx"; //提交地址
|
||||
$native = [
|
||||
'Merchent'=>'JF',
|
||||
'OrderID'=>$pay_orderid,
|
||||
'Total'=>$pay_amount,
|
||||
'ReAUrl'=>$pay_notifyurl,
|
||||
'ReBUrl'=>$pay_notifyurl_page,
|
||||
'Name'=>$user['username']
|
||||
];
|
||||
$postData = http_build_query($native);
|
||||
$orderUrl = $tjurl.'?'.$postData;
|
||||
//创建订单
|
||||
$order_record = array();
|
||||
$order_record['pay_channel_id'] = 3;
|
||||
$order_record['pay_channel_name'] = 'hipPay';
|
||||
$order_record['user_id'] = $user_id;
|
||||
$order_record['order_sn'] = $pay_orderid;
|
||||
$order_record['appid'] = 0;//不需要
|
||||
$order_record['api_key'] = '';//不需要
|
||||
$order_record['money'] = $pay_amount;
|
||||
$order_record['sign'] = '';//不需要
|
||||
$order_record['create_time'] = time();
|
||||
$order_record['back_order_sn'] = '';
|
||||
$order_record['client'] = $client;
|
||||
$order_id = Db::name('order_record')->insertGetId($order_record);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 3;
|
||||
$order_log['pay_channel_name'] = 'hipPay';
|
||||
$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' => $orderUrl));
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 支付码显示页面
|
||||
* @return mixed
|
||||
* @throws \think\Exception
|
||||
* DateTime: 2020/1/10 15:32
|
||||
*/
|
||||
public function hip_call_back_url(){
|
||||
if(Request::instance()->get()){
|
||||
$Ordernum = Request::instance()->get('Ordernum');
|
||||
$StoreCode = Request::instance()->get('StoreCode');
|
||||
$Total = Request::instance()->get('Total');
|
||||
$mobileUrl = Request::instance()->get('mobileUrl');
|
||||
if($Ordernum && $StoreCode && $Total && $mobileUrl){
|
||||
$order = Db::name('order_record')->where(['order_sn'=>$Ordernum,'status'=>0])->find();
|
||||
if($order && $order['money'] == $Total){
|
||||
Db::name('order_record')->where(['id'=>$order['id']])->update(['back_order_sn'=>$StoreCode]);
|
||||
$this->assign('StoreCode',$StoreCode);
|
||||
$this->assign('Total',$Total);
|
||||
$this->assign('mobileUrl',$mobileUrl);
|
||||
return $this->fetch();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 充值回调
|
||||
* @throws \think\Exception
|
||||
* DateTime: 2019/12/30 13:49
|
||||
*/
|
||||
public function hip_call_back(){
|
||||
$get = Request::instance()->get();
|
||||
$serializeData = json_encode($get);
|
||||
if(getIP() != '203.66.45.226'){
|
||||
Log::record(array_merge($get,['ip'=>getIP()]),'error_pay_callback_illegal_request');//非法请求
|
||||
exit();
|
||||
}
|
||||
|
||||
$Ordernum = Request::instance()->get('Ordernum');
|
||||
$StoreCode = Request::instance()->get('StoreCode');
|
||||
$Status = Request::instance()->get('Status');
|
||||
$Total = Request::instance()->get('Total');
|
||||
|
||||
Log::record(Request::instance()->get(),'callback');
|
||||
if($Status != '0000' || !$StoreCode || !$Ordernum || !$Total){
|
||||
Log::record(Request::instance()->get(),'error_pay_callback');
|
||||
exit();
|
||||
}
|
||||
$order = Db::name('order_record')->where(['order_sn'=>$Ordernum,'back_order_sn'=>$StoreCode])->find();
|
||||
if(!$order){
|
||||
$order_log['pay_channel_id'] = 3;
|
||||
$order_log['pay_channel_name'] = 'hipPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到订单号,回调内容:".$serializeData;
|
||||
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['pay_channel_id'] = 3;
|
||||
$order_log['pay_channel_name'] = 'hipPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到会员信息,会员可能已经删除或者停用,回调内容:".$serializeData;
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('OK');//用户不存在,回调失败
|
||||
}
|
||||
|
||||
//返回金额
|
||||
if($Total != $order['money']){
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 3;
|
||||
$order_log['pay_channel_name'] = 'hipPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是金额不对,回调内容:".$serializeData;
|
||||
$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'] = 3;
|
||||
$order_log['pay_channel_name'] = 'hipPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "无法找到总代理,或者总代理账号余分不足,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('OK');//找不到总代理,回调失败
|
||||
}
|
||||
|
||||
//更新订单表
|
||||
$call_back_data['back_money'] = $Total;
|
||||
$call_back_data['back_sign'] = '';
|
||||
$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'] = 3;
|
||||
$order_log['pay_channel_name'] = 'hipPay';
|
||||
$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');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
<?php
|
||||
namespace app\onlinechip\controller\traits;
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Request;
|
||||
|
||||
trait oneGoPay{
|
||||
|
||||
/**
|
||||
* 创建支付订单和返回支付链接
|
||||
* @return \think\response\Json
|
||||
* DateTime: 2019/12/27 18:42
|
||||
*/
|
||||
public function ogp_online_order(){
|
||||
$user_id = intval(Request::instance()->post('user_id'));
|
||||
$money = intval(Request::instance()->post('price'));
|
||||
$client = intval(Request::instance()->post('client'));
|
||||
$username = trim(Request::instance()->post('username'));
|
||||
$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_orderid = 'E'.date("YmdHis").rand(100000,999999); //订单号
|
||||
$pay_amount = $money; //交易金额
|
||||
$pay_notifyurl = $pay_list['oneGoPay']['notify_url']; //服务端返回地址
|
||||
$api_token = '2I8WenxoXshAyDDJsDE1NkBfYjqTKY4ZUGJB0Y6s2lmSueFRxv4pRXfi5909';//api token
|
||||
$tjurl = "https://www.waterpay88.com/api/transaction"; //提交地址
|
||||
$native = [
|
||||
'amount'=>$pay_amount,
|
||||
'out_trade_no'=>$pay_orderid,
|
||||
'notify_url'=>$pay_notifyurl,
|
||||
];
|
||||
$postData = http_build_query($native);
|
||||
$options = array(
|
||||
'http' => array(
|
||||
'method' => 'POST',
|
||||
'header' =>[
|
||||
'Content-type:application/json',
|
||||
"Authorization:Bearer $api_token",
|
||||
'Accept:application/json'
|
||||
],
|
||||
'content' => json_encode($native),
|
||||
'timeout' => 15 * 60 // 超时时间(单位:s)
|
||||
)
|
||||
);
|
||||
$context = stream_context_create($options);
|
||||
$result = file_get_contents($tjurl, false, $context);
|
||||
$returnArray = json_decode($result,true);
|
||||
if(is_array($returnArray) && isset($returnArray['uri'])){
|
||||
$order_record = array();
|
||||
$order_record['pay_channel_id'] = 2;
|
||||
$order_record['pay_channel_name'] = 'oneGoPay';
|
||||
$order_record['user_id'] = $user_id;
|
||||
$order_record['order_sn'] = $pay_orderid;
|
||||
$order_record['appid'] = 0;//不需要
|
||||
$order_record['api_key'] = '';//不需要
|
||||
$order_record['money'] = $pay_amount;
|
||||
$order_record['sign'] = '';//不需要
|
||||
$order_record['create_time'] = time();
|
||||
$order_record['back_order_sn'] = $returnArray['trade_no'];
|
||||
$order_record['client'] = $client;
|
||||
$order_id = Db::name('order_record')->insertGetId($order_record);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 2;
|
||||
$order_log['pay_channel_name'] = 'oneGoPay';
|
||||
$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['uri']));
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 充值回调
|
||||
* @throws \think\Exception
|
||||
* DateTime: 2019/12/30 13:49
|
||||
*/
|
||||
public function ogp_call_back(){
|
||||
$post = Request::instance()->post();
|
||||
$serializePost = json_encode($post);
|
||||
Log::record(Request::instance()->post(),'callback');
|
||||
if(!is_array($post) || !isset($post['status']) || $post['status'] != 'success'){
|
||||
Log::record(Request::instance()->post(),'error_pay_callback');
|
||||
exit();
|
||||
}
|
||||
$order = Db::name('order_record')->where('order_sn',$post['out_trade_no'])->find();
|
||||
if(!$order){
|
||||
$order_log['pay_channel_id'] = 2;
|
||||
$order_log['pay_channel_name'] = 'oneGoPay';
|
||||
$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['pay_channel_id'] = 2;
|
||||
$order_log['pay_channel_name'] = 'oneGoPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到会员信息,会员可能已经删除或者停用,回调内容:".$serializePost;
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('OK');//用户不存在,回调失败
|
||||
}
|
||||
|
||||
//返回金额
|
||||
if($post['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'] = 2;
|
||||
$order_log['pay_channel_name'] = 'oneGoPay';
|
||||
$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'] = 2;
|
||||
$order_log['pay_channel_name'] = 'oneGoPay';
|
||||
$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['back_money'] = $post['amount'];
|
||||
$call_back_data['back_sign'] = '';
|
||||
$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'] = 2;
|
||||
$order_log['pay_channel_name'] = 'oneGoPay';
|
||||
$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');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
namespace app\onlinechip\controller\traits;
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Request;
|
||||
trait tingPay{
|
||||
|
||||
|
||||
public function ting_online_order(){
|
||||
$user_id = intval(Request::instance()->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 = "3359"; //商户CID
|
||||
$pay_orderid = 'E'.date("YmdHis").rand(100000,999999); //订单号
|
||||
$pay_amount = $money; //交易金额
|
||||
$pay_notifyurl = $pay_list['tingPay']['notify_url']; //服务端返回地址
|
||||
$pay_callbackurl = $pay_list['tingPay']['callback_url']; //页面跳转返回地址
|
||||
$Md5key = "n7cznODIaFsY75BS1FLidCKaHAoKWtKHn5gSoQqnokNMzLtacFeyZ1Z9elkXHGXy"; //密钥
|
||||
$tjurl = "https://www.istmys.com/tingapi/jump"; //提交地址
|
||||
$native = [
|
||||
'merid' => $pay_memberid,//商户CID
|
||||
'amount' => $pay_amount,//充值金额
|
||||
'orderid' => $pay_orderid,//订单号
|
||||
'userid'=>$user_id,//会员ID
|
||||
'userip' => getIP(),//用户IP
|
||||
//'pay_type'=>$pay_type,//支付方式
|
||||
//'paytype'=> 'qrcode',
|
||||
//'bankflag'=> 'ALIPAY',
|
||||
'notifyurl' => $pay_notifyurl,//回调地址
|
||||
'syncurl' => $pay_callbackurl,//跳转地址
|
||||
];
|
||||
|
||||
ksort($native);
|
||||
$md5str = "";
|
||||
foreach ($native as $key => $val) {
|
||||
$md5str = $md5str . $key . "=" . $val . "&";
|
||||
}
|
||||
$sign = md5($md5str . "key=" . $Md5key);
|
||||
$native["sign"] = $sign;
|
||||
|
||||
$postData = http_build_query($native);
|
||||
$orderUrl = $tjurl.'?'.$postData;
|
||||
//创建订单
|
||||
$order_record = array();
|
||||
$order_record['pay_channel_id'] = 4;
|
||||
$order_record['pay_channel_name'] = 'tingPay';
|
||||
$order_record['user_id'] = $user_id;
|
||||
$order_record['order_sn'] = $pay_orderid;
|
||||
$order_record['appid'] = $pay_memberid;
|
||||
// $order_record['api_key'] = $Md5key;
|
||||
$order_record['api_key'] = '';//超出超度无法保存sql
|
||||
$order_record['money'] = $pay_amount;
|
||||
// $order_record['sign'] = $sign;
|
||||
$order_record['sign'] = '';//超出超度无法保存sql
|
||||
$order_record['create_time'] = time();
|
||||
$order_record['back_order_sn'] = '';
|
||||
$order_record['client'] = $client;
|
||||
$order_id = Db::name('order_record')->insertGetId($order_record);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$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' => $orderUrl));
|
||||
}else{
|
||||
return json(array('status' => 0, 'message' => '支付发起失败,请稍后再试'));
|
||||
}
|
||||
}
|
||||
public function ting_call_back_url(){
|
||||
Log::record(Request::instance()->post(),'callback');
|
||||
exit();
|
||||
}
|
||||
public function ting_call_back(){
|
||||
// $serializeData = Request::instance()->post();
|
||||
// $post = json_decode($serializeData);
|
||||
$post = Request::instance()->post();
|
||||
$serializeData = json_encode($post);
|
||||
if(!is_array($post) || !isset($post['merid']) || !isset($post['userid']) || !isset($post['amount']) || !isset($post['orderid']) || !isset($post['sign']) || !isset($post['status'])){
|
||||
Log::record($post,'error_pay_callback');
|
||||
exit();
|
||||
}
|
||||
|
||||
Log::record($post,'callback');
|
||||
|
||||
if($post['status'] != 'verified'){
|
||||
Log::record($post,'fail_pay_callback');
|
||||
exit();
|
||||
}
|
||||
$order = Db::name('order_record')->where(['order_sn'=>$post['orderid'],'user_id'=>$post['userid']])->find();
|
||||
if(!$order){
|
||||
$order_log['pay_channel_id'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到订单号,回调内容:".$serializeData;
|
||||
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['pay_channel_id'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是查询不到会员信息,会员可能已经删除或者停用,回调内容:".$serializeData;
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('OK');//用户不存在,回调失败
|
||||
}
|
||||
//验证签名
|
||||
$Md5key = "n7cznODIaFsY75BS1FLidCKaHAoKWtKHn5gSoQqnokNMzLtacFeyZ1Z9elkXHGXy"; //密钥
|
||||
$postData = $post;
|
||||
unset($postData['sign']);
|
||||
ksort($postData);
|
||||
$md5str = "";
|
||||
foreach ($postData as $key => $val) {
|
||||
$md5str = $md5str . $key . "=" . $val . "&";
|
||||
}
|
||||
$sign = md5($md5str . "key=" . $Md5key);
|
||||
|
||||
if ($sign != $post['sign']) {
|
||||
$update['status'] = 1;
|
||||
$update['remake'] = '签名不对,交易暂停';
|
||||
Db::name('order_record')->where('id',$order['id'])->update($update);
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是签名不对,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('success');//签名不对,回调失败
|
||||
}
|
||||
|
||||
//返回金额
|
||||
if(round($post['amount'],2) != $order['money']){
|
||||
$order_log = array();
|
||||
$order_log['pay_channel_id'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "收到回调,但是金额不对,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('success');//金额不对,回调失败
|
||||
}
|
||||
|
||||
//总代理金额
|
||||
$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'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$order_log['money'] = $order['money'];
|
||||
$order_log['create_time'] = time();
|
||||
$order_log['remake'] = "无法找到总代理,或者总代理账号余分不足,回调内容:".$serializeData;
|
||||
$order_log['order_id'] = $order['id'];
|
||||
Db::name('order_log')->insert($order_log);
|
||||
exit('success');//找不到总代理,回调失败
|
||||
}
|
||||
|
||||
|
||||
|
||||
//更新订单表
|
||||
$call_back_data['back_money'] = $post['amount'];
|
||||
$call_back_data['back_sign'] = '';
|
||||
$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'] = 4;
|
||||
$order_log['pay_channel_name'] = 'tingPay';
|
||||
$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('success');
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,314 @@
|
||||
<?php
|
||||
namespace app\onlinechip\controller\traits;
|
||||
use think\Db;
|
||||
use think\Log;
|
||||
use think\Request;
|
||||
trait yonghengPay{
|
||||
|
||||
|
||||
public function online_order(){
|
||||
$user_id = intval(Request::instance()->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 "<pre>";
|
||||
//print_r($returnArray);
|
||||
//echo "</pre>";
|
||||
//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');
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user