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.
 

401 lines
16 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.
*/
require_once(MO_LIB_DIR . '/DBAction.class.php');
/*
定时器类
*/
class crontabAction extends Action
{
public function getDefaultView()
{
$db = DBAction::getInstance();
$dd = date('Y-m-d H:i:s', strtotime("-15 day"));
$ss = $db->select("select r_sNo,id,user_id from lkt_order_details where deliver_time<'" . $dd . "' and r_status = 2");//查询订单发货时间超过15天的待收货时间
if ($ss) {
foreach ($ss as $key => $value01) {
$sNo = $value01->r_sNo;
$value01->user_id;
$db->update("UPDATE `lkt_order_details` SET`r_status`='5' WHERE id = " . $value01->id);
$this->detailedcommission($sNo);
$sql_o = "select id from lkt_order_details where r_sNo = '$sNo' AND r_status = '5' ";
$res_o = $db->selectrow($sql_o);//查询订单状态为待收货的行数
$sql_d = "select id from lkt_order_details where r_sNo = '$sNo'";
$res_d = $db->selectrow($sql_d);
// 如果订单下面的商品都处在同一状态,那就改订单状态为已完成
if ($res_o == $res_d) {
//如果订单数量相等 则修改父订单状态
$sql = "update lkt_order set status = '5' where sNo = '$sNo'";
$db->update($sql);
}
}
}
}
public function Send_fail($uid, $fromid, $sNo, $p_name, $price, $template_id, $page)
{
$db = DBAction::getInstance();
$sql = "select * from lkt_config where id=1";
$r = $db->select($sql);
if ($r) {
$appid = $r[0]->appid; // 小程序唯一标识
$appsecret = $r[0]->appsecret; // 小程序的 app secret
$AccessToken = $this->getAccessToken($appid, $appsecret);
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' . $AccessToken;
}
$data = array();
$data['access_token'] = $AccessToken;
$data['touser'] = $uid;
$data['template_id'] = $template_id;
$data['form_id'] = $fromid;
$data['page'] = $page;
$price = $price . '元';
$minidata = array('keyword1' => array('value' => $sNo, 'color' => "#173177"), 'keyword2' => array('value' => $p_name, 'color' => "#173177"), 'keyword3' => array('value' => $price, 'color' => "#173177"), 'keyword4' => array('value' => '退回到钱包', 'color' => "#FF4500"), 'keyword5' => array('value' => '拼团失败--退款', 'color' => "#FF4500"));
$data['data'] = $minidata;
$data = json_encode($data);
$da = $this->httpsRequest($url, $data);
$delsql = "delete from lkt_user_fromid where open_id='$uid' and fromid='$fromid'";
$db->delete($delsql);
}
/*
* 发送请求
@param $ordersNo string 订单号 
@param $refund string 退款单号
@param $price float 退款金额
return array
*/
private function wxrefundapi($ordersNo, $refund, $total_fee, $price)
{
//通过微信api进行退款流程
$db = DBAction::getInstance();
$sql = "select * from lkt_config where id=1";
$r = $db->select($sql);
if ($r) {
$appid = $r[0]->appid;
// 小程序唯一标识
$appsecret = $r[0]->appsecret;
// 小程序的 app secret
$company = $r[0]->company;
$mch_key = $r[0]->mch_key; // 商户key
$mch_id = $r[0]->mch_id; // 商户mch_id
}
$parma = array('appid' => $appid, 'mch_id' => $mch_id, 'nonce_str' => $this->createNoncestr(), 'out_refund_no' => $refund, 'out_trade_no' => $ordersNo, 'total_fee' => $total_fee, 'refund_fee' => $price, 'op_user_id' => $appid);
$parma['sign'] = $this->getSign($parma, $mch_key);
$xmldata = $this->arrayToXml($parma);
$xmlresult = $this->postXmlSSLCurl($xmldata, 'https://api.mch.weixin.qq.com/secapi/pay/refund');
$result = $this->xmlToArray($xmlresult);
return $result;
}
/*
* 生成随机字符串方法
*/
protected function createNoncestr($length = 32)
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
/*
* 对要发送到微信统一下单接口的数据进行签名
*/
protected function getSign($Obj, $mch_key)
{
foreach ($Obj as $k => $v) {
$Parameters[$k] = $v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//签名步骤二:在string后加入KEY
$String = $String . "&key=" . $mch_key;
//签名步骤三:MD5加密
$String = md5($String);
//签名步骤四:所有字符转为大写
$result_ = strtoupper($String);
return $result_;
}
/*
*排序并格式化参数方法,签名时需要使用
*/
protected function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v) {
if ($urlencode) {
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0) {
$reqPar = substr($buff, 0, strlen($buff) - 1);
}
return $reqPar;
}
//数组转字符串方法
protected function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
} else {
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
}
}
$xml .= "</xml>";
return $xml;
}
protected function xmlToArray($xml)
{
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
//需要使用证书的请求
private function postXmlSSLCurl($xml, $url, $second = 30)
{
$ch = curl_init();
//超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//设置证书
//使用证书:cert 与 key 分别属于两个.pem文件
//默认格式为PEM,可以注释
$cert = str_replace('lib', 'filter', MO_LIB_DIR) . '/apiclient_cert.pem';
$key = str_replace('lib', 'filter', MO_LIB_DIR) . '/apiclient_key.pem';
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERT, $cert);
//默认格式为PEM,可以注释
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, $key);
//post提交方式
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$data = curl_exec($ch);
//返回结果
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
echo "curl出错,错误码:$error" . "<br>";
curl_close($ch);
return false;
}
}
public function Send_success($arr, $template_id)
{
$db = DBAction::getInstance();
$sql = "select * from lkt_config where id=1";
$r = $db->select($sql);
if ($r) {
$appid = $r[0]->appid; // 小程序唯一标识
$appsecret = $r[0]->appsecret; // 小程序的 app secret
$AccessToken = $this->getAccessToken($appid, $appsecret);
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' . $AccessToken;
}
foreach ($arr as $k => $v) {
$data = array();
$data['access_token'] = $AccessToken;
$data['touser'] = $v->uid;
$data['template_id'] = $template_id;
$data['form_id'] = $v->fromid;
$data['page'] = "pages/order/detail?orderId=$v->id";
$p_price = $v->p_price . '元';
$z_price = $v->z_price . '元';
$minidata = array('keyword1' => array('value' => $v->p_name, 'color' => "#173177"), 'keyword2' => array('value' => $p_price, 'color' => "#173177"), 'keyword3' => array('value' => $z_price, 'color' => "#173177"), 'keyword4' => array('value' => $v->sNo, 'color' => "#173177"), 'keyword5' => array('value' => '拼团失败', 'color' => "#FF4500"), 'keyword6' => array('value' => $v->add_time, 'color' => "#173177"));
$data['data'] = $minidata;
$data = json_encode($data);
$this->httpsRequest($url, $data);
$delsql = "delete from lkt_user_fromid where open_id='$v->uid' and fromid='$v->fromid'";
$db->delete($delsql);
}
}
public function get_fromid($openid, $type = '')
{
$db = DBAction::getInstance();
if (empty($type)) {
$fromidsql = "select fromid,open_id from lkt_user_fromid where open_id='$openid' and id=(select max(id) from lkt_user_fromid where open_id='$openid')";
$fromidres = $db->select($fromidsql);
if ($fromidres) {
$fromid = $fromidres[0]->fromid;
$arrayName = array('openid' => $openid, 'fromid' => $fromid);
return $arrayName;
} else {
return array('openid' => $openid, 'fromid' => '123456');
}
} else {
$delsql = "delete from lkt_user_fromid where open_id='$openid' and fromid='$type'";
$db->delete($delsql);
$fromidsql = "select fromid,open_id from lkt_user_fromid where open_id='$openid' and id=(select max(id) from lkt_user_fromid where open_id='$openid')";
$fromidres = $db->select($fromidsql);
if ($fromidres) {
$fromid = $fromidres[0]->fromid;
$arrayName = array('openid' => $openid, 'fromid' => $fromid);
return $arrayName;
} else {
return array('openid' => $openid, 'fromid' => '123456');
}
}
}
function httpsRequest($url, $data = null)
{
// 1.初始化会话
$ch = curl_init();
// 2.设置参数: url + header + 选项
// 设置请求的url
curl_setopt($ch, CURLOPT_URL, $url);
// 保证返回成功的结果是服务器的结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (!empty($data)) {
// 发送post请求
curl_setopt($ch, CURLOPT_POST, 1);
// 设置发送post请求参数数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
// 3.执行会话; $result是微信服务器返回的JSON字符串
$result = curl_exec($ch);
// 4.关闭会话
curl_close($ch);
return $result;
}
function getAccessToken($appID, $appSerect)
{
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appID . "&secret=" . $appSerect;
// 时效性7200秒实现
// 1.当前时间戳
$currentTime = time();
// 2.修改文件时间
$fileName = "accessToken"; // 文件名
if (is_file($fileName)) {
$modifyTime = filemtime($fileName);
if (($currentTime - $modifyTime) < 7200) {
// 可用, 直接读取文件的内容
$accessToken = file_get_contents($fileName);
return $accessToken;
}
}
// 重新发送请求
$result = $this->httpsRequest($url);
$jsonArray = json_decode($result, true);
// 写入文件
$accessToken = $jsonArray['access_token'];
file_put_contents($fileName, $accessToken);
return $accessToken;
}
//监测拼团活动有没有过期的,改变其活动状态
function huodongzhuangtai($db)
{
$rrr = $db->select("select * from lkt_group_product order by group_id desc");
if ($rrr) {
foreach ($rrr as $key => $value) {
$cfg = unserialize($value->group_data);
$starttime = $cfg->starttime;
$end_time = $cfg->endtime;
$g_status = $value->g_status;
$data = date('Y-m-d H:i:s', time());
if ($starttime < $data && $data < $end_time && $g_status == 1) {//处理正在进行中的
$re = $db->select("select lkt_product_list.recycle ,lkt_product_list.status from lkt_group_product,lkt_product_list where group_id = $value->id and lkt_group_product.product_id = lkt_product_list.id");
if ($re) {
if ($re[0]->recycle != 1 && $re[0]->status != 1) {
$res = $db->update("UPDATE `lkt_group_product` SET `g_status`='2' WHERE id = " . $value->id);
}
}
}
if ($end_time < $data || $g_status == 3) {//处理过期的
$db->update("UPDATE `lkt_group_product` SET `g_status`='3' WHERE id = " . $value->id);
$r = $db->select("select * from lkt_group_open where group_id=$value->group_id and ptstatus =1 ");
if ($r) {
foreach ($r as $key01 => $value01) {
$db->update("UPDATE `lkt_group_open` SET `ptstatus`='3' WHERE id = " . $value01->id);
$ee = $db->select("select user_id,z_price,sNo,pay from lkt_order where ptcode = '" . $value01->ptcode . "'");
if ($ee) {
foreach ($ee as $key02 => $value02) {
$db->update("UPDATE `lkt_order_details` SET `r_status`='11' WHERE r_sNo = '" . $value02->sNo . "'");
$db->update("UPDATE lkt_user SET money =money+$value02->z_price WHERE user_id = '" . $value02->user_id . "'");
$event = $value02->user_id . '退回拼团金额' . $value02->z_price . '';
$sqlldr = "insert into lkt_record (user_id,money,oldmoney,event,type) values ('$value02->user_id','$value02->z_price','','$event',5)";
$db->insert($sqlldr);
}
}
$db->update("UPDATE `lkt_order` SET `ptstatus`='3', `status`='11' WHERE ptcode = " . $value01->ptcode);
}
}
}// end if
} // end foreach
} //end if
return;
}
public function execute()
{
return;
}
public function getRequestMethods()
{
return Request :: POST;
}
}
?>