使用laravels后支付宝回调报错。但是咋传统的fpm模式下没问题。
pro911 opened this issue · comments
[2022-02-19 15:43:07] master.ERROR: {"exception":"[object] (Yansongda\\Pay\\Exception\\InvalidResponseException(code: 5003): at /data/Application/ Demo/vendor/yansongda/pay/src/Plugin/Alipay/CallbackPlugin.php:33)
[stacktrace]
#0 /data/Application/ Demo/vendor/yansongda/supports/src/Pipeline.php(132): Yansongda\\Pay\\Plugin\\Alipay\\CallbackPlugin->assembly(Object(Yansongda\\Pay\\Rocket), Object(Closure))
#1 /data/Application/ Demo/vendor/yansongda/supports/src/Pipeline.php(90): Yansongda\\Supports\\Pipeline->Yansongda\\Supports\\{closure}(Object(Yansongda\\Pay\\Rocket))
#2 /data/Application/ Demo/vendor/yansongda/pay/src/Provider/AbstractProvider.php(75): Yansongda\\Supports\\Pipeline->then(Object(Closure))
#3 /data/Application/ Demo/vendor/yansongda/pay/src/Provider/Alipay.php(142): Yansongda\\Pay\\Provider\\AbstractProvider->pay(Array, Array)
#4 /data/Application/ Demo/app/Http/Controllers/Api/PayController.php(149): Yansongda\\Pay\\Provider\\Alipay->callback()
#5 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\Api\\PayController->alipayNotifyCallback(Object(App\\Services\\OrderService))
#6 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('alipayNotifyCal...', Array)
#7 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\Api\\PayController), 'alipayNotifyCal...')
#8 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#9 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\\Routing\\Route->run()
#10 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#11 /data/Application/ Demo/app/Http/Middleware/StopService.php(28): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#12 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\StopService->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#13 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#14 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#15 /data/Application/ Demo/app/Http/Middleware/MyThrottle.php(61): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#16 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\MyThrottle->handle(Object(Illuminate\\Http\\Request), Object(Closure), '120', '60')
#17 /data/Application/ Demo/app/Http/Middleware/JsonResponse.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#18 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\JsonResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#19 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#20 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#21 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#22 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#23 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#24 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#25 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#26 /data/Application/ Demo/app/Http/Middleware/EnableCrossRequestMiddleware.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\EnableCrossRequestMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#28 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#29 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#31 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#32 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /data/Application/ Demo/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#37 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#38 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#39 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#40 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#41 /data/Application/ Demo/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#42 /data/Application/ Demo/vendor/hhxsv5/laravel-s/src/Illuminate/Laravel.php(153): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#43 /data/Application/ Demo/vendor/hhxsv5/laravel-s/src/LaravelS.php(251): Hhxsv5\\LaravelS\\Illuminate\\Laravel->handleDynamic(Object(Illuminate\\Http\\Request))
#44 /data/Application/ Demo/vendor/hhxsv5/laravel-s/src/LaravelS.php(202): Hhxsv5\\LaravelS\\LaravelS->handleDynamicResource(Object(Hhxsv5\\LaravelS\\Illuminate\\Laravel), Object(Illuminate\\Http\\Request), Object(Swoole\\Http\\Response))
#45 [internal function]: Hhxsv5\\LaravelS\\LaravelS->onRequest(Object(Swoole\\Http\\Request), Object(Swoole\\Http\\Response))
#46 /data/Application/ Demo/vendor/hhxsv5/laravel-s/src/Swoole/Server.php(409): Swoole\\Server->start()
#47 /data/Application/ Demo/vendor/hhxsv5/laravel-s/src/Console/Portal.php(158): Hhxsv5\\LaravelS\\Swoole\\Server->run()
#48 /data/Application/ Demo/vendor/hhxsv5/laravel-s/src/Console/Portal.php(59): Hhxsv5\\LaravelS\\Console\\Portal->start()
#49 /data/Application/ Demo/vendor/symfony/console/Command/Command.php(298): Hhxsv5\\LaravelS\\Console\\Portal->execute(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#50 /data/Application/ Demo/bin/laravels(167): Symfony\\Component\\Console\\Command\\Command->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
#51 {main}
"}
验签出错了,检查你的配置
好的,问题找到了,仔细排查了下,使用laravels后原有的接参方式获取不到参数。需要将laravel的Request 接参后传参进去。
/**
* 支付宝支付异步回调
*
* @param OrderService $orderService
* @return ResponseInterface
* @throws ContainerDependencyException
* @throws ContainerException
* @throws InvalidParamsException
* @throws ServiceNotFoundException
*/
public function alipayNotifyCallback(\Illuminate\Http\Request $request, OrderService $orderService): ResponseInterface
{
$alipay = Pay::alipay(config('pay'));
$data = $alipay->callback($request->all()); //假如这里不传入参数,那么在后面pay包内的获取参数的方式获取不到数据。原因可能是laravels为了协程安全防止全局变量污染做了限制处理导致。
$orderService->alipayNotifyCallback($data);
return $alipay->success();
}
/**
* @param array|\Psr\Http\Message\ServerRequestInterface|null $contents
*
* @throws \Yansongda\Pay\Exception\ContainerDependencyException
* @throws \Yansongda\Pay\Exception\ContainerException
* @throws \Yansongda\Pay\Exception\InvalidParamsException
* @throws \Yansongda\Pay\Exception\ServiceNotFoundException
*/
public function callback($contents = null, ?array $params = null): Collection
{
Event::dispatch(new Event\CallbackReceived('alipay', $contents, $params, null));
$request = $this->getCallbackParams($contents);
return $this->pay(
[CallbackPlugin::class], $request->merge($params)->all()
);
}
/**
* @param array|ServerRequestInterface|null $contents
*/
protected function getCallbackParams($contents = null): Collection
{
if (is_array($contents)) {
return Collection::wrap($contents);
}
if ($contents instanceof ServerRequestInterface) {
return Collection::wrap('GET' === $contents->getMethod() ? $contents->getQueryParams() :
$contents->getParsedBody());
}
$request = ServerRequest::fromGlobals();
return Collection::wrap(
array_merge($request->getQueryParams(), $request->getParsedBody())
);
}