<?php
error_reporting(0);
header("Content-type: text/html; charset=utf-8");
require_once 'model/builder/AlipayTradePrecreateContentBuilder.php';
require_once 'service/AlipayTradeService.php';
if (!empty($_POST['out_trade_no']) && trim($_POST['out_trade_no']) != "") {
  // (必填) 商户网站订单系统中唯一订单号，64个字符以内，只能包含字母、数字、下划线，
  // 需保证商户系统端不能重复，建议通过数据库sequence生成，
  //$outTradeNo = "qrpay".date('Ymdhis').mt_rand(100,1000);
  $outTradeNo = $_POST['out_trade_no'];
  // (必填) 订单标题，粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
  $subject = $_POST['subject'];
  // (必填) 订单总金额，单位为元，不能超过1亿元
  // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
  $totalAmount = $_POST['total_amount'];
  // (不推荐使用) 订单可打折金额，可以配合商家平台配置折扣活动，如果订单部分商品参与打折，可以将部分商品总价填写至此字段，默认全部商品可打折
  // 如果该值未传入,但传入了【订单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
  //String discountableAmount = "1.00"; //
  // (可选) 订单不可打折金额，可以配合商家平台配置折扣活动，如果酒水不参与打折，则将对应金额填写至此字段
  // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
  $undiscountableAmount = "";
  // 卖家支付宝账号ID，用于支持一个签约账号下支持打款到不同的收款账号，(打款到sellerId对应的支付宝账号)
  // 如果该字段为空，则默认为与支付宝签约的商户的PID，也就是appid对应的PID
  //$sellerId = "";
  // 订单描述，可以对交易或商品进行一个详细地描述，比如填写"购买商品2件共15.00元"
  $body = "";
  //商户操作员编号，添加此参数可以为商户操作员做销售统计
  $operatorId = "";
  // (可选) 商户门店编号，通过门店号和商家后台可以配置精准到门店的折扣信息，详询支付宝技术支持
  $storeId = "";
  // 支付宝的店铺编号
  $alipayStoreId = "";
  // 业务扩展参数，目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法)，系统商开发使用,详情请咨询支付宝技术支持
  $providerId = ""; //系统商pid,作为系统商返佣数据提取的依据
  $extendParams = new ExtendParams();
  $extendParams->setSysServiceProviderId($providerId);
  $extendParamsArr = $extendParams->getExtendParams();
  // 支付超时，线下扫码交易定义为5分钟
  $timeExpress = "5m";
  // 商品明细列表，需填写购买商品详细信息，
  $goodsDetailList = array();
  // 创建一个商品信息，参数含义分别为商品id（使用国标）、名称、单价（单位为分）、数量，如果需要添加商品类别，详见GoodsDetail
  $goods1 = new GoodsDetail();
  $goods1->setGoodsId("apple-01");
  $goods1->setGoodsName("iphone");
  $goods1->setPrice(3000);
  $goods1->setQuantity(1);
  //得到商品1明细数组
  $goods1Arr = $goods1->getGoodsDetail();
  // 继续创建并添加第一条商品信息，用户购买的产品为“xx牙刷”，单价为5.05元，购买了两件
  $goods2 = new GoodsDetail();
  $goods2->setGoodsId("apple-02");
  $goods2->setGoodsName("ipad");
  $goods2->setPrice(1000);
  $goods2->setQuantity(1);
  //得到商品1明细数组
  $goods2Arr = $goods2->getGoodsDetail();
  $goodsDetailList = array($goods1Arr, $goods2Arr);
  //第三方应用授权令牌,商户授权系统商开发模式下使用
  $appAuthToken = "";//根据真实值填写
  // 创建请求builder，设置请求参数
  $qrPayRequestBuilder = new AlipayTradePrecreateContentBuilder();
  $qrPayRequestBuilder->setOutTradeNo($outTradeNo);
  $qrPayRequestBuilder->setTotalAmount($totalAmount);
  $qrPayRequestBuilder->setTimeExpress($timeExpress);
  $qrPayRequestBuilder->setSubject($subject);
  $qrPayRequestBuilder->setBody($body);
  $qrPayRequestBuilder->setUndiscountableAmount($undiscountableAmount);
  $qrPayRequestBuilder->setExtendParams($extendParamsArr);
  $qrPayRequestBuilder->setGoodsDetailList($goodsDetailList);
  $qrPayRequestBuilder->setStoreId($storeId);
  $qrPayRequestBuilder->setOperatorId($operatorId);
  $qrPayRequestBuilder->setAlipayStoreId($alipayStoreId);
  $qrPayRequestBuilder->setAppAuthToken($appAuthToken);
  // 调用qrPay方法获取当面付应答
  $qrPay = new AlipayTradeService($aliconfig);
  $qrPayResult = $qrPay->qrPay($qrPayRequestBuilder);
  //	根据状态值进行业务处理
  switch ($qrPayResult->getTradeStatus()) {
    case "SUCCESS":
      //echo "支付宝创建订单二维码成功:" . "<br>---------------------------------------<br>";
      $response = $qrPayResult->getResponse();
      $qrcode = $qrPay->create_erweima($response->qr_code);
      if (stripos($_POST['subject'], '会员自助充值') !== false) {
        $tzurl = $siteurl . "member/";
      } else {
        $tzurl = $siteurl . "adfabu.html";
      }
      echo <<<html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="stylesheet" href="data/bootstrap-reboot.min.css">
  <link rel="stylesheet" href="data/bootstrap-grid.css">
  <link rel="stylesheet" href="data/pc_qrcode.css">
  <script type="text/javascript" src="data/jquery.min.js"></script>
  <script type="text/javascript" src="data/utf.js"></script>
  <script type="text/javascript" src="data/qrcode.min.js"></script>
  <title>{$sitename} - 支付宝官方支付</title>
</head>
<body>
<section class="section details__section section--first  section--last">
  <div style="padding-bottom: 18px;padding-top: 15px;" class="container">
    <div class="row ">
      <div class="col-12">
        <div style="text-align:center" class="mt-3">
          <img src="data/alipay.jpg" alt="alipay" style="height:30px;">
        </div>
      </div>
    </div>
  </div>
  <div class="container">
    <div class="row">
      <div class="col-12">
        <div class="order">
          <span>服务订单号：<span id="copy_money">{$_POST['out_trade_no']}</span></span>
        </div>
        <div class="goods_name">
          <span>服务名称：{$_POST['subject']}</span>
        </div>
        <div class="price mt-2">
          <span>{$_POST['total_amount']}</span>
          <span>元</span>
        </div>
        <div id="qrcode"></div>
        <a id="startApp" target="_blank" class="header__order mt-2 zfbbtn" style="display: none;"><span>点击启动支付宝</span></a>
        <div class="price mt-1">
          <span style="color:red"></span>
          <span style="color:red"></span>
          <span id="divTime" style="color:red"></span>
        </div>
        <div class="shanxinzha">
          <span>请使用支付宝扫一扫，支付成功后自动开通服务</span>
        </div>
      </div>
    </div>
  </div>
</section>
<script type="text/javascript">
  var intDiff = parseInt('300');
  function timer(intDiff){
    var intervalId = window.setInterval(function (){
      var day = 0, hour = 0, minute = 0, second = 0;
      if (intDiff>0) {
        day = Math.floor(intDiff / (60 * 60 * 24));
        hour = Math.floor(intDiff / (60 * 60)) - (day * 24);
        minute = Math.floor(intDiff / 60) - (day * 24 * 60) - (hour * 60);
        second = Math.floor(intDiff) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
      }
      if (minute<=9) minute = '0' + minute;
      if (second<=9) second = '0' + second;
      if (hour<=0 && minute<=0 && second<=0) {
        $("#divTime").html("<small style='color:red; font-size:26px'>二维码已过期,请重新提交。</small>");
        $("#qrcode").html('');
        setTimeout(function (){
          alert("二维码已过期,请重新提交。");
          location.href = '{$tzurl}';
        }, 5000);
        clearInterval(intervalId);
      } else {
        let xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (){
          if (xhr.readyState === 4) {
            var text = this.responseText;
            if (text === "200") {
              $("#divTime").html("<small style='color:#4caf50; font-size:26px'>已支付成功！</small>");
              $("#qrcode").html('');
              setTimeout(function (){
                alert("已支付成功！");
                location.href = '{$tzurl}';
              }, 5000);
              clearInterval(intervalId);
            } else {
              $("#divTime").html("二维码有效时间:<small style='color:red; font-size:26px'>" + minute + "</small>分<small style='color:red; font-size:26px'>" + second + "</small>秒");
            }
          }
        };
        xhr.open("post", "{$siteurl}zdmsl_dada/adfabu.php", true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send("alipay={$_POST['out_trade_no']}");
      }
      intDiff--
    }, 1000);
  }
  $(function (){
    timer(intDiff);
  });
</script>
<script type="text/javascript">
  $("#qrcode").qrcode({
    render: "canvas", //设置渲染方式，有table和canvas
    text: '{$qrcode}', //扫描二维码后自动跳向该链接
    width: "180", //二维码的宽度
    height: "180", //二维码的高度
    background: "#ffffff", //二维码的后景色
    foreground: "#000000", //二维码的前景色
    src: 'data/alipay.png', //二维码中间的图片
  });
</script>
</body>
</html>
html;
      break;
    case "FAILED":
      echo "支付宝创建订单二维码失败，订单超时请重新提交。" . "<br>--------------------------<br>";
      if (!empty($qrPayResult->getResponse())) {
        print_r($qrPayResult->getResponse());
      }
      break;
    case "UNKNOWN":
      echo "系统异常，状态未知!!!" . "<br>--------------------------<br>";
      if (!empty($qrPayResult->getResponse())) {
        print_r($qrPayResult->getResponse());
      }
      break;
    default:
      echo "不支持的返回状态，创建订单二维码返回异常!!!";
      break;
  }
  return;
}
?>