SPay.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: spay
  5. * Date: 2019/4/3
  6. * Time: 22:20 PM
  7. */
  8. namespace App\Services\Gateway;
  9. use App\Services\Auth;
  10. use App\Services\Config;
  11. use App\Models\Paylist;
  12. class SPay extends AbstractPayment
  13. {
  14. public function purchase($request, $response, $args)
  15. {
  16. /**************************请求参数**************************/
  17. $amount = $request->getParam('price');
  18. //var_dump($request->getParam("price"));die();
  19. $user = Auth::getUser();
  20. $pl = new Paylist();
  21. $pl->userid = $user->id;
  22. //if ($amount <= '10') {
  23. //$amount='10';
  24. //}
  25. $pl->total = $amount;
  26. $pl->tradeno = self::generateGuid();
  27. $pl->save();
  28. //商户订单号,商户网站订单系统中唯一订单号,必填
  29. $out_trade_no = $pl->tradeno;
  30. //订单名称,必填
  31. $subject = $pl->id . 'UID:' . $user->id . ' 充值' . $amount . '元';
  32. //付款金额,必填
  33. $total_fee = (float)$amount;
  34. //商品描述,可空
  35. $body = $user->id;
  36. /************************************************************/
  37. $data['total_fee'] = $total_fee; //支付金额
  38. $data['partner'] = $_ENV['alipay_id']; //spay合作者id
  39. $data['notify_url'] = $_ENV['baseUrl'] . '/spay_back'; //不能有get参数 也就是?xxx=xxx& xxx=xxx
  40. $data['return_url'] = $_ENV['baseUrl'] . '/spay_back'; //不能有get参数 也就是?xxx=xxx& xxx=xxx
  41. $data['out_trade_no'] = $out_trade_no; //商户唯一订单号
  42. $data['service'] = 'create_direct_pay_by_user';
  43. $i = 0;
  44. $jk = '';
  45. ksort($data);
  46. reset($data);
  47. $ii = count($data);
  48. foreach ($data as $as1 => $as2) {
  49. $i++;
  50. $jk .= $as1 . '=' . $as2;
  51. if ($ii != $i) {
  52. $jk .= '&';
  53. }
  54. }
  55. $data['sign'] = md5($jk . $_ENV['alipay_key']);
  56. //header("Location: http://www.dayyun.com/pay/pay/alipay.php?".http_build_query($data));
  57. return json_encode(['code' => 0, 'url' => 'http://www.dayyun.com/pay/pay/alipay.php?' . http_build_query($data)]);
  58. }
  59. public function notify($request, $response, $args)
  60. {
  61. $data = $_GET;
  62. $ispost = 0;
  63. if (empty($data['out_trade_no'])) {
  64. $data = $_POST;
  65. $ispost = 1;
  66. } //判断是同步通知还是异步通知 并赋值校验签名
  67. if (empty($data['out_trade_no'])) {
  68. die(time());
  69. }
  70. $i = 0;
  71. $jk = '';
  72. ksort($data);
  73. reset($data);
  74. $sign = $data['sign'];
  75. unset($data['sign'], $data['sign_type']);
  76. $ii = count($data);
  77. foreach ($data as $as1 => $as2) {
  78. $i++;
  79. $jk .= $as1 . '=' . $as2;
  80. if ($ii != $i) {
  81. $jk .= '&';
  82. }
  83. }
  84. $newsign = md5($jk . $_ENV['alipay_key']);
  85. if ($newsign != $sign) {
  86. die('false');
  87. }
  88. $this->postPayment($data['out_trade_no'], 'SPay 支付');
  89. echo 'success';
  90. if ($ispost == 0) {
  91. header('Location: /user/code');
  92. }
  93. }
  94. public function getPurchaseHTML()
  95. {
  96. return '
  97. <div class="card-inner">
  98. <div class="form-group pull-left">
  99. <p class="modal-title" >本站支持支付宝在线充值</p>
  100. <p>输入充值金额:</p>
  101. <p>低于10元自动转为10元 (亲!手续费很贵滴)</p>
  102. <div class="form-group form-group-label">
  103. <label class="floating-label" for="price">充值金额</label>
  104. <input id="type" class="form-control maxwidth-edit" name="amount" />
  105. </div>
  106. <a class="btn btn-flat waves-attach" id="submitSpay" ><span class="icon">check</span>&nbsp;充值</a>
  107. </div>
  108. </div>
  109. <script>
  110. window.onload = function(){
  111. $("#submitSpay").click(function() {
  112. var price = parseFloat($("#type").val());
  113. console.log("将要使用 SPay 方法充值" + price + "元");
  114. if (isNaN(price)) {
  115. $("#result").modal();
  116. $("#msg").html("非法的金额!");
  117. }
  118. $(\'#readytopay\').modal();
  119. $("#readytopay").on(\'shown.bs.modal\', function () {
  120. $.ajax({
  121. \'url\': "/user/payment/purchase",
  122. \'data\': {
  123. \'price\': price,
  124. },
  125. \'dataType\': \'json\',
  126. \'type\': "POST",
  127. success: (data) => {
  128. if (data.code == 0) {
  129. $("#result").modal();
  130. $("#msg").html("正在跳转到支付宝...");
  131. console.log(data);
  132. window.location.href = data.url;
  133. } else {
  134. $("#result").modal();
  135. $$.getElementById(\'msg\').innerHTML = data.msg;
  136. console.log(data);
  137. }
  138. }
  139. });
  140. });
  141. });
  142. };</script>
  143. ';
  144. }
  145. public function getReturnHTML($request, $response, $args)
  146. {
  147. // TODO: Implement getReturnHTML() method.
  148. }
  149. public function getStatus($request, $response, $args)
  150. {
  151. // TODO: Implement getStatus() method.
  152. }
  153. }