6
0
Fork 0
jiqu-library-server/app/Endpoint/Callback/Http/Controllers/YeePayNotifyController.php

100 lines
2.7 KiB
PHP

<?php
namespace App\Endpoint\Callback\Http\Controllers;
use App\Enums\WalletToBankLogStatus;
use App\Models\WalletToBankLog;
use App\Services\YeePayService;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Carbon;
class YeePayNotifyController extends Controller
{
public function __invoke(Request $request)
{
logger()->debug('yeepay notify', $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);
if (Arr::get($context, 'type') === '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,
]);
}
}
}
/**
* 校验签名
*
* @param \Illuminate\Http\Request $request
* @return void
*
* @throws \App\Exceptions\BizException
*/
protected function validateSign(Request $request)
{
$yeePayService = new YeePayService(config('services.yeepay'));
logger()->debug('yeepay notify sign------>', [
'sign' => $request->input('sign'),
'sign2' => $yeePayService->sign($request->input()),
]);
if ($request->input('sign') === $yeePayService->sign($request->input())) {
return;
}
throw new Exception('签名错误');
}
}