|
|
@@ -11,6 +11,7 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
+use App\Models\GoodsModel;
|
|
|
use App\Models\OrdersModel;
|
|
|
|
|
|
/**
|
|
|
@@ -146,4 +147,113 @@ class OrdersService extends BaseService
|
|
|
return parent::edit($data); // TODO: Change the autogenerated stub
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 积分商品兑换
|
|
|
+ */
|
|
|
+ public function buy($userId)
|
|
|
+ {
|
|
|
+ $params = request()->all();
|
|
|
+ // 验证佛像信息
|
|
|
+ $fid = isset($params['fid']) ? $params['fid'] : 0;
|
|
|
+ $info = GoodsModel::where(['id' => $fid, 'status' => 1, 'mark' => 1])
|
|
|
+ ->select(['id', 'title'])
|
|
|
+ ->first();
|
|
|
+ if (!$info || $fid <= 0) {
|
|
|
+ return message('商品信息不存在', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ $payType = isset($params['payType']) ? $params['payType'] : 0;
|
|
|
+ if (!in_array($payType, [1])) {
|
|
|
+ return message('支付方式暂不支持', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 套餐信息
|
|
|
+ $mid = isset($params['mid']) ? $params['mid'] : 0;
|
|
|
+ $mealInfo = LampMealsModel::where(['id' => $mid, 'status' => 1, 'mark' => 1])
|
|
|
+ ->select(['id', 'name', 'price', 'num'])
|
|
|
+ ->first();
|
|
|
+ if (!$mealInfo) {
|
|
|
+ return message('供灯套餐不存在或已下架', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证用户是否已授权
|
|
|
+ $memberInfo = MemberModel::where(['id' => $userId, 'mark' => 1, 'status' => 1])
|
|
|
+ ->select('id', 'openid', 'nickname')
|
|
|
+ ->first();
|
|
|
+ $openid = isset($memberInfo['openid']) ? trim($memberInfo['openid']) : '';
|
|
|
+ if (!$memberInfo) {
|
|
|
+ return message('账号已被冻结,请联系客服', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (empty($openid)) {
|
|
|
+ return message('账号获取授权参数失败,请退出重试', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证是否供灯过
|
|
|
+ $buyType = 1;
|
|
|
+ $gdCheckData = GongdengOrderModel::where(['source_id' => $fid, 'user_id' => $userId,'lamp_status'=> 2, 'status' => 2, 'mark' => 1])
|
|
|
+ ->where('expire_time', '>=', time())
|
|
|
+ ->select(['id', 'source_id', 'user_id','device_num', 'expire_time', 'params'])
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ // 续费
|
|
|
+ if ($gdCheckData && $gdCheckData->id) {
|
|
|
+ $buyType = 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建订单
|
|
|
+ $expireTime = ($mealInfo->num * 24 * 3600) + time();
|
|
|
+ $data = [
|
|
|
+ 'source_id' => $fid,
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'pay_type' => $payType,
|
|
|
+ 'buy_type' => $buyType,
|
|
|
+ 'order_sn' => get_order_num('G'),
|
|
|
+ 'num' => 1,
|
|
|
+ 'price' => $mealInfo->price,
|
|
|
+ 'total' => $mealInfo->price,
|
|
|
+ 'sf_name' => isset($params['sf_name']) ? trim($params['sf_name']) : '',
|
|
|
+ 'qf_content' => isset($params['qf_content']) ? trim($params['qf_content']) : '',
|
|
|
+ 'is_hide' => isset($params['is_hide']) ? intval($params['is_hide']) : 0,
|
|
|
+ 'expire_time' => $expireTime,
|
|
|
+ 'create_time' => time(),
|
|
|
+ 'status' => 1,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if($gdCheckData){
|
|
|
+ $data['device_num'] = $gdCheckData->device_num;
|
|
|
+ $data['params'] = $gdCheckData->params;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 订单
|
|
|
+ if (!$oid = GongdengOrderModel::insertGetId($data)) {
|
|
|
+ return message('供灯订单创建失败', false);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ // 支付参数
|
|
|
+ switch ($payType) {
|
|
|
+ case 1: // 微信支付
|
|
|
+ $order = [
|
|
|
+ 'openid' => $openid,
|
|
|
+ 'orderNo' => $data['order_sn'],
|
|
|
+ 'amount' => $data['total'],
|
|
|
+ 'body' => '供灯订单支付',
|
|
|
+ ];
|
|
|
+
|
|
|
+ $jsapiParams = WechatService::jsapiUnifiedorder($order);
|
|
|
+ $code = isset($jsapiParams['code']) ? $jsapiParams['code'] : '';
|
|
|
+ if ($code == 'error' || empty($jsapiParams)) {
|
|
|
+ $message = isset($jsapiParams['message']) && $jsapiParams['message'] ? $jsapiParams['message'] : '订单支付处理失败';
|
|
|
+ return message($message, false);
|
|
|
+ }
|
|
|
+ return message('订单创建成功', true, ['id' => $oid, 'params' => $jsapiParams]);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return message('支付处理失败', false);
|
|
|
+ }
|
|
|
+
|
|
|
}
|