<?php namespace App\Http\Service; use App\Http\Dao\GameDao; use App\Http\Dao\OrderDao; use Exception; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class OrderService { /** * 修改支付状态 * * @param array $params * @return array */ public function changeStatus(array $params): array { try { $orderDao = new OrderDao(); $gameDao = new GameDao(); DB::beginTransaction(); $orderObj = $orderDao->getRecordByOrderId((int)$params['orderID']); if (!$orderObj) { Log::info(__CLASS__ . '/' . __FUNCTION__ . ':order_id = ' . $params['orderID']); throw new \RuntimeException('订单不存在!'); } if ((int)$orderObj->state !== 1) { Log::info(__CLASS__ . '/' . __FUNCTION__ . ':order_id = ' . $params['orderID']); throw new \RuntimeException('订单状态不是未支付!'); } $gameObj = $gameDao->getRecordById((int)$orderObj->app_id); if (!$gameObj) { Log::info(__CLASS__ . '/' . __FUNCTION__ . ':app_id = ' . $orderObj->app_id); throw new \RuntimeException('订单不存在!'); } //签名验证 $mdStr = "orderID={$params['orderID']}money={$params['money']}roleID={$params['roleID']}serverID={$params['serverID']}" . "extension={$params['extension']}$gameObj->appkey"; if (md5($mdStr) !== $params['sign']) { throw new \RuntimeException('签名验证失败!'); } //将支付状态从"1-未支付"改为"2-支付中"。 $affectRows = $orderDao->updateById((int)$orderObj->id,['state' => 2, 'updated_at' => date('Y-m-d H:i:s')]); if (!$affectRows) { Log::info(__CLASS__ . '/' . __FUNCTION__ . ':order_id = ' . $orderObj->order_id); throw new \RuntimeException('更新订单状态失败!'); } DB::commit(); } catch (Exception $e) { DB::rollBack(); throw new \RuntimeException($e->getMessage()); } return [ 'channelID' => $orderObj->channel_id, 'state' => 2, 'money' => $params['money'], 'productName' => $params['productName'], 'roleID' => $orderObj->role_id, 'appID' => $orderObj->app_id, ]; } }