all(); Log::info('paymentNotifyToOut params:', $params); $sign = $request->getHeader('x-efps-sign'); $data = json_encode($params); if (!Signer::verify($data, $sign)) { Log::info('paymentNotifyToOut data: ' . $data . ' sign: ' . $sign); return [ 'returnCode' => '0001', 'returnMsg' => '签名验证失败' ]; } $outOrderNo = $params['outTradeNo'] ?: ''; $order = Order::where('out_order_no', $outOrderNo)->first(); if (!$order) { Log::info('paymentNotifyToOut: ' . '订单号不存在[' . $outOrderNo . ']'); return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } $app = App::where('app_id', $order->app_id)->first(); if (!$app) { Log::info('paymentNotifyToOut: ' . 'APP不存在[' . $outOrderNo . '][' . $order->app_id . ']'); return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } if ($order->status != Order::STATUS_WAIT_PAY) { return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } if ($params['payState'] === '00') { $order->status = Order::STATUS_PAYED; $order->fee = $params['procedureFee'] ?: 0; $order->pay_order_no = $params['transactionNo'] ?: ''; $order->channel_order_no = $params['channelOrder'] ?: ''; $order->payed_at = date('Y-m-d H:i:s'); $order->save(); } elseif ($params['payState'] === '01') { $order->status = Order::STATUS_FAILED; $order->error_code = '01'; $order->error_msg = '处理失败'; $order->payed_at = date('Y-m-d H:i:s'); $order->save(); } $result = $this->notify($order->notify_url, $app, [ 'outTradeNo' => $params['outTradeNo'] ?: '', 'transactionNo' => $params['transactionNo'] ?: '', 'payState' => $params['payState'], 'amount' => $params['amount'] ?: 0, ]); Log::info('paymentNotifyToOut result: ' . '订单[' . $outOrderNo . '][' . $$result . ']'); return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } public function refund(RequestInterface $request) { $params = $request->all(); Log::info('refundNotifyToOut params:', $params); $sign = $request->getHeader('x-efps-sign'); $data = json_encode($params); if (!Signer::verify($data, $sign)) { Log::info('refundNotifyToOut data: ' . $data . ' sign: ' . $sign); return [ 'returnCode' => '0001', 'returnMsg' => '签名验证失败' ]; } $outRefundNo = $params['outRefundNo'] ?: ''; $order = RefundOrder::where('out_refund_order_no', $outRefundNo)->first(); if (!$order) { Log::info('refundNotifyToOut: ' . '订单号不存在[' . $outRefundNo . ']'); return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } $app = App::where('app_id', $order->app_id)->first(); if (!$app) { Log::info('refundNotifyToOut: ' . 'APP不存在[' . $outRefundNo . '][' . $order->app_id . ']'); return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } if ($order->status != RefundOrder::STATUS_APPLY_SUCCESS) { return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } if ($params['payState'] === '00') { $order->status = RefundOrder::STATUS_REFUND_SUCCESS; $order->fee = $params['procedureFee'] ?: 0; $order->refunded_at = date('Y-m-d H:i:s'); $order->save(); } elseif ($params['payState'] === '01') { $order->status = RefundOrder::STATUS_REFUND_FAILED; $order->error_code = '01'; $order->error_msg = '处理失败'; $order->refunded_at = date('Y-m-d H:i:s'); $order->save(); } $result = $this->notify($order->notify_url, $app, [ 'outRefundNo' => $params['outRefundNo'] ?: '', 'transactionNo' => $params['transactionNo'] ?: '', 'payState' => $params['payState'], 'amount' => $params['amount'] ?: 0, 'refundAmount' => $params['refundAmount'] ?: 0, ]); Log::info('paymentNotifyToOut result: ' . '订单[' . $outRefundNo . '][' . $$result . ']'); return [ 'returnCode' => '0000', 'returnMsg' => '处理成功' ]; } protected function notify($url, $app, $data) { $params = [ 'app_id' => $app->app_id, 'nonce_str' => StringHelper::getRandomString(32), 'timestamp' => time(), ]; $params['data'] = json_encode($data); $params['sign'] = PlatformSigner::sign($params, $app->app_key); Log::info('notifyToOut params:', $params, 'platform'); Log::info('notifyToOut url:' . $url, [], 'platform'); $result = Notification::post($url, $params); Log::info('notifyToOut response:' . $result, [], 'platform'); return $result; } }