代付回调
parent
4055e850f4
commit
051c2452a1
|
|
@ -2,12 +2,89 @@
|
||||||
|
|
||||||
namespace App\Endpoint\Callback\Http\Controllers;
|
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\Http\Request;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
class YeePayNotifyController extends Controller
|
class YeePayNotifyController extends Controller
|
||||||
{
|
{
|
||||||
public function __invoke(Request $request)
|
public function __invoke(Request $request)
|
||||||
{
|
{
|
||||||
logger()->debug('yeepay notify', $request->input());
|
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('签名错误');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue