zilong 4 년 전
부모
커밋
62fd59e1d0

+ 56 - 0
app/Http/Controllers/Api/V1/OrderController.php

xqd
@@ -404,4 +404,60 @@ class OrderController extends AuthController
 
         return out($data);
     }
+
+    public function topup()
+    {
+        $req = request()->post();
+        $this->validate(request(), [
+            'amount' => 'required|integer',
+        ]);
+        $user = $this->user;
+
+        DB::beginTransaction();
+        try {
+            //保存订单数据
+            $order = Order::create([
+                'user_id' => $user['id'],
+                'product_type' => 7,
+                'total_amount' => $req['amount'],
+                'payment_amount' => $req['amount'],
+            ]);
+            $order_sn = build_sn($order['id']);
+            Order::where('id', $order['id'])->update(['order_sn' => $order_sn]);
+
+            //生成支付交易单
+            $trade_sn = build_sn($order['id'], 3, 'T');
+            $payBody = '超级宝妈-'.config('config.product_type_map')[7];
+            Payment::create([
+                'user_id' => $user['id'],
+                'order_id' => $order['id'],
+                'trade_sn' => $trade_sn,
+                'amount' => $req['amount'],
+                'remark' => $payBody,
+            ]);
+            //请求支付
+            $payment = Factory::payment(config('config.wechat_pay'));
+            $result = $payment->order->unify([
+                'body' => $payBody,
+                'out_trade_no' => $trade_sn,
+                'total_fee' => $req['amount'],
+                'trade_type' => 'JSAPI',
+                'openid' => $user['openid'],
+            ]);
+
+            if (empty($result['prepay_id'])) {
+                $errorMsg = !empty($result['err_code_des']) ? $result['err_code_des'] : $result['return_msg'];
+                return out(null, 702, $errorMsg);
+            }
+
+            $config = $payment->jssdk->bridgeConfig($result['prepay_id'], false);
+
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollBack();
+            return out(null, 500, '下单失败,请稍后重试', $e->getMessage());
+        }
+
+        return out($config);
+    }
 }

+ 14 - 4
app/Http/Controllers/Api/V1/PayCallbackController.php

xqd xqd
@@ -12,6 +12,8 @@ use App\Http\Controllers\Controller;
 use App\Models\Docter;
 use App\Models\Order;
 use App\Models\Payment;
+use App\Models\User;
+use App\Models\UserBalanceLog;
 use DB;
 use EasyWeChat\Factory;
 
@@ -43,16 +45,24 @@ class PayCallbackController extends Controller
                     try {
                         //更新payment
                         Payment::where('id', $payment['id'])->update(['online_sn' => $message['transaction_id'], 'status' => 2, 'payment_time' => time()]);
+                        $order = Order::select(['id', 'user_id', 'docter_id', 'product_type', 'payment_amount'])->where('id', $payment['order_id'])->first();
+                        $order_status = 2;
+                        if ($order['product_type'] == 7) {
+                            $order_status = 3;
+                            //改变用户余额
+                            User::changeBalance($order['user_id'], $order['payment_amount'], 2, $order['id'], '充值');
+                        }
                         //更新订单
                         Order::where('id', $payment['order_id'])->update([
-                            'order_status' => 2,
+                            'order_status' => $order_status,
                             'payment_status' => 2,
                             'payment_time' => time(),
                         ]);
 
-                        $order = Order::select(['docter_id'])->where('id', $payment['order_id'])->first();
-                        //更新医生的服务人数
-                        Docter::where('id', $order['docter_id'])->increment('service_persons');
+                        if (!empty($order['docter_id'])) {
+                            //更新医生的服务人数
+                            Docter::where('id', $order['docter_id'])->increment('service_persons');
+                        }
 
                         // 提交事务
                         DB::commit();

+ 8 - 0
app/Http/Controllers/Api/V1/UserController.php

xqd xqd
@@ -9,6 +9,7 @@
 namespace App\Http\Controllers\Api\V1;
 
 use App\Models\User;
+use App\Models\UserBalanceLog;
 use EasyWeChat\Factory;
 
 class UserController extends AuthController
@@ -59,4 +60,11 @@ class UserController extends AuthController
 
         return out();
     }
+
+    public function userBalanceLog()
+    {
+        $user = $this->user;
+        $data = UserBalanceLog::where('user_id', $user['id'])->orderBy('id', 'desc')->paginate();
+        return out($data);
+    }
 }

+ 20 - 0
app/Models/User.php

xqd
@@ -34,4 +34,24 @@ class User extends BaseModel
 
         return $user;
     }
+
+    public static function changeBalance($user_id, $change_balance, $type, $relation_id, $remark, $admin_user_id = 0)
+    {
+        $user = User::select(['balance'])->where('id', $user_id)->first();
+
+        User::where('id', $user_id)->increment('balance', $change_balance);
+
+        UserBalanceLog::create([
+            'user_id' => $user_id,
+            'admin_user_id' => $admin_user_id,
+            'type' => $type,
+            'relation_id' => $relation_id,
+            'before_balance' => $user['balance'],
+            'change_balance' => $change_balance,
+            'after_balance' => $user['balance'] + $change_balance,
+            'remark' => $remark,
+        ]);
+
+        return true;
+    }
 }

+ 14 - 0
app/Models/UserBalanceLog.php

xqd
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zilongs
+ * Date: 20-10-5
+ * Time: 下午12:04
+ */
+
+namespace App\Models;
+
+class UserBalanceLog extends BaseModel
+{
+
+}