mwwdfl 发布的文章

1、支付是否成功判断
public function validate_apple_pay($receipt_data){
        /**
         * 21000 App Store不能读取你提供的JSON对象
         * 21002 receipt-data域的数据有问题
         * 21003 receipt无法通过验证
         * 21004 提供的shared secret不匹配你账号中的shared secret
         * 21005 receipt服务器当前不可用
         * 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送
         * 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务
         * 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务
         */
        function acurl($receipt_data, $sandbox=0){
            //小票信息
            $POSTFIELDS = array("receipt-data" => $receipt_data,'password'=>'8bc1988761044b279affc4250645aba2');
            $POSTFIELDS = json_encode($POSTFIELDS);

            //正式购买地址 沙盒购买地址
            $url_buy     = "https://buy.itunes.apple.com/verifyReceipt";
            $url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
            $url = $sandbox ? $url_sandbox : $url_buy;
//            $url = $url_sandbox;
            //简单的curl
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }
        // 验证参数
        if (strlen($receipt_data)<20){
            $result=array(
                'status'=>false,
                'message'=>'非法参数'
            );
            return $result;
        }
        // 请求验证
        $html = acurl($receipt_data);
        $data = json_decode($html,true);
        // 如果是沙盒数据 则验证沙盒模式
        if($data['status']=='21007'){
            // 请求验证
            $html = acurl($receipt_data, 1);
            $data = json_decode($html,true);
            $data['sandbox'] = '1';
        }

        if (isset($_GET['debug'])) {
            exit(json_encode($data));
        }
        if(empty($data)){
            $result=array(
                'status'=>false,
                'message'=>'error'
            );
            return $result;
        }
        // 判断是否购买成功
        if(intval($data['status'])===0){
            $result=array(
                'status'=>true,
                'message'=>'购买成功',
                'info'=>json_encode($data),
            );
        }else{
            $result=array(
                'status'=>false,
                'message'=>'购买失败 status:'.$data['status']
            );
        }
        return $result;
    }
2、调用
public function apppay()
    {
        $param = $_POST['param'];
        $res = $this->validate_apple_pay($param);
        if($res['status']){ok}else{error}
}

php
function daojishi(){
        /*活动倒计时*/
        $today =time();   //当前时间戳 6月7号
        $end_time = '2020-12-12 23:59:59';  //一般由数据库查询出来的活动结束时间
        $second = strtotime($end_time)-$today; //结束时间戳减去当前时间戳
        if($second <= 0){
            echo 'hhhhh';die;
        }
        // echo $second;
        $day = floor($second/3600/24);    //倒计时还有多少天
        $hr = floor($second/3600%24);     //倒计时还有多少小时(%取余数)
        $min = floor($second/60%60);      //倒计时还有多少分钟
        $sec = floor($second%60);         //倒计时还有多少秒
        $str = $day."天".$hr."小时".$min."分钟".$sec."秒";  //组合成字符串
        echo $str;
    }
js
<script>
    countDown();
    function addZero(i) {
        return i < 10 ? "0" + i: i + "";
    }
    function countDown() {
        var enddate = $('#enddate').val();
        var nowtime = new Date();
        var endtime = new Date(enddate);
        var lefttime = parseInt((endtime.getTime() - nowtime.getTime()) / 1000);
        var d = parseInt(lefttime / (24*60*60))
        var h = parseInt(lefttime / (60 * 60) % 24);
        var m = parseInt(lefttime / 60 % 60);
        var s = parseInt(lefttime % 60);
        d = addZero(d)
        h = addZero(h);
        m = addZero(m);
        s = addZero(s);
        document.querySelector(".djsd").innerHTML = d;
        document.querySelector(".djsh").innerHTML = h;
        document.querySelector(".djsm").innerHTML = m;
        document.querySelector(".djss").innerHTML = s;
        if (lefttime <= 0) {
            document.querySelector(".djsd").innerHTML = 0;
            document.querySelector(".djsh").innerHTML = 0;
            document.querySelector(".djsm").innerHTML = 0;
            document.querySelector(".djss").innerHTML = 0;
            return;
        }
        setTimeout(countDown, 1000);
    }
</script>

