laravel-8 - 获取 pagseguro 会话 id
问题描述
我正在尝试获取 pagseguro 会话 id,但是当我通过 post 发送请求时,我得到状态 200,但我得到 null,当我通过表单发出请求时,我可以获得 id 但通过 ajax 它返回 null 到使用 laravel 8
//Route
Route::post('getsession', [\App\Http\Controllers\Pagseguro\PagseguroController::class, 'getSession'])->name('getsession');
//Controller
class PagseguroController extends Controller
{
public function getSession()
{
$response = Http::post('https://ws.sandbox.pagseguro.uol.com.br/v2/sessions?email=$email&token=$token');
dd($response->json());
}
}
//View
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body class="font-sans antialiased">
<a href="" class="btn btn-primary" id="sign">GET ID SESSION</a>
<script
src="https://code.jquery.com/jquery-3.6.0.min.js"
integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
crossorigin="anonymous"></script>
<script>
//disparar no momento da compra - sign-plan
$('#sign').click(function(e){
e.preventDefault();
$.ajax({
type: "POST",
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
'Content-Type': 'application/json;charset=utf-8'
},
url: "{{ url('getsession') }}",
dataType: "json",
data: function (data) {
console.log(data);
},
});
});
</script>
</body>
</html>
解决方案
您不能/sessions
直接在前端调用,因为这会暴露您的电子邮件和令牌。您必须在应用程序的后端执行此调用。(看来你已经这样做了。)
结果,您可以调用PagSeguroDirectPayment.setSessionId('SESSION_ID');
.
此处详细说明了这一点并通过示例进行了说明。
并回答您的问题,当您提交表单时,沙盒很可能已停止服务。特别是如果您在夜间进行测试。这就是为什么你可能得到一个空结果。
⚠️ PagSeguro 沙盒环境不可靠,您可能会遇到此类问题,特别是在获取 sessionId、信用卡令牌和/或分期付款时。