6
0
Fork 0

代付回调

release
李静 2022-04-12 16:25:20 +08:00
parent 4055e850f4
commit 051c2452a1
1 changed files with 77 additions and 0 deletions

View File

@ -2,12 +2,89 @@
namespace App\Endpoint\Callback\Http\Controllers;
use App\Enums\WalletToBankLogStatus;
use App\Exceptions\BizException;
use App\Models\WalletToBankLog;
use App\Services\YeePayService;
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('contxt'), true);
if (Arr::get($context, 'type') === 'wallet_to_bank') {
$log = WalletToBankLog::where('pay_sn', $orderNo)->first();
if ($log === null) {
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'));
if ($request->input('sign') === $yeePayService->sign($request->input())) {
return;
}
throw new BizException('签名错误');
}
}