php 如何解决我的Stripe Connect入职流程的“Header may not contain more than a single header,new line detected”问题?

6l7fqoea  于 2024-01-05  发布在  PHP
关注(0)|答案(1)|浏览(292)

我不是最好的程序员,这是我的第一个大项目。这里的脚本主要是注册过程后的重定向。一切正常,直到你点击“注册”按钮,然后你得到一个耀斑错误。入职流程是在条纹连接Express帐户。我使用MySQL的数据库和Laravel框架的代码。请帮助我,我已经在这个错误3天了。我将非常感谢任何帮助!
Flare错误显示“Header may not contain more than a single header,new line detected”和我的index.php文件。下面是我的索引文件的一小部分:

  1. namespace App\Http\Controllers;
  2. require_once('vendor/autoload.php');
  3. use Illuminate\Support\Facades\Auth;
  4. use Stripe\Stripe;
  5. use Stripe\Account;
  6. use Stripe\AccountLink;
  7. use App\Models\User;
  8. use Illuminate\Support\Facades\Crypt;
  9. use Carbon\Carbon;
  10. use Stripe\ApiOperations;
  11. use Illuminate\Http;
  12. class StripeConnectController extends Controller
  13. {
  14. public function StripeOnboarding101(){
  15. $user = Auth::user();
  16. /** @var User $user */
  17. if (empty($user->stripe_on_boarding_completed_at)) {
  18. $stripeSecret = env('STRIPE_SECRET');
  19. $stripe::setApiKey($stripeSecret);
  20. $stripe = new \Stripe\StripeClient ($stripeSecret);
  21. if (empty($user->stripe_connect_id)) {
  22. /** @var Account $account */
  23. $account = Account::create([
  24. 'type' => 'express',
  25. 'email' => $user->email,
  26. 'country' => 'SE',
  27. 'capabilities' => [
  28. 'card_payments' => ['requested' => true],
  29. 'transfers' => ['requested' => true],
  30. ],
  31. 'settings' => [
  32. 'payouts' => [
  33. 'schedule' => [
  34. 'interval' => 'manual',
  35. ],
  36. ],
  37. ],
  38. ]);
  39. $user->stripe_connect_id = $account->id;
  40. $user->save();
  41. }
  42. $user->fresh();
  43. $onBoardLink = AccountLink::create([
  44. 'account' => $user->stripe_connect_id,
  45. 'refresh_url' => route('onBoardCancel'),
  46. 'return_url' => route('onBoardResult', Crypt::encrypt($user->stripe_connect_id)),
  47. 'type' => 'account_onboarding',
  48. ]);
  49. // ob_clean();
  50. // Open a new window alternative TEST; $javascript = "<script>window.open('{$onBoardLink->url}', '_blank');</script>";
  51. }
  52. $loginLink = $this->stripeClient->accounts->createLoginLink($user->stripe_connect_id, []);
  53. return redirect($loginLink->url);
  54. }
  55. public function onBoardResult($encodedToken)
  56. {
  57. /** @var User $user */
  58. $user = User::whereStripeConnectId(Crypt::decrypt($encodedToken))->firstOrFail();
  59. $user->stripe_on_boarding_completed_at = Carbon::now();
  60. $user->save();
  61. return redirect(route('create/campaign'));
  62. }
  63. public function onBoardCancel()
  64. {
  65. return redirect(route('dashboard'));
  66. }

字符串
以下是我的Stripe onboarding路线:

  1. Route::middleware(['web', 'auth'])->group(function () {
  2. Route::get('dashboard', 'DashboardController@index')->name('dashboard');});
  3. // Exempt the Stripe onboarding route from the RedirectIfAuthenticated middleware
  4. Route::get('/stripeonboarding', 'StripeConnectController@StripeOnboarding101')->name('StripeOnboarding101')->withoutMiddleware(['guest'])


这是我注册时的RegisterController在我的页面上。

  1. namespace App\Http\Controllers\Auth;
  2. use App\Models\User;
  3. use Validator;
  4. use App\Models\AdminSettings;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Foundation\Auth\RegistersUsers;
  7. use Mail;
  8. use App\Http\Controllers\StripeConnectController;
  9. class RegisterController extends Controller
  10. {
  11. use RegistersUsers;
  12. /**
  13. * Where to redirect users after login / registration.
  14. *
  15. * @var string
  16. */
  17. protected function redirectTo()
  18. {
  19. return redirect()->action([StripeConnectController::class,'StripeOnboarding101']);
  20. }
  21. /**
  22. * Create a new controller instance.
  23. *
  24. * @return void
  25. */
  26. public function __construct()
  27. {
  28. $this->middleware('guest');
  29. }
  30. /**
  31. * Get a validator for an incoming registration request.
  32. *
  33. * @param array $data
  34. * @return \Illuminate\Contracts\Validation\Validator
  35. */
  36. protected function validator(array $data)
  37. {
  38. $settings = AdminSettings::first();
  39. $data['_captcha'] = $settings->captcha;
  40. $messages = [
  41. 'countries_id.required' => trans('misc.please_select_country'),
  42. 'g-recaptcha-response.required_if' => trans('admin.captcha_error_required'),
  43. 'g-recaptcha-response.captcha' => trans('admin.captcha_error'),
  44. ];
  45. return Validator::make($data, [
  46. 'name' => 'required|max:255',
  47. 'email' => 'required|email|max:255|unique:users',
  48. 'password' => 'required|min:6|confirmed',
  49. 'countries_id' => 'required',
  50. 'agree_gdpr' => 'required',
  51. 'g-recaptcha-response' => 'required_if:_captcha,==,on|captcha'
  52. ],$messages);
  53. }
  54. /**
  55. * Create a new user instance after a valid registration.
  56. *
  57. * @param array $data
  58. * @return User
  59. */
  60. protected function create(array $data)
  61. {
  62. $settings = AdminSettings::first();
  63. // Verify Settings Admin
  64. if( $settings->email_verification == 1 ) {
  65. $confirmation_code = str_random(100);
  66. $status = 'pending';
  67. //send verification mail to user
  68. $_username = $data['name'];
  69. $_email_user = $data['email'];
  70. $_title_site = $settings->title;
  71. $_email_noreply = $settings->email_no_reply;
  72. Mail::send('emails.verify', array('confirmation_code' => $confirmation_code, 'title_site' => $_title_site ),
  73. function($message) use (
  74. $_username,
  75. $_email_user,
  76. $_title_site,
  77. $_email_noreply
  78. ) {
  79. $message->from($_email_noreply, $_title_site);
  80. $message->subject(trans('users.title_email_verify'));
  81. $message->to($_email_user,$_username);
  82. });
  83. } else {
  84. $confirmation_code = '';
  85. $status = 'active';
  86. }
  87. $token = str_random(75);
  88. return User::create([
  89. 'name' => $data['name'],
  90. 'email' => $data['email'],
  91. 'password' => bcrypt($data['password']),
  92. 'countries_id' => $data['countries_id'],
  93. 'avatar' => 'default.jpg',
  94. 'status' => $status,
  95. 'role' => 'normal',
  96. 'token' => $token,
  97. 'confirmation_code' => $confirmation_code
  98. ]);
  99. }
  100. protected function redirectToStripeOnboarding(User $user)
  101. {
  102. // Call the Stripe onboarding logic here
  103. $this->StripeOnboarding101($user);
  104. // Redirect the user to a specific URL after Stripe onboarding
  105. return redirect()->route('organization.dashboard'); // Adjust the route as needed
  106. }
  107. public function showRegistrationForm()
  108. {
  109. $settings = AdminSettings::first();
  110. if($settings->registration_active == 'on') {
  111. return view('auth.register');
  112. } else {
  113. return redirect('/');
  114. }
  115. }
  116. }


以下是我的错误日志:

  1. [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]
  2. #0 /home/capitalpal/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(255): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError()
  3. #1 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->Illuminate\\Foundation\\Bootstrap\\{closure}()
  4. #2 /home/capitalpal/public_html/vendor/symfony/http-foundation/Response.php(376): header()
  5. #3 /home/capitalpal/public_html/vendor/symfony/http-foundation/Response.php(424): Symfony\\Component\\HttpFoundation\\Response->sendHeaders()
  6. #4 /home/capitalpal/public_html/index.php(55): Symfony\\Component\\HttpFoundation\\Response->send()
  7. #5 {main}
  8. "}


我也有一个重定向刀片文件时,点击注册按钮,但我不怀疑,它是错误的.而且,再次,我会非常感谢任何帮助.如果任何人都在他们的项目做了这太我会很感激,如果我能看到他们的脚本和比较等的一部分.
我试着做一个JavaScript行,而不是打开一个新的窗口,但这根本不起作用。我已经更新了与Composer的供应商文件,并重新安装供应商文件夹,我已经更新了laravel(v10.38.2),条纹PHP库(v10.21.0)和PHP到8.2

gojuced7

gojuced71#

Laravel Middleware: Header may not contain more than a single header, new line detected中提供的答案类似,问题在于RegisterController上的redirectTo()方法应该返回重定向路径的字符串,但您当前返回的是完整的重定向响应对象。
更新此方法以返回要重定向到的路径:

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

字符串

相关问题