You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
13 KiB
347 lines
13 KiB
<?php
|
|
/**
|
|
* [Laike System] Copyright (c) 2017-2020 laiketui.com
|
|
* Laike is not a free software, it under the license terms, visited http://www.laiketui.com/ for more details.
|
|
*
|
|
* 通用通知接口
|
|
* ====================================================
|
|
* 支付完成后,微信会把相关支付和用户信息发送到商户设定的通知URL,
|
|
* 商户接收回调信息后,根据需要设定相应的处理流程。
|
|
*
|
|
*/
|
|
|
|
session_name("money_mojavi");
|
|
session_start();
|
|
date_default_timezone_set('Asia/Chongqing');
|
|
set_time_limit(0);
|
|
require_once(dirname(__FILE__) . "/webapp/config.php");
|
|
require_once(MO_APP_DIR."/laiketui.php");
|
|
require_once(dirname(__FILE__) . '/webapp/config/db_config.php');
|
|
require_once(dirname(__FILE__) . '/webapp/lib/DBAction.class.php');
|
|
require_once(dirname(__FILE__) . '/webapp/lib/WxPayPubHelper/WxPayPubHelper.php');
|
|
require_once(dirname(__FILE__) . '/webapp/lib/WxPayPubHelper/log_.php');
|
|
require_once(dirname(__FILE__) . '/webapp/lib/SysConst.class.php');
|
|
|
|
class order
|
|
{
|
|
|
|
|
|
//充值成功金额增加
|
|
public function cz($openid, $cmoney, $trade_no)
|
|
{
|
|
|
|
$db = DBAction::getInstance();
|
|
$sql = "select * from lkt_user where wx_id = '$openid'";
|
|
$r = $db->select($sql);
|
|
$money = $r[0]->money; // 用户金额
|
|
$user_id = $r[0]->user_id; // 用户id
|
|
$event = $trade_no;
|
|
$sqll = "insert into lkt_record (user_id,money,oldmoney,event,type) values ('$user_id','$cmoney','$money','$event',1)";
|
|
$db->insert($sqll);
|
|
//修改金额
|
|
$sql = "update lkt_user set money = money+'$cmoney' where wx_id = '$openid'";
|
|
$db->update($sql);
|
|
exit;
|
|
}
|
|
|
|
//开团
|
|
public function creatgroup($order)
|
|
{
|
|
|
|
$db = DBAction::getInstance();
|
|
//开启事务
|
|
$db->begin();
|
|
$uid = $order['uid'];
|
|
$pro_id = $order['pro_id'];
|
|
$time_over = $order['time_over'];
|
|
$sizeid = $order['sizeid'];
|
|
$groupid = $order['groupid'];
|
|
$pro_name = $order['pro_name'];
|
|
$price = $order['price'];
|
|
$y_price = $order['y_price'];
|
|
$name = $order['name'];
|
|
$sheng = $order['sheng'];
|
|
$shi = $order['shi'];
|
|
$quyu = $order['quyu'];
|
|
$address = $order['address'];
|
|
$tel = $order['tel'];
|
|
$buy_num = $order['buy_num'];
|
|
$paytype = $order['paytype'];
|
|
$trade_no = $order['trade_no'];
|
|
$status = $order['status'];
|
|
$ordstatus = $status == 1 ? 9 : 0;
|
|
|
|
$group_num = 'KT' . substr(time(), 5) . mt_rand(10000, 99999);
|
|
$creattime = date('Y-m-d H:i:s');
|
|
$time_over = explode(':', $time_over);
|
|
$time_over = date('Y-m-d H:i:s', $time_over[0] * 3600 + $time_over[1] * 60 + time());
|
|
$pro_size = $db->select("select name,color,size from lkt_configure where id=$sizeid");
|
|
$pro_size = $pro_size[0]->name . $pro_size[0]->color . $pro_size[0]->size;
|
|
|
|
$istsql1 = "insert into lkt_group_open(uid,ptgoods_id,ptcode,ptnumber,addtime,endtime,ptstatus,group_id) values('$uid',$pro_id,'$group_num',1,'$creattime','$time_over',$status,'$groupid')";
|
|
$res1 = $db->insert($istsql1);
|
|
|
|
if ($res1 < 1) {
|
|
$db->rollback();
|
|
return $istsql1;
|
|
}
|
|
|
|
|
|
$user_id = $db->select("select user_id from lkt_user where wx_id='$uid'");
|
|
$uid = $user_id[0]->user_id;
|
|
$ordernum = 'PT' . mt_rand(10000, 99999) . date('Ymd') . substr(time(), 5);
|
|
$istsql2 = "insert into lkt_order(user_id,name,mobile,num,z_price,sNo,sheng,shi,xian,address,pay,add_time,status,otype,ptcode,pid,ptstatus,trade_no) values('$uid','$name','$tel',$buy_num,$price,'$ordernum',$sheng,$shi,$quyu,'$address','$paytype','$creattime',$ordstatus,'pt','$group_num','$groupid',$status,'$trade_no')";
|
|
$res2 = $db->insert($istsql2);
|
|
if ($res2 < 1) {
|
|
$db->rollback();
|
|
return $istsql2;
|
|
}
|
|
|
|
|
|
$istsql3 = "insert into lkt_order_details(user_id,p_id,p_name,p_price,num,r_sNo,add_time,r_status,size,sid) values('$uid',$pro_id,'$pro_name',$y_price,$buy_num,'$ordernum','$creattime',-1,'$pro_size',$sizeid)";
|
|
$res3 = $db->insert($istsql3);
|
|
if ($res3 < 1) {
|
|
$db->rollback();
|
|
return $istsql3;
|
|
}
|
|
$db->commit();
|
|
|
|
|
|
}
|
|
|
|
//参团
|
|
public function can_order($order)
|
|
{
|
|
|
|
$db = DBAction::getInstance();
|
|
//开启事务
|
|
$db->begin();
|
|
$oid = $order['oid'];
|
|
$uid = $order['uid'];
|
|
$pro_id = $order['pro_id'];
|
|
$man_num = $order['man_num'];
|
|
$sizeid = $order['sizeid'];
|
|
$groupid = $order['groupid'];
|
|
$pro_name = $order['pro_name'];
|
|
$price = $order['price'];
|
|
$y_price = $order['y_price'];
|
|
$name = $order['name'];
|
|
$sheng = $order['sheng'];
|
|
$shi = $order['shi'];
|
|
$quyu = $order['quyu'];
|
|
$address = $order['address'];
|
|
$tel = $order['tel'];
|
|
$buy_num = $order['buy_num'];
|
|
$paytype = $order['paytype'];
|
|
$trade_no = $order['trade_no'];
|
|
$status = $order['status'];
|
|
$ordstatus = $status == 1 ? 9 : 0;
|
|
|
|
$creattime = date('Y-m-d H:i:s');
|
|
$pro_size = $db->select("select name,color,size from lkt_configure where id=$sizeid");
|
|
$pro_size = $pro_size[0]->name . $pro_size[0]->color . $pro_size[0]->size;
|
|
$selsql = "select ptnumber,ptstatus,endtime from lkt_group_open where group_id='$groupid' and ptcode='$oid'";
|
|
$selres = $db->select($selsql);
|
|
if (!empty($selres)) {
|
|
|
|
$ptnumber = $selres[0]->ptnumber;
|
|
$endtime = strtotime($selres[0]->endtime);
|
|
|
|
}
|
|
|
|
$ordernum = 'PT' . mt_rand(10000, 99999) . date('Ymd') . substr(time(), 5);
|
|
$user_id = $db->select("select user_id from lkt_user where wx_id='$uid'");
|
|
$uid = $user_id[0]->user_id;
|
|
|
|
if ($endtime >= time()) {
|
|
|
|
if (($ptnumber + 1) < $man_num) {
|
|
|
|
$istsql2 = "insert into lkt_order(user_id,name,mobile,num,z_price,sNo,sheng,shi,xian,address,pay,add_time,otype,ptcode,pid,ptstatus,status,trade_no) values('$uid','$name','$tel',$buy_num,$price,'$ordernum',$sheng,$shi,$quyu,'$address','$paytype','$creattime','pt','$oid','$groupid',$status,$ordstatus,'$trade_no')";
|
|
$res2 = $db->insert($istsql2);
|
|
$istsql3 = "insert into lkt_order_details(user_id,p_id,p_name,p_price,num,r_sNo,add_time,r_status,size,sid) values('$uid',$pro_id,'$pro_name',$y_price,$buy_num,'$ordernum','$creattime',-1,'$pro_size',$sizeid)";
|
|
$res3 = $db->insert($istsql3);
|
|
$updsql = "update lkt_group_open set ptnumber=ptnumber+1 where group_id='$groupid' and ptcode='$oid'";
|
|
$db->update($updsql);
|
|
if ($res2 > 0 && $res3 > 0) {
|
|
|
|
$idres = $db->select("select id from lkt_order where sNo='$ordernum'");
|
|
if (!empty($idres)) $idres = $idres[0]->id;
|
|
$db->commit();
|
|
return 'code:1';
|
|
} else {
|
|
|
|
$db->rollback();
|
|
return 'code:2';
|
|
|
|
}
|
|
|
|
} else if (($ptnumber + 1) === $man_num) {
|
|
|
|
$istsql2 = "insert into lkt_order(user_id,name,mobile,num,z_price,sNo,sheng,shi,xian,address,pay,add_time,otype,ptcode,pid,ptstatus,status,trade_no) values('$uid','$name','$tel',$buy_num,'$price','$ordernum',$sheng,$shi,$quyu,'$address','$paytype','$creattime','pt','$oid','$groupid',$status,$ordstatus,'$trade_no')";
|
|
$res2 = $db->insert($istsql2);
|
|
$istsql3 = "insert into lkt_order_details(user_id,p_id,p_name,p_price,num,r_sNo,add_time,r_status,size,sid) values('$uid',$pro_id,'$pro_name',$y_price,$buy_num,'$ordernum','$creattime',-1,'$pro_size',$sizeid)";
|
|
$res3 = $db->insert($istsql3);
|
|
$updsql = "update lkt_group_open set ptnumber=ptnumber+1,ptstatus=2 where group_id='$groupid' and ptcode='$oid'";
|
|
$db->update($updsql);
|
|
$beres = $db->update("update lkt_order set ptstatus=2,status=1 where pid='$groupid' and ptcode='$oid'");
|
|
|
|
if ($beres < 1) {
|
|
$db->rollback();
|
|
return 'code:3';
|
|
}
|
|
|
|
$selmsg = "select m.*,d.p_name,d.p_price,d.num,d.sid from (select o.id,o.user_id,o.ptcode,o.sNo,o.z_price,u.wx_id as uid from lkt_order as o left join lkt_user as u on o.user_id=u.user_id where o.pid='$groupid' and o.ptcode='$oid') as m left join lkt_order_details as d on m.sNo=d.r_sNo";
|
|
$msgres = $db->select($selmsg);
|
|
|
|
foreach ($msgres as $k => $v) {
|
|
|
|
$beres = $db->update("update lkt_configure set num=num-$v->num where id=$v->sid");
|
|
if ($beres < 1) {
|
|
$db->rollback();
|
|
return 'code:4';
|
|
}
|
|
|
|
$fromidsql = "select fromid,open_id from lkt_user_fromid where open_id='$v->uid' and id=(select max(id) from lkt_user_fromid where open_id='$v->uid')";
|
|
$fromidres = $db->select($fromidsql);
|
|
foreach ($fromidres as $ke => $val) {
|
|
|
|
if ($val->open_id == $v->uid) {
|
|
$msgres[$k]->fromid = $val->fromid;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($res2 > 0 && $res3 > 0) {
|
|
$sql = "select * from lkt_notice where id = '1'";
|
|
$db->select($sql);
|
|
$db->commit();
|
|
} else {
|
|
$db->rollback();
|
|
return 'code:5';
|
|
|
|
}
|
|
|
|
} else if ($ptnumber == $man_num) {
|
|
|
|
$beres = $db->update("update lkt_user set money=money+$price where user_id='$uid'");
|
|
if ($beres < 1) {
|
|
$db->rollback();
|
|
return 'code:6';
|
|
}
|
|
$db->commit();
|
|
return 'code:7';
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
$beres = $db->update("update lkt_user set money=money+$price where user_id='$uid'");
|
|
if ($beres < 1) {
|
|
$db->rollback();
|
|
return 'code:8';
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$db = DBAction::getInstance();
|
|
|
|
//使用通用通知接口
|
|
$notify = new Notify_pub();
|
|
//存储微信的回调
|
|
$xml = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents('php://input');
|
|
$notify->saveData($xml);
|
|
if ($notify->checkSign() == FALSE) {
|
|
$notify->setReturnParameter("return_code", "FAIL");//返回状态码
|
|
$notify->setReturnParameter("return_msg", "签名失败");//返回信息
|
|
} else {
|
|
$notify->setReturnParameter("return_code", "SUCCESS");//设置返回码
|
|
}
|
|
|
|
$returnXml = $notify->returnXml();
|
|
echo $returnXml;
|
|
|
|
//以log文件形式记录回调信息
|
|
$log_ = new Log_();
|
|
$log_name = "./notify_url.log";//log文件路径
|
|
$log_->log_result($log_name, "【接收到的notify通知】:\n" . $xml . "\n");
|
|
|
|
if ($notify->checkSign() == TRUE) {
|
|
|
|
$log_->log_result($log_name, "【签名验证结果 succ】:\n" . $notify->checkSign() . "\n");
|
|
if ($notify->data["return_code"] == "FAIL") {
|
|
//此处应该更新一下订单状态,商户自行增删操作
|
|
$log_->log_result($log_name, "【通信出错】:\n" . $xml . "\n");
|
|
|
|
} elseif ($notify->data["result_code"] == "FAIL") {
|
|
//此处应该更新一下订单状态,商户自行增删操作
|
|
$log_->log_result($log_name, "【业务出错】:\n" . $xml . "\n");
|
|
|
|
} else {
|
|
//此处应该更新一下订单状态,商户自行增删操作
|
|
$trade_no = $notify->data["out_trade_no"];
|
|
$type = substr($trade_no, 0, 2);
|
|
|
|
if ($type == 'CZ') {
|
|
$czsql = "select event from lkt_record where event = '$trade_no' ";
|
|
$czres = $db->select($czsql);
|
|
if (!$czres) {
|
|
$order = new order;
|
|
$openid = $notify->data["openid"];
|
|
$cmoney = $notify->data["total_fee"] / 100;
|
|
$order->cz($openid, $cmoney, $trade_no);
|
|
}
|
|
|
|
} else if ($type == 'PT') {
|
|
|
|
$dsql = "select data from lkt_order_data where trade_no = '$trade_no'";
|
|
$dres = $db->select($dsql);
|
|
$data = unserialize($dres[0]->data);
|
|
$order = new order;
|
|
if ($data['pagefrom'] == 'kaituan') {
|
|
$ptres = $order->creatgroup($data);
|
|
} else {
|
|
$ptres = $order->can_order($data);
|
|
}
|
|
$log_->log_result($log_name, "【拼团处理结果】:\n" . $ptres . "\n");
|
|
|
|
} else {
|
|
|
|
$sql = "select * from lkt_order where trade_no='$trade_no'";
|
|
$r = $db->select($sql);
|
|
if ($r) {
|
|
$status = $r[0]->status;
|
|
$sNo = $r[0]->sNo;
|
|
if ($status < 1) {
|
|
$sql_u = "update lkt_order set status = 1,trade_no='$trade_no' where sNo = '$sNo' ";
|
|
$r_u = $db->update($sql_u);
|
|
if ($r_u) {
|
|
$time = date("Y-m-d h:i:s", time()); // 当前时间
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
$log_->log_result($log_name, "【签名验证结果 fail】:\n" . $notify->checkSign() . "\n");
|
|
|
|
}
|
|
|
|
|
|
?>
|