to_pay.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <?php
  2. namespace app\index;
  3. class to_pay extends BaseUser
  4. {
  5. function index()
  6. {
  7. Chk_authkey();
  8. $trade_id = SafeRequest("trade_id", "get");
  9. $pay_type = SafeRequest("pay_type", "get");
  10. $payinfo = db("paylog")->where("pay_id", $trade_id)->find();
  11. if (!$payinfo || !$pay_type || !in_array($pay_type, json_decode(IN_PAY, true))) {
  12. exit(include_once IN_ROOT . "source/pack/error/404.php");
  13. }
  14. $ssl = is_ssl() ? "https://" : "http://";
  15. if ($pay_type == "1") {
  16. include_once IN_ROOT . "source/pack/pay/alipay/alipay.class.php";
  17. $returnUrl = $ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/alipay_return";
  18. $notifyUrl = $ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/alipay_notify";
  19. $outTradeNo = $payinfo["pay_id"];
  20. $payAmount = $payinfo["pay_money"];
  21. $orderName = $this->username . " / " . $payinfo["pay_tag"];
  22. $signType = "MD5";
  23. $pid = IN_ALIPAYID;
  24. $privateKey = IN_ALIPAYKEY;
  25. $aliPay = new \AlipayService($pid, $returnUrl, $notifyUrl, $signType, $privateKey);
  26. $sHtml = $aliPay->doPay($payAmount, $outTradeNo, $orderName, $returnUrl, $notifyUrl);
  27. echo $sHtml;
  28. exit;
  29. }
  30. if ($pay_type == "2") {
  31. define("IN_WXUID", $this->userid);
  32. include_once IN_ROOT . "source/pack/pay/weixin/WxPay.Api.php";
  33. include_once IN_ROOT . "source/pack/pay/weixin/WxPay.NativePay.php";
  34. $input = new \WxPayUnifiedOrder();
  35. $input->SetBody($this->username . " / " . $payinfo["pay_tag"]);
  36. $input->SetOut_trade_no($payinfo["pay_id"]);
  37. $input->SetTotal_fee($payinfo["pay_money"] * 100);
  38. $input->SetTime_start(date("YmdHis"));
  39. $input->SetTime_expire(date("YmdHis", time() + 600));
  40. $input->SetNotify_url($ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/wxpay_notify");
  41. $input->SetTrade_type("NATIVE");
  42. $input->SetProduct_id($payinfo["in_id"]);
  43. $notify = new \NativePay();
  44. $result = $notify->GetPayUrl($input);
  45. if ($result["return_code"] == "FAIL") {
  46. exit(include_once IN_ROOT . "source/pack/error/404.php");
  47. } else {
  48. $code_url = $result["code_url"];
  49. }
  50. }
  51. if ($pay_type == "3" || $pay_type == "4") {
  52. $type = $pay_type == "3" ? 'alipay' : 'weixin';
  53. $codepay_id = IN_CODEPAYID;
  54. $codepay_key = IN_CODEPAYKEY;
  55. $returnUrl = $ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/codepay_return";
  56. $notifyUrl = $ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/codepay_notify";
  57. $data = array("id" => $codepay_id, "pay_id" => $payinfo["pay_id"], "type" => $type, "price" => $payinfo["pay_money"], "param" => "", "notify_url" => $notifyUrl, "return_url" => $returnUrl);
  58. $userid=$codepay_id;
  59. $userkey=$codepay_key;
  60. $version='1.0';
  61. $customerid=$userid;
  62. $sdorderno=$payinfo["pay_id"];
  63. $total_fee=number_format($payinfo["pay_money"],2,'.','');
  64. $paytype=$type;
  65. $bankcode='';
  66. $notifyurl = $notifyUrl;
  67. $returnurl = $returnUrl;
  68. $remark='';
  69. $get_code='';
  70. $sign=md5('version='.$version.'&customerid='.$customerid.'&total_fee='.$total_fee.'&sdorderno='.$sdorderno.'&notifyurl='.$notifyurl.'&returnurl='.$returnurl.'&'.$userkey);
  71. $native = array(
  72. "version" => $version,
  73. "customerid" => $customerid,
  74. "sdorderno" => $sdorderno,
  75. "total_fee" => $total_fee,
  76. "paytype" => $paytype,
  77. "notifyurl" => $notifyurl,
  78. "returnurl" => $returnurl,
  79. "remark" => $remark,
  80. "bankcode" => $bankcode,
  81. "sign" => $sign,
  82. "get_code" => $get_code,
  83. );
  84. $html = '<form name="form1" class="form-inline" method="post" action="http://pay.normalsky.cn/apisubmit">';
  85. foreach ($native as $key => $val) {
  86. $html .= '<input type="hidden" name="' . $key . '" value="' . $val . '">';
  87. }
  88. $html .= '</form>';
  89. $html .= '<script type="text/javascript">document.form1.submit()</script>';
  90. echo $html;die;
  91. var_dump($notifyUrl);die;
  92. redirect($url);
  93. }
  94. if ($pay_type == "5") {
  95. include_once IN_ROOT . "source/pack/pay/f2fpay/alipay.class.php";
  96. $notifyUrl = $ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/f2fpay_notify";
  97. $orderName = $this->username . " / " . $payinfo["pay_tag"];
  98. $config = array("appId" => IN_F2FPAYID, "signType" => IN_F2FPAY_STYPE, "privateKey" => IN_F2FPAY_MKEY, "publicKey" => IN_F2FPAY_AKEY, "notifyUrl" => $notifyUrl);
  99. $data = array("body" => $orderName, "subject" => $payinfo["pay_tag"], "out_trade_no" => $payinfo["pay_id"], "total_amount" => $payinfo["pay_money"]);
  100. $aliPay = new \AlipayService($config);
  101. $result = $aliPay->qrpay($data);
  102. if ($result["code"] != "10000") {
  103. exit(include_once IN_ROOT . "source/pack/error/404.php");
  104. } else {
  105. $code_url = $result["qr_code"];
  106. }
  107. }
  108. if ($pay_type == "7") {
  109. $api = "https://admin.zhanzhangfu.com/order/createOrder";
  110. $postDatas = array("price" => $payinfo["pay_money"], "name" => $payinfo["pay_tag"], "thirduid" => $payinfo["pay_id"], "remarks" => $this->username . " / " . $payinfo["pay_tag"], "callbackurl" => $ssl . $_SERVER["HTTP_HOST"] . IN_PATH . "pay/index/zzpay_notify");
  111. $headers = array("Payment-Key:" . IN_ZZPAY_AppKey, "Payment-Secret:" . IN_ZZPAY_AppSecret);
  112. $ch = curl_init();
  113. curl_setopt($ch, CURLOPT_URL, $api);
  114. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  115. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  116. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  117. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  118. curl_setopt($ch, CURLOPT_POST, TRUE);
  119. curl_setopt($ch, CURLOPT_POSTFIELDS, $postDatas);
  120. $output = curl_exec($ch);
  121. $zzpaydata = json_decode($output, true);
  122. curl_close($ch);
  123. if ($zzpaydata["code"] != 10001) {
  124. $err = $zzpaydata["msg"];
  125. exit(include_once IN_ROOT . "source/pack/error/404.php");
  126. }
  127. }
  128. if (!$pay_type || $pay_type == 6) {
  129. redirect("/pay/index/user_money_pay?trade_id=" . $trade_id);
  130. }
  131. ?> <!DOCTYPE html>
  132. <html lang="zh-cn">
  133. <head>
  134. <meta charset="utf-8">
  135. <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/>
  136. <meta name="keywords" content="<?php echo IN_KEYWORDS;?>"/>
  137. <meta name="description" content="<?php echo IN_DESCRIPTION;?>"/>
  138. <title>扫码支付 - <?php echo IN_NAME;?> - 免费应用内测托管平台|iOS应用Beta测试分发|Android应用内测分发</title>
  139. <?php
  140. $this->static_();
  141. ?> </head>
  142. <body>
  143. <?php
  144. $this->header();
  145. ?> <div class="bg-bodyy">
  146. <div class="breader" style="margin: 0">
  147. <div class="container">
  148. <div class="crumbs">
  149. <a href="/">首页</a>
  150. <i class="fa fa-angle-right" style="padding: 5px;"></i>/
  151. <span>扫码支付</span>
  152. </div>
  153. </div>
  154. </div>
  155. <div class="container content ">
  156. <?php
  157. if ($pay_type == 2 || $pay_type == 5) {
  158. ?> <div class="row">
  159. <div class="col-lg-12">
  160. <div class="hpanel">
  161. <div class="panel-body">
  162. <div class="row">
  163. <div class="col-sm-10 col-sm-offset-1">
  164. <div class="col-sm-4">
  165. <div class="text-center">
  166. <img alt="wechatPay" src="/qrcode?link=<?php echo $code_url;?>" style="width:200px;height:200px; border:1px solid #ddd;margin-top:80px;padding:10px;">
  167. </div>
  168. </div>
  169. <div class="col-sm-4">
  170. <div style="margin-top:140px;">
  171. <i class="fa fa-caret-left pull-left" style="font-size:48px;"></i>
  172. <span style="font-size:18px;">请使用手机支付宝</span>
  173. <br>
  174. <span style="font-size:16px;">扫描二维码进行支付</span>
  175. </div>
  176. </div>
  177. <div class="col-sm-4">
  178. <img src="/static/default/img/phone-alipay.png">
  179. </div>
  180. </div>
  181. </div>
  182. <div>
  183. <p>
  184. * 请您尽快完成支付
  185. </p>
  186. </div>
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. <?php
  192. }
  193. if ($pay_type == 7 && $zzpaydata) {
  194. ?> <link rel="stylesheet" type="text/css" href="/static/zzpay/css/onlinepay.css">
  195. <script>
  196. var timestr = "2020-09-29 14:05:20";
  197. var serverTime = (new Date(timestr.replace(/-/g, '/'))).getTime();//服务器初始时间
  198. var diffTime = (new Date()).getTime() - serverTime;//服务器校对时间差秒数
  199. diffTime = diffTime / 1000;
  200. </script>
  201. <div class="mod-ct">
  202. <h1 class="mod-title">
  203. <!--支付宝支付图标-->
  204. <p style="color: rgb(51, 51, 51); font-size: 12px; margin-top: 10px; display: none;" class="n-wx-zfb">
  205. 请先截屏,使用支付宝"扫一扫"识别相册图片支付</p>
  206. <span class="ico_log ico-3"></span>
  207. </h1>
  208. <div class="order"></div>
  209. <div class="amount" id="money"><span class="amount2"><?php echo $zzpaydata["price"];?></span></span></span></div>
  210. <div class="paybtn" style="display: none;"><a href="" id="alipaybtn" class="btn btn-primary" target="_blank">启动支付宝App支付</a>
  211. </div>
  212. <div class="qrcode-img-wrapper" data-role="qrPayImgWrapper">
  213. <div data-role="qrPayImg" class="qrcode-img-area">
  214. <div class="ui-loading qrcode-loading" data-role="qrPayImgLoading" style="display: none;"></div>
  215. <div style="position: relative;display: inline-block;">
  216. <!--付款码记得替换为自己的-->
  217. <img id="imgCode2" src="<?php echo $zzpaydata["zfbcode"];?>">
  218. <img id="imgCode3" src="<?php echo $zzpaydata["wxcode"];?>">
  219. <!--支付宝图标/微信图标-->
  220. <input name="istype" id="istype" type="hidden" value="1">
  221. <div id="qrcode"></div>
  222. <img src="" style="display: none" id="qrLost">
  223. <canvas id="imgCanvas" width="310" height="270" style="display: none;"></canvas>
  224. <div class="timeOut" style="display: none">过期时间<span id="timeOut">2020-09-29 14:11:20</span></div>
  225. <input type="hidden" id="now_time" value="2020-09-29 14:05:20">
  226. </div>
  227. </div>
  228. </div>
  229. <div class="time-item" style="padding-top: 10px">
  230. <div class="time-item" id="msg">
  231. <h1 class="overtime">订单名称:<span><?php echo $zzpaydata["name"];?></span></h1>
  232. </div>
  233. <div class="time-item"><h1>订单号:<span><?php echo $zzpaydata["orderId"];?></span></h1>
  234. <input type="hidden" value="<?php echo $zzpaydata["orderId"];?>" id="orderId"></div>
  235. <strong id="hour_show"><s id="h"></s>订单支付有效期</strong>
  236. <strong id="minute_show"><s></s></strong>
  237. <strong id="second_show"><s></s></strong>
  238. <div class="time-item"></div>
  239. <strong class='resultMsg'><s></s>20秒后自动获取支付结果</strong>
  240. </div>
  241. <div class="tip">
  242. <div class="ico-scan"></div>
  243. <div class="tip-text">
  244. <!--支付宝支付提示/微信支付提示-->
  245. <p id="showtext">打开微信[扫一扫]</p>
  246. </div>
  247. </div>
  248. <!--ie判断版本-->
  249. <!--[if IE 8]>
  250. <div class="tip-text" style="color:#ff0000">您的浏览器版本较低,请升级后再试!</div>
  251. <![endif]-->
  252. <!--[if lt IE 8]>
  253. <div class="tip-text" style="color:#ff0000">您的浏览器版本较低,请升级后再试!</div>
  254. <![endif]-->
  255. </div>
  256. <script type="text/javascript" src="/static/zzpay/js/onlinepay.js"></script>
  257. <?php
  258. }
  259. ?> </div>
  260. </div>
  261. <div class="modal fade ms-modal" id="paySuccessModal" tabindex="-1" role="dialog">
  262. <div class="modal-dialog modal-sm" role="document">
  263. <div class="modal-content">
  264. <div class="modal-body">
  265. <div class="text-center">
  266. <div>
  267. <span class="icon icon-modal-success1"></span>
  268. </div>
  269. <p class="color-333 bold font16 mt5">
  270. 购买成功
  271. </p>
  272. <p class="color-333 mt5">
  273. </p>
  274. <div class="mt15">
  275. </div>
  276. </div>
  277. </div>
  278. </div>
  279. </div>
  280. </div>
  281. <script>
  282. $(document).ready(function () {
  283. window.setInterval(function () {
  284. getPayStatus();
  285. }, 2000);
  286. });
  287. function getPayStatus() {
  288. $.getJSON('/index/tradeStatus?id=<?php echo $trade_id;?>', function (data) {
  289. if (data.code == 200) {
  290. $('#paySuccessModal').modal('show');
  291. }
  292. });
  293. }
  294. var num = 3;
  295. var linkTime = null;
  296. clearInterval(linkTime);
  297. function linkfun() {
  298. if ($("#paySuccessModal").is(":visible")) {
  299. $("#paySuccessModal a").text('确定(' + num + ')');
  300. num--;
  301. if (num <= 0) {
  302. window.location.href = '/index/user_aclog';
  303. }
  304. }
  305. }
  306. linkTime = setInterval(linkfun, 1000);
  307. </script>
  308. <?php
  309. $this->footer();
  310. ?> </body>
  311. </html>
  312. <?php
  313. }
  314. }