|
|
@@ -293,6 +293,112 @@ class GongdengOrderService extends BaseService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 供灯下单卡支付
|
|
|
+ */
|
|
|
+ public function cardBuy()
|
|
|
+ {
|
|
|
+ $params = request()->all();
|
|
|
+ $userId = isset($params['user_id'])? intval($params['user_id']) : 0;
|
|
|
+
|
|
|
+ // 验证佛像信息
|
|
|
+ $fid = isset($params['fid']) ? $params['fid'] : 0;
|
|
|
+ $foInfo = GongdengFoxiangModel::where(['id' => $fid, 'status' => 1, 'mark' => 1])
|
|
|
+ ->select(['id', 'name'])
|
|
|
+ ->first();
|
|
|
+ if (!$foInfo || $fid <= 0) {
|
|
|
+ return message('供灯佛像信息不存在', false);
|
|
|
+ }
|
|
|
+
|
|
|
+ $payType = isset($params['payType']) ? $params['payType'] : 0;
|
|
|
+ if (!in_array($payType, [3])) {
|
|
|
+ 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();
|
|
|
+ if (!$memberInfo) {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 卡支付调用
|
|
|
+ $data = [
|
|
|
+ 'CommandType'=> 'OpenLed', // 执行命令方式:OpenLed-开灯,CloseLed-关灯,QuitStatus-查询状态
|
|
|
+ 'OrderNo'=> $data['order_sn'],
|
|
|
+ 'total'=> $data['total'],
|
|
|
+ 'body'=> '供灯订单',
|
|
|
+ 'notify_url'=> url()->formatRoot('http://').'/api/notify/pay/cardGd'
|
|
|
+ ];
|
|
|
+ $dataStr = [];
|
|
|
+ foreach($data as $k => $v){
|
|
|
+ $dataStr[] = $k.'='.$v;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 卡支付供灯调用
|
|
|
+ $errorKey = "caches:gongdeng:{$userId}_{$fid}_{$mid}";
|
|
|
+ $dataStr = implode('&', $dataStr);
|
|
|
+ $headers = ["Content-Type:application/x-www-form-urlencoded; charset=UTF-8"];
|
|
|
+ $apiUrl = ConfigService::make()->getConfigByCode('gd_api_url').'/LEDControl.ashx';
|
|
|
+ RedisService::set($errorKey.':request', ['url'=> $apiUrl,'data'=> $data], 3600);
|
|
|
+ $result = httpHeaderRequest($apiUrl, $dataStr,'post',$headers,'text', 5);
|
|
|
+ RedisService::set($errorKey.':result', $result, 3600);
|
|
|
+
|
|
|
+ return message('支付处理失败', false);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
* 供灯下单
|
|
|
*/
|
|
|
public function buy($userId)
|
|
|
@@ -400,5 +506,4 @@ class GongdengOrderService extends BaseService
|
|
|
|
|
|
return message('支付处理失败', false);
|
|
|
}
|
|
|
-
|
|
|
}
|