/// <summary> /// Verifies reCAPTCHA V3 response token. /// https://developers.google.com/recaptcha/docs/verify#api-request /// </summary> /// <param name="response">The user response token provided by the reCAPTCHA client-side integration on your site.</param> /// <param name="secret">The shared key between your site and reCAPTCHA. /// This parameter could be unsetted if <see cref="RecaptchaOptions"/> was configured.</param> /// <param name="remoteIp">The user's IP address.</param> /// <returns>A <see cref="Task"/> that represents the asynchronous operation. /// The task result contains verification response <see cref="VerifyResponse"/>.</returns> /// <exception cref="EmptyCaptchaAnswerException"> /// This exception is thrown when captcha answer is empty. /// </exception> /// <exception cref="SecretKeyNotSpecifiedException"> /// This exception is thrown when secret key was not specified in options or request params. /// </exception> public static Task <VerifyResponseV3> VerifyV3Async(this IRecaptchaService service, string response, string secret = null, string remoteIp = null, CancellationToken cancellationToken = default) => service.VerifyV3Async( new VerifyRequest() { Response = response, Secret = secret, RemoteIp = remoteIp }, cancellationToken);