因为装的PHP版本是7.0的,抛弃了while方法,所以支付宝aopclient文件里的while方法识别不了,会报错:
while (list ($key, $val) = each ($para_temp)) {   //更改前

foreach ($para_temp as $key => $val) { //更改后

将while改为foreach即可

支付宝签约的时候的网址写个能访问到网站的页面就行

微信的要有个服务号获取授权(商户号要有地址以及服务号的授权域名)

1、在优化关联查询时,**只有在被驱动表上建立索引才有效!**

2、left join时,左侧的为驱动表,右侧为被驱动表!

1、直接浏览器输出(后台使用可用_blank直接跳走):
protected function put_csv($list,$title)
    {
        set_time_limit(0);//防止超时
        //ini_set("memory_limit", "512M");//防止内存溢出
        $file_name = "exam".time().".csv";
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$file_name );
        header('Cache-Control: max-age=0');
        $file = fopen('php://output',"a");
        $limit = 100000;
        $calc = 0;
        foreach ($title as $v){
            $tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
        }
        fputcsv($file,$tit);
        foreach ($list as $v){
            $calc++;
            if($limit == $calc){
                ob_flush();
                flush();
                $calc = 0;
            }
            foreach($v as $t){
                $tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
            }
            fputcsv($file,$tarr);
            unset($tarr);
        }
        unset($list);
        fclose($file);
        exit();
    }
public function daochu()
    {
        
        set_time_limit(0);//防止超时
        //ini_set("memory_limit", "512M");//防止内存溢出
        $headList = array('姓名', '电话', '密码', '新老');
        $dataList = Db::table('up_z_old_user')->field('u_name,u_phone,u_pass,u_old')
            ->page(1,100000)
            ->select();
        $this->put_csv($dataList, $headList);
    }
2、ajax直接保存然后返回路径(这个比较全,可以把要转换的字段对应关系做进去)
function exportExcel($file_name1,$file_name2,$title,$list,$status='',$values='')
{
    set_time_limit(0);//防止超时
    //ini_set("memory_limit", "512M");//防止内存溢出
    $date = date('Ymd');
    $dir = ROOT_PATH . 'public' . DS . 'excel/' . $date;
    if(!file_exists($dir)){
        //检查是否有该文件夹,如果没有就创建,并给予最高权限
        mkdir($dir, 0700,true);
    }
    $file_name = $file_name1 . $file_name2 . '.csv';
    $path = ("{$dir}/".iconv('UTF-8','gb2312',$file_name));
    $file = fopen($path, 'w');
    $limit = 100000;
    $calc = 0;
    foreach ($title as $v){
        $tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
    }
    fputcsv($file,$tit);
    foreach ($list as $v){
        $calc++;
        if($limit == $calc){
            ob_flush();
            flush();
            $calc = 0;
        }
        foreach($v as $kk => $t){
            if($status){
                if(in_array($kk,$status) && isset($values[$kk][$t]) && $values[$kk][$t]){
                    $t = $values[$kk][$t];
                }
            }
            $tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
        }
        fputcsv($file,$tarr);
        unset($tarr);
    }
    unset($list);
    fclose($file);
    $filePath = 'excel/' . $date . '/' . $file_name;
    $result = array( 'code' => 200, 'msg' =>"/".$filePath );
    return $result;
}
public function daochu()
    {
        set_time_limit(0);//防止超时
        //ini_set("memory_limit", "512M");//防止内存溢出
        if($data){
            $cellname = [
                '流水单号', '金额', '类型', '订单类型', '支付方式', '用户名称', '用户电话', '时间'
            ];
            $status = ['revenue_type','pay_type','revenue_one_type'];
            $values = [
                'revenue_type' => [1 => '收入',2 => '退款']
                ,'pay_type' => [1 => '微信',2 => '支付宝',3 => '银联']
                ,'revenue_one_type' => [1 => '自营订单',2 => '增补订单',3 => '统购订单',4 => '取消订单']
            ];
            $res = exportExcel('财务流水',date('Ymd'),$cellname,$data,$status,$values);
            return json($res);
        }else{
            return json(['code'=>0,'msg'=>'此条件下无数据']);
        }
    }