Ver código fonte

added payment request and callback.

leo 8 anos atrás
pai
commit
c50353a294

+ 163 - 0
app/Http/Controllers/PaymentController.php

@@ -0,0 +1,163 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use App\Http\Models\Article;
+use App\Http\Models\Coupon;
+use App\Http\Models\CouponLog;
+use App\Http\Models\Goods;
+use App\Http\Models\Invite;
+use App\Http\Models\Level;
+use App\Http\Models\Order;
+use App\Http\Models\OrderGoods;
+use App\Http\Models\ReferralApply;
+use App\Http\Models\ReferralLog;
+use App\Http\Models\Ticket;
+use App\Http\Models\TicketReply;
+use App\Http\Models\User;
+use App\Http\Models\UserBalanceLog;
+use App\Http\Models\UserScoreLog;
+use App\Http\Models\UserSubscribe;
+use App\Http\Models\UserTrafficDaily;
+use App\Http\Models\UserTrafficHourly;
+use App\Http\Models\Verify;
+use App\Http\Models\Payment;
+use App\Mail\activeUser;
+use App\Mail\resetPassword;
+use Redirect;
+use Response;
+use Cache;
+use Mail;
+use DB;
+use Log;
+
+class PaymentController extends Controller
+{
+    protected static $config;
+
+    function __construct()
+    {
+        self::$config = $this->systemConfig();
+    }
+    public function query(Request $request){
+        return Payment::find($request->pid)->toarray();
+    }
+    public function new(Request $request){
+        $type = $request->type;
+        $price = $request->price;
+        if(self::$config[$type."_enabled"]==0){
+            return json_encode(['errcode'=>-1,'errmsg'=>"非法的支付方式."]);
+        }
+        if($price <= 0){
+            return json_encode(['errcode'=>-1,'errmsg'=>"非法的金额."]);
+        }
+        $user = $request->session()->get('user');
+        $user = User::find($user['id']);
+        $pl = new Payment();
+        $pl->user_id = $user->id;
+        $pl->money = $price;
+        $pl->status=0;
+
+        $pl->save();
+        $settings = [
+            'phone' => self::$config['payment_'.$type."_phone"],
+            'mchid' => self::$config['payment_'.$type."_mchid"],
+            'token' => self::$config['payment_'.$type."_token"],
+        ];
+        $data = [
+            'trade' => $pl->id,
+            'price' => $price,
+            'phone' => $settings['phone'],
+            'mchid' => $settings['mchid'],
+            'subject' => self::$config['website_name']."充值".$price."元",
+            'body' => self::$config['website_name']."充值".$price."元",
+        ];
+        $data = DoiAM::sign($data,$settings['token']);
+        $ret = DoiAM::post("https://api.daimiyun.cn/v2/".$type."/create",$data);
+        $result = json_decode($ret,true);
+        if($result and $result['errcode']==0){
+            $result['pid']=$pl->id;
+            return json_Encode($result);
+        }else{
+            return json_encode([
+                'errcode'=>-1,
+                'errmsg' => "接口调用失败!".$ret,
+            ]);
+        }
+        return $result;
+    }
+    public function return($request, $response, $args){
+    $money = $_GET['money'];
+     echo "您已经成功支付 $money 元,正在跳转..";
+     echo <<<HTML
+<script>
+location.href="/user/doiam";
+</script>
+HTML;
+    return;
+    }
+    public function callback(Request $request, $type){
+        $order_data = $_POST;
+        $status    = $order_data['status'];         //获取传递过来的交易状态
+        $invoiceid = $order_data['out_trade_no'];     //订单号
+        $transid   = $order_data['trade_no'];       //转账交易号
+        $amount    = $order_data['money'];          //获取递过来的总价格
+        if(!DoiAM::checksign($_POST,self::$config['payment_'.$type."_token"])){
+            return (json_encode(array('errcode'=>2333)));
+        }
+        if ($status == 'success') {
+            $p=Payment::find($invoiceid);
+            if($p->status==1){
+                return json_encode(['errcode'=>0]);
+            }
+            $p->status=1;
+            $p->save();
+            $user = User::find($p->user_id);
+            $user->balance += $p->money;
+            $user->save();
+            return json_encode(['errcode'=>0]);
+        }else{
+            return '';
+        }
+    }
+}
+class DoiAM{
+    public static function sort(&$array){
+        ksort($array);
+    }
+    public static function getsign($array,$key){
+        unset($array['sign']);
+        self::sort($array);
+        $sss=http_build_query($array);
+        $sign=hash("sha256",$sss.$key);
+        $sign=sha1($sign.hash("sha256",$key));
+        return $sign;
+    }
+    public static function sign($array,$key){
+        $array['sign']=self::getSign($array,$key);
+        return $array;
+    }
+    public static function checksign($array,$key){
+        $new = $array;
+        $new=self::sign($new,$key);
+        if(!isset($array['sign'])){
+            return false;
+        }
+        return $array['sign']==$new['sign'];
+    }
+    public static function post($url, $data = null){
+    	$curl = curl_init();
+    	curl_setopt($curl, CURLOPT_URL, $url);
+    	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
+    	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
+    	if (!empty($data)){
+    	curl_setopt($curl, CURLOPT_POST, 1);
+    	curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
+    	}
+    	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+    	$output = curl_exec($curl);
+    	curl_close($curl);
+    	return $output;
+    }
+}

