|
@@ -330,6 +330,91 @@ class OrderService extends BaseService
|
|
|
];
|
|
];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public function pay($userId, $id)
|
|
|
|
|
+ {
|
|
|
|
|
+ if ($id <= 0) {
|
|
|
|
|
+ $this->error = '请选择支付订单';
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 缓存锁
|
|
|
|
|
+ $cacheLockKey = "caches:orders:pay_lock:{$userId}_{$id}";
|
|
|
|
|
+ if (RedisService::get($cacheLockKey)) {
|
|
|
|
|
+ $this->error = '订单处理中~';
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 商品数据
|
|
|
|
|
+ RedisService::set($cacheLockKey, ['order_id' => $id, 'user_id' => $userId], rand(3, 5));
|
|
|
|
|
+
|
|
|
|
|
+ // 用户信息
|
|
|
|
|
+ $userInfo = MemberModel::where(['id' => $userId, 'mark' => 1])
|
|
|
|
|
+ ->select(['id', 'openid', 'mobile', 'nickname', 'realname', 'balance', 'status'])
|
|
|
|
|
+ ->first();
|
|
|
|
|
+ $status = isset($userInfo['status']) ? $userInfo['status'] : 0;
|
|
|
|
|
+ $openid = isset($userInfo['openid']) ? $userInfo['openid'] : '';
|
|
|
|
|
+ if (empty($userInfo) || $status != 1) {
|
|
|
|
|
+ $this->error = 1045;
|
|
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (empty($openid)) {
|
|
|
|
|
+ $this->error = '用户微信未授权,请重新授权登录';
|
|
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 订单信息
|
|
|
|
|
+ $info = $this->model->where(['id'=> $id,'mark'=>1])
|
|
|
|
|
+ ->select(['id','order_no','pay_total','status'])
|
|
|
|
|
+ ->first();
|
|
|
|
|
+ $orderTotal = isset($info['pay_total'])? $info['pay_total'] : 0;
|
|
|
|
|
+ $orderNo = isset($info['order_no'])? $info['order_no'] : '';
|
|
|
|
|
+ $status = isset($info['status'])? $info['status'] : 0;
|
|
|
|
|
+ if(empty($info) || empty($orderNo)){
|
|
|
|
|
+ $this->error = '订单信息不存在';
|
|
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if($status != 1){
|
|
|
|
|
+ $this->error = '订单已支付';
|
|
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 获取支付参数
|
|
|
|
|
+ /* TODO 支付处理 */
|
|
|
|
|
+ $payOrder = [
|
|
|
|
|
+ 'type' => 1,
|
|
|
|
|
+ 'order_no' => $orderNo,
|
|
|
|
|
+ 'pay_money' => $orderTotal,
|
|
|
|
|
+ 'body' => '购物消费',
|
|
|
|
|
+ 'openid' => $openid
|
|
|
|
|
+ ];
|
|
|
|
|
+
|
|
|
|
|
+ // 调起支付
|
|
|
|
|
+ $payment = PaymentService::make()->minPay($userInfo, $payOrder, 'store');
|
|
|
|
|
+ if (empty($payment)) {
|
|
|
|
|
+ DB::rollBack();
|
|
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
|
|
+ $this->error = PaymentService::make()->getError();
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 用户操作记录
|
|
|
|
|
+ DB::commit();
|
|
|
|
|
+ $this->error = '支付请求成功,请前往支付~';
|
|
|
|
|
+ RedisService::clear($cacheLockKey);
|
|
|
|
|
+ return [
|
|
|
|
|
+ 'order_id' => $id,
|
|
|
|
|
+ 'payment' => $payment,
|
|
|
|
|
+ 'total' => $payOrder['pay_money'],
|
|
|
|
|
+ 'pay_type' => 10,
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 今日数量统计数据
|
|
* 今日数量统计数据
|
|
|
* @param $userId
|
|
* @param $userId
|