我正在与银行api合作。
银行向我的网站发送了一个帖子请求,但没有返回,没有令牌字段是他们的请求,我面临TokenMismatchException
。
我该如何解决这个问题?
这是相应的代码:
public function submitPayment()
{
$api = 'test';
$amount = '3443354';
$redirect = URL::to('new-order/after-payment');
$result = $this->send($api, $amount, $redirect);
$result = json_decode($result);
return redirect("https://example.com/$result->transId");
}
答案 0 :(得分:1)
简而言之,您希望将默认的_token
重命名为Laravel的CSRF令牌字段名称,而不是其他内容,
您可以从 App \ Http \ Middleware \ VerifyCsrfToken 类覆盖功能照亮\ Foundation \ Http \ Middleware \ VerifyCsrfToken @ tokensMatch(); 并更改CSRF参数名称
您可以在 App \ Http \ Middleware \ VerifyCsrfToken 文件中添加以下代码。
/**
* Determine if the session and input CSRF tokens match.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
protected function tokensMatch($request)
{
$sessionToken = $request->session()->token();
$token = $request->input('_csrf_token') ?: $request->header('X-CSRF-TOKEN');
if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
$token = $this->encrypter->decrypt($header);
}
if (! is_string($sessionToken) || ! is_string($token)) {
return false;
}
return hash_equals($sessionToken, $token);
}
在上述功能中,CSRF字段从_csrf_token
_token