+ 13 - 1
app/Http/Controllers/UserController.php

@@ -21,6 +21,7 @@ use App\Http\Models\UserSubscribe;
 use App\Http\Models\UserTrafficDaily;
 use App\Http\Models\UserTrafficHourly;
 use App\Http\Models\Verify;
+use App\Http\Models\Payment;
 use App\Mail\activeUser;
 use App\Mail\resetPassword;
 use Illuminate\Http\Request;
@@ -939,4 +940,15 @@ class UserController extends Controller
 
         return Response::view('/user/subscribe', $view);
     }
-}
+
+    /**
+     * 充值余额
+     * @param  Request $req 请求
+     * @return Response     响应
+     */
+    public function payment(Request $req){
+        $v = self::$config;
+        $v['payment'] = Payment::where("status",1)->where("user_id",$req->session()->get('user')['id'])->get();
+        return Response::view("user.payment",$v);
+    }
+}

+ 1 - 1
app/Http/Middleware/VerifyCsrfToken.php

@@ -12,6 +12,6 @@ class VerifyCsrfToken extends BaseVerifier
      * @var array
      */
     protected $except = [
-        //
+        "payment/*"
     ];
 }

+ 13 - 0
app/Http/Models/Payment.php

@@ -0,0 +1,13 @@
+<?php
+
+namespace App\Http\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+class Payment extends Model
+{
+    protected $table = 'user_payment';
+    public function user(){
+        return $this->belongsTo("App\Http\Models\User");
+    }
+}

+ 48 - 8
resources/views/admin/system.blade.php

@@ -504,7 +504,7 @@
                                                 </div>
                                             </form>
                                         </div>
-                                        <div class="tab-pane" id="tab_7" style="height:300px">
+                                        <div class="tab-pane" id="tab_7" style="height:650px">
                                             <form class="form-horizontal">
                                                 <div class="form-body">
                                                     <div class="portlet-body">
@@ -529,7 +529,7 @@
                                                                 <span class="help-block"><small> 是否启用 <a href="//www.daimiyun.cn">黛米付</a> QQ支付 </small></span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6">
+                                                        <div class="col-md-12">
                                                             <label for="" class="control-label col-md-4">微信支付-商户id</label>
                                                             <div class="col-md-8">
                                                                 <div class="input-group">
@@ -541,7 +541,7 @@
                                                                 <span class="help-block"> 到黛米付后台查看. </span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6">
+                                                        <div class="col-md-12">
                                                             <label for="" class="control-label col-md-4">微信支付-商户token</label>
                                                             <div class="col-md-8">
                                                                 <div class="input-group">
