| 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);
|
|
|
+ }
|
|
|
}
|