mwwdfl 发布的文章

本该是二维码的图片,但是出现不了,显示空白,代码使用的是PHP的qrcode,查询了一些资料后使用了ob_clean(),居然全都正常出来了,大概的意思是,程序中如果有大量生成图片的地方,在输出时 ,必须要先清掉缓存区;
20190126102350646613.jpg

高德:
JsKey:f864fe1d450df051c5b57167f42a71b2

WebKey:c132bda15ffbdbe4c51b006b2951ef1b
百度
服务器端(web):dsOE1fqvrdIPMRqZW8WYylBO36mWHVSp

浏览器端(js):GZSILhN6GDZpDkdku64uWWnGTgTBQmzX

项目背景:用curl调用第三方erp接口上传数据,数据过大的时候返回null,用postman就可以,
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
因为当 strlen($data) > 1024 时,curl_exec函数将返回空字符串。要加一行参:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

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>