@@ -553,7 +553,19 @@
                                                                 <span class="help-block"> 到黛米付后台查看. </span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6">
+                                                        <div class="col-md-12">
+                                                            <label for="" class="control-label col-md-4">微信支付-商户手机号</label>
+                                                            <div class="col-md-8">
+                                                                <div class="input-group">
+                                                                    <input class="form-control" type="text" name="traffic_ban_value" value="{{$payment_wepay_phone}}" id="payment_wepay_phone" />
+                                                                    <span class="input-group-btn">
+                                                                        <button class="btn btn-success payment_commit" type="button" data-for="payment_wepay_phone">提交</button>
+                                                                    </span>
+                                                                </div>
+                                                                <span class="help-block"> 到黛米付后台查看. </span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-12">
                                                             <label for="" class="control-label col-md-4">支付宝-商户id</label>
                                                             <div class="col-md-8">
                                                                 <div class="input-group">
@@ -565,7 +577,7 @@
                                                                 <span class="help-block"> 到黛米付后台查看. </span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6">
+                                                        <div class="col-md-12">
                                                             <label for="" class="control-label col-md-4">支付宝-商户token</label>
                                                             <div class="col-md-8">
                                                                 <div class="input-group">
@@ -577,7 +589,19 @@
                                                                 <span class="help-block"> 到黛米付后台查看. </span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6">
+                                                        <div class="col-md-12">
+                                                            <label for="" class="control-label col-md-4">支付宝-商户手机号</label>
+                                                            <div class="col-md-8">
+                                                                <div class="input-group">
+                                                                    <input class="form-control" type="text" name="traffic_ban_value" value="{{$payment_alipay_phone}}" id="payment_alipay_phone" />
+                                                                    <span class="input-group-btn">
+                                                                        <button class="btn btn-success payment_commit" type="button" data-for="payment_alipay_phone">提交</button>
+                                                                    </span>
+                                                                </div>
+                                                                <span class="help-block"> 到黛米付后台查看. </span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-12">
                                                             <label for="" class="control-label col-md-4">QQ支付-商户id</label>
                                                             <div class="col-md-8">
                                                                 <div class="input-group">
@@ -589,13 +613,25 @@
                                                                 <span class="help-block"> 到黛米付后台查看. </span>
                                                             </div>
                                                         </div>
-                                                        <div class="col-md-6">
+                                                        <div class="col-md-12">
                                                             <label for="" class="control-label col-md-4">QQ支付-商户token</label>
                                                             <div class="col-md-8">
                                                                 <div class="input-group">
                                                                     <input class="form-control" type="text" name="traffic_ban_value" value="{{$payment_qqpay_token}}" id="payment_qqpay_token" />
                                                                     <span class="input-group-btn">
-                                                                        <button class="btn btn-success payment_commit" type="button">提交</button>
+                                                                        <button class="btn btn-success payment_commit" type="button" data-for="payment_qqpay_token">提交</button>
+                                                                    </span>
+                                                                </div>
+                                                                <span class="help-block"> 到黛米付后台查看. </span>
+                                                            </div>
+                                                        </div>
+                                                        <div class="col-md-12">
+                                                            <label for="" class="control-label col-md-4">QQ支付-商户手机号</label>
+                                                            <div class="col-md-8">
+                                                                <div class="input-group">
+                                                                    <input class="form-control" type="text" name="traffic_ban_value" value="{{$payment_qqpay_phone}}" id="payment_qqpay_phone" />
+                                                                    <span class="input-group-btn">
+                                                                        <button class="btn btn-success payment_commit" type="button" data-for="payment_qqpay_phone">提交</button>
                                                                     </span>
                                                                 </div>
                                                                 <span class="help-block"> 到黛米付后台查看. </span>
@@ -624,6 +660,7 @@
     <script src="/js/layer/layer.js" type="text/javascript"></script>
 
     <script type="text/javascript">
