首页 > 解决方案 > 获取 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>

标签: laravel-8

解决方案


您不能/sessions直接在前端调用,因为这会暴露您的电子邮件和令牌。您必须在应用程序的后端执行此调用。(看来你已经这样做了。)

结果,您可以调用PagSeguroDirectPayment.setSessionId('SESSION_ID');.

此处详细说明了这一点并通过示例进行了说明。

并回答您的问题,当您提交表单时,沙盒很可能已停止服务。特别是如果您在夜间进行测试。这就是为什么你可能得到一个空结果。

⚠️ PagSeguro 沙盒环境不可靠,您可能会遇到此类问题,特别是在获取 sessionId、信用卡令牌和/或分期付款时。


推荐阅读