如何将滑块验证码相关Node.js功能代码转换为PHP实现
PHP 实现与Node.js逻辑完全等效的滑块验证码配置
以下代码完全对齐给出的Node.js滑块验证码逻辑,核心实现JSON格式POST提交验证参数的校验能力:
逻辑对齐点
- 默认远程校验地址和原配置一致:
api/Captcha verify方法行为完全匹配:接收验证参数数组、目标请求地址,请求头携带Accept: application/json、Content-Type: application/json,将参数序列化为JSON作为请求体提交,最终返回接口响应结果,请求失败默认返回false
完整代码
<?php class SliderCaptcha { protected $config; public function __construct(array $config) { $this->config = array_merge([ 'remoteUrl' => '', 'verify' => null ], $config); } /** * 执行滑块验证 * @param array $params 验证参数数组 * @param string|null $url 自定义请求地址,不传则使用默认remoteUrl * @return bool|string */ public function verify(array $params, ?string $url = null) { $requestUrl = $url ?: $this->config['remoteUrl']; if (is_callable($this->config['verify'])) { return call_user_func($this->config['verify'], $params, $requestUrl); } return false; } } // 实例化验证码,配置与原Node代码一一对应 $captcha = new SliderCaptcha([ 'remoteUrl' => 'api/Captcha', 'verify' => function (array $arr, string $url) { $ret = false; // 初始化cURL发起POST请求,等效原Node的fetch逻辑 $ch = curl_init($url); $requestBody = json_encode($arr); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Accept: application/json', 'Content-Type: application/json', 'Content-Length: ' . strlen($requestBody) ], CURLOPT_POSTFIELDS => $requestBody, CURLOPT_TIMEOUT => 5 ]); $response = curl_exec($ch); curl_close($ch); if ($response !== false) { $ret = $response; } return $ret; } ]); // 调用示例 // $verifyResult = $captcha->verify([ // 'sliderX' => 132, // 滑块滑动距离 // 'captchaId' => 'xxx' // 验证码唯一标识 // ]);
运行前提:PHP环境需开启cURL扩展,代码请求行为和原Node.js逻辑完全一致,无额外参数增减。
内容的提问来源于stack exchange,提问作者Wasay Goraya
相关产品推荐
相关产品推荐