+
         $(".payment_commit").click(function(){
             var inp;
             inp = $("#"+$(this).data("for"));
@@ -638,6 +675,7 @@
                 'dataType':"json",
                 success:function(data){
                     console.log(data);
+                    layer.msg("保存成功!", {time:1000});
                 },
             });
         });
@@ -657,6 +695,8 @@
                         },
                         success:function(data){
                             console.log(data);
+                            if(data.status=="success")
+                            layer.msg("保存成功!", {time:1000});
                         },
                         'dataType':"JSON",
                         'type':"POST"

+ 7 - 1
resources/views/user/layouts.blade.php

@@ -144,6 +144,12 @@
                         <span class="title">我的工单</span>
                     </a>
                 </li>
+                <li class="nav-item {{Request::getRequestUri() == '/user/payment' ? 'active open' : ''}}">
+                    <a href="{{url('user/payment')}}" class="nav-link nav-toggle">
+                        <i class="icon-credit-card" aria-hidden="true"></i>
+                        <span class="title">充值余额</span>
+                    </a>
+                </li>
                 @if(Session::get('referral_status'))
                 <li class="nav-item {{Request::getRequestUri() == '/user/referral' ? 'active open' : ''}}">
                     <a href="{{url('user/referral')}}" class="nav-link nav-toggle">
@@ -197,4 +203,4 @@
 <!-- END THEME LAYOUT SCRIPTS -->
 </body>
 
-</html>
+</html>

+ 170 - 0
resources/views/user/payment.blade.php

@@ -0,0 +1,170 @@
+@extends('user.layouts')
+
+@section('css')
+@endsection
+@section('title', '控制面板')
+@section('content')
+    <!-- BEGIN CONTENT BODY -->
+    <div class="page-content" style="padding-top:0;">
+        <!-- BEGIN PAGE BASE CONTENT -->
+        <div class="row">
+            <div class="portlet light bordered">
+                <div class="portlet-title">
+                    <div class="caption font-dark">
+                        <span class="caption-subject bold uppercase"> 充值余额 </span>
+                    </div>
+                </div>
+                <div class="portlet-body">
+                    <div class="form-group">
+                        <label for="usage" class="col-md-3 control-label">充值方式</label>
+                        <div class="col-md-8">
+                            <div class="mt-radio-inline">
+                                @if($wepay_enabled)
+                                    <label class="mt-radio">
+                                        <input type="radio" class="type" data-type="wepay" name="type">微信
+                                        <span></span>
+                                    </label>
+                                @endif
+                                @if($alipay_enabled)
+                                    <label class="mt-radio">
+                                        <input type="radio"class="type" data-type="alipay" name="type">支付宝
+                                        <span></span>
+                                    </label>
+                                @endif
+                                @if($qqpay_enabled)
+                                    <label class="mt-radio">
+                                        <input type="radio" class="type" data-type="qqpay" name="type">QQ支付
+                                        <span></span>
+                                    </label>
+                                @endif
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="balance" class="col-md-3 control-label">充值金额</label>
+                        <div class="col-md-8">
+                            <input type="text" class="form-control" name="money" value="" id="money" placeholder="88.88" required>
+                        </div>
+                    </div>
+                    <div class="form-actions">
+                        <div class="row">
+                            <div class=" col-md-4">
+                                <button id="submit" class="btn green"> 提 交 </button>
+                            </div>
+                        </div>
+                    </div>
+                    <h4>充值记录</h4>
+                    <div class="table-scrollable">
+                        <table class="table table-striped table-bordered table-hover table-checkable order-column">
+                            <thead>
+                                <tr>
+                                    <th> ID </th>
+                                    <th> 充值金额 </th>
+                                    <th> 充值时间 </th>
+                                </tr>
+                            </thead>
+                            <tbody>
+                            @if($payment->isEmpty())
+                                <tr>
+                                    <td colspan="4">暂无数据</td>
+                                </tr>
+                            @else
+                                @foreach($payment as $key => $p)
+                                    <tr class="odd gradeX">
+                                        <td> {{$key + 1}} </td>
+                                        <td> {{$p->money}} </td>
+                                        <td>{{$p->created_at}}</td>
+                                    </tr>
+                                @endforeach
+                            @endif
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div id="charge_modal" class="modal fade" tabindex="-1" data-focus-on="input:first" data-keyboard="false">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
+                    <h4 class="modal-title"> 支付 </h4>
+                </div>
+                <div class="modal-body">
+                    <div class="row">
+                        <div class="col-md-4 col-md-offset-3" id="qrcode">
+
+                        </div>
+                    </div>
+                    <div class="row">
+                        <div class="col-md-4 col-md-offset-4 text-center">
+                            <h3>请扫码支付</h3>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+@endsection
+@section('script')
+    <script src="/js/layer/layer.js" type="text/javascript"></script>
+    <script src="/assets/global/plugins/jquery-qrcode/jquery.qrcode.min.js" type="text/javascript"></script>
+    <script type="text/javascript">
+        var type;
+        var pid = 0;
+        $(".type").click(function(){
+            type = $(this).data("type");
+            console.log(type);
+        });
+        $("#submit").click(function(){
+            $("#submit").button('loading')
+            $.ajax({
+                'url':"{{url("user/payment")}}",
+                'data':{
+                    '_token':"{{csrf_token()}}",
+                    'type':type,
+                    'price':$("#money").val(),
+                },
+                'type':"POST",
+                'dataType':"json",
+                success:function(data){
+                    console.log(data);
+                    if(data.errcode==0){
+                        pid = data.pid;
+                        if(type != "alipay"){
+                            $("#charge_modal").modal();
+                            $("#qrcode").qrcode(data.code);
+                            setTimeout(f, 1000);
+                        }else{
+                            $("#charge_modal").modal();
+                            $(".modal-body").html("跳转中...");
+                            $("body").append(data.code);
+                        }
+                    }
+                },
+            });
+        });
+        function f(){
+            $.ajax({
+                type: "POST",
+                url: "/payment/query",
+                dataType: "json",
+                data: {
+                    _token:"{{csrf_token()}}",
+                    pid:pid
+                },
+                success: function (data) {
+                    if (data.status) {
+                        clearTimeout(tid);
+                        $("#result").modal();
+                        $(".modal-body").html("充值成功!");
+                        window.setTimeout("location.href=window.location.href",1000);
+                    }
+                }
+            });
+            tid = setTimeout(f, 1000);
+        }
+
+    </script>
+@endsection

