info('request parameters', $request->input()); $this->validateSign($request); switch ($request->input('service')) { case 'accountpay.behalf.Pay': $this->handleBehalfPayNotify($request); break; } return 'success'; } /** * 处理代付回调 * * @param \Illuminate\Http\Request $request * @return void * * @throws \App\Exceptions\BizException */ protected function handleBehalfPayNotify(Request $request) { $resultCode = $request->input('resultCode'); if ($resultCode === 'EXECUTE_PROCESSING') { return; } $orderNo = $request->input('merchOrderNo'); $orderStatus = $request->input('orderStatus'); $context = (array) json_decode($request->input('context'), true); $contextType = Arr::get($context, 'type'); if ($contextType === 'wallet_to_bank') { $log = WalletToBankLog::where('pay_sn', $orderNo)->first(); if ($log === null) { return; } if ($log->status !== WalletToBankLogStatus::Paying) { return; } if ($orderStatus === 'SUCCESS') { $log->update([ 'status' => WalletToBankLogStatus::Success, 'pay_at' => Carbon::parse($request->input('finishTime')), 'failed_reason' => null, ]); } elseif ($orderStatus === 'FAIL') { $log->update([ 'status' => WalletToBankLogStatus::Failed, 'failed_reason' => $request->input('resultMessage').'#'.$resultCode, ]); } } elseif ($contextType === 'dealer_wallet_to_bank') { $log = DealerWalletToBankLog::where('pay_sn', $orderNo)->first(); if ($log === null) { return; } if ($log->status !== DealerWalletToBankLogStatus::Paying) { return; } if ($orderStatus === 'SUCCESS') { $log->update([ 'status' => DealerWalletToBankLogStatus::Success, 'pay_at' => Carbon::parse($request->input('finishTime')), 'failed_reason' => null, ]); } elseif ($orderStatus === 'FAIL') { $log->update([ 'status' => DealerWalletToBankLogStatus::Failed, 'failed_reason' => $request->input('resultMessage').'#'.$resultCode, ]); } } } /** * 校验签名 * * @param \Illuminate\Http\Request $request * @return void * * @throws \App\Exceptions\BizException */ protected function validateSign(Request $request) { $yeePayService = new YeePayService(config('services.yeepay')); if ($request->input('sign') === $yeePayService->sign($request->input())) { return; } throw new Exception('签名错误'); } protected function info($message, array $context = []) { logger()->build([ 'driver' => 'daily', 'path' => storage_path('logs/yeepay-notify.log'), ])->info('yeepay notify', $context); } }