2020年7月

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>