+ 7 - 0
routes/web.php

@@ -96,4 +96,11 @@ Route::group(['middleware' => ['user']], function() {
     Route::post('user/exchange', 'UserController@exchange'); // 积分兑换流量
     Route::get('user/referral', 'UserController@referral'); // 推广返利
     Route::post('user/extractMoney', 'UserController@extractMoney'); // 申请提现
+
+    // payment
+    Route::get("user/payment","UserController@payment");
+    Route::post("user/payment","PaymentController@new");
 });
+Route::post("/payment/query","PaymentController@query");
+Route::post("/payment/callback/{type}","PaymentController@callback");
+Route::post("/payment/return/{type}","PaymentController@return");

+ 5 - 0
sql/db.sql

@@ -760,7 +760,12 @@ INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_qqpay_mchid'
 INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_wepay_token', '');
 INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_alipay_token', '');
 INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_qqpay_token', '');
+INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_wepay_phone', '');
+INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_alipay_phone', '');
+INSERT INTO `config` (`id`, `name`, `value`) VALUES (NULL, 'payment_qqpay_phone', '');
 
+CREATE TABLE `ssrpanel`.`user_payment` ( `id` INT NOT NULL AUTO_INCREMENT , `user_id` INT NOT NULL , `money` FLOAT NOT NULL , `status` INT NOT NULL , PRIMARY KEY (`id`),  `created_at` datetime NOT NULL,
+  `updated_at` datetime NOT NULL) ENGINE = InnoDB;
 
 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;