如何解决我的 Stripe Connect 入门流程中的“标头可能不包含多个标头,检测到新行”问题?

问题描述 投票:0回答:1
我不是最好的程序员,这是我的第一个大项目。这里的脚本主要用于注册过程后的重定向。一切正常,直到您单击“注册”按钮,然后出现耀斑错误。入职流程适用于 Stripe Connect 中的 Express 账户。我使用 MySQL 作为数据库,使用 Laravel 框架作为代码。请帮助我,我已经出现这个错误 3 天了。我将非常感谢任何帮助!

Flare 错误向我显示“标头可能不包含多个标头,检测到新行”和我的 index.php 文件。这是我的索引文件的一小部分:

namespace App\Http\Controllers; require_once('vendor/autoload.php'); use Illuminate\Support\Facades\Auth; use Stripe\Stripe; use Stripe\Account; use Stripe\AccountLink; use App\Models\User; use Illuminate\Support\Facades\Crypt; use Carbon\Carbon; use Stripe\ApiOperations; use Illuminate\Http; class StripeConnectController extends Controller { public function StripeOnboarding101(){ $user = Auth::user(); /** @var User $user */ if (empty($user->stripe_on_boarding_completed_at)) { $stripeSecret = env('STRIPE_SECRET'); $stripe::setApiKey($stripeSecret); $stripe = new \Stripe\StripeClient ($stripeSecret); if (empty($user->stripe_connect_id)) { /** @var Account $account */ $account = Account::create([ 'type' => 'express', 'email' => $user->email, 'country' => 'SE', 'capabilities' => [ 'card_payments' => ['requested' => true], 'transfers' => ['requested' => true], ], 'settings' => [ 'payouts' => [ 'schedule' => [ 'interval' => 'manual', ], ], ], ]); $user->stripe_connect_id = $account->id; $user->save(); } $user->fresh(); $onBoardLink = AccountLink::create([ 'account' => $user->stripe_connect_id, 'refresh_url' => route('onBoardCancel'), 'return_url' => route('onBoardResult', Crypt::encrypt($user->stripe_connect_id)), 'type' => 'account_onboarding', ]); // ob_clean(); // Open a new window alternative TEST; $javascript = "<script>window.open('{$onBoardLink->url}', '_blank');</script>"; } $loginLink = $this->stripeClient->accounts->createLoginLink($user->stripe_connect_id, []); return redirect($loginLink->url); } public function onBoardResult($encodedToken) { /** @var User $user */ $user = User::whereStripeConnectId(Crypt::decrypt($encodedToken))->firstOrFail(); $user->stripe_on_boarding_completed_at = Carbon::now(); $user->save(); return redirect(route('create/campaign')); } public function onBoardCancel() { return redirect(route('dashboard')); }
以下是我的 Stripe 入门路线:

Route::middleware(['web', 'auth'])->group(function () { Route::get('dashboard', 'DashboardController@index')->name('dashboard');}); // Exempt the Stripe onboarding route from the RedirectIfAuthenticated middleware Route::get('/stripeonboarding', 'StripeConnectController@StripeOnboarding101')->name('StripeOnboarding101')->withoutMiddleware(['guest'])
这是我在我的页面上注册时的 RegisterController。

namespace App\Http\Controllers\Auth; use App\Models\User; use Validator; use App\Models\AdminSettings; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\RegistersUsers; use Mail; use App\Http\Controllers\StripeConnectController; class RegisterController extends Controller { use RegistersUsers; /** * Where to redirect users after login / registration. * * @var string */ protected function redirectTo() { return redirect()->action([StripeConnectController::class,'StripeOnboarding101']); } /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest'); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { $settings = AdminSettings::first(); $data['_captcha'] = $settings->captcha; $messages = [ 'countries_id.required' => trans('misc.please_select_country'), 'g-recaptcha-response.required_if' => trans('admin.captcha_error_required'), 'g-recaptcha-response.captcha' => trans('admin.captcha_error'), ]; return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6|confirmed', 'countries_id' => 'required', 'agree_gdpr' => 'required', 'g-recaptcha-response' => 'required_if:_captcha,==,on|captcha' ],$messages); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { $settings = AdminSettings::first(); // Verify Settings Admin if( $settings->email_verification == 1 ) { $confirmation_code = str_random(100); $status = 'pending'; //send verification mail to user $_username = $data['name']; $_email_user = $data['email']; $_title_site = $settings->title; $_email_noreply = $settings->email_no_reply; Mail::send('emails.verify', array('confirmation_code' => $confirmation_code, 'title_site' => $_title_site ), function($message) use ( $_username, $_email_user, $_title_site, $_email_noreply ) { $message->from($_email_noreply, $_title_site); $message->subject(trans('users.title_email_verify')); $message->to($_email_user,$_username); }); } else { $confirmation_code = ''; $status = 'active'; } $token = str_random(75); return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), 'countries_id' => $data['countries_id'], 'avatar' => 'default.jpg', 'status' => $status, 'role' => 'normal', 'token' => $token, 'confirmation_code' => $confirmation_code ]); } protected function redirectToStripeOnboarding(User $user) { // Call the Stripe onboarding logic here $this->StripeOnboarding101($user); // Redirect the user to a specific URL after Stripe onboarding return redirect()->route('organization.dashboard'); // Adjust the route as needed } public function showRegistrationForm() { $settings = AdminSettings::first(); if($settings->registration_active == 'on') { return view('auth.register'); } else { return redirect('/'); } } }
这是我的错误日志:

[2023-12-28 17:46:39] development.ERROR: Header may not contain more than a single header, new line detected {"userId":27,"exception":"[object] (ErrorException(code: 0): Header may not contain more than a single header, new line detected at /home/..../public_html/vendor/symfony/http-foundation/Response.php:376) [stacktrace] #0 /home/capitalpal/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(255): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError() #1 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->Illuminate\\Foundation\\Bootstrap\\{closure}() #2 /home/capitalpal/public_html/vendor/symfony/http-foundation/Response.php(376): header() #3 /home/capitalpal/public_html/vendor/symfony/http-foundation/Response.php(424): Symfony\\Component\\HttpFoundation\\Response->sendHeaders() #4 /home/capitalpal/public_html/index.php(55): Symfony\\Component\\HttpFoundation\\Response->send() #5 {main} "}
单击注册按钮时,我还在刀片文件上进行了重定向,但我不怀疑它会出错。并且,我将再次非常感谢任何帮助。如果有人在他们的项目中也做了这个,如果我能看到他们的脚本的一部分并进行比较等,我将不胜感激。

我尝试制作一个 JavaScript 行来打开一个新窗口,但根本不起作用。我已使用 Composer 更新了供应商文件,并重新安装了供应商文件夹,我已将 laravel (v10.38.2)、Stripe PHP 库 (v10.21.0) 和 PHP 更新至 8.2

php laravel web http-headers stripe-payments
1个回答
0
投票

Laravel Middleware: Header may not contains more than a single header, new line detectors 中提供的答案类似,问题是 redirectTo() 上的

RegisterController
方法预计会返回路径的字符串要在其中重定向,但您当前正在返回完整的重定向响应对象。
更新此方法以返回您要重定向到的路径:

protected function redirectTo() { // Use the action() helper to convert the action to a path. return action([StripeConnectController::class, 'StripeOnboarding101']); }

© www.soinside.com 2019 - 2024. All rights reserved.