<?php
/**
  * @method 验证码生成类
  * @author soul
  * @copyright 2016/3/31
  */
class OthCheckcode
{
	/**
	  * @method 验证码的GIF图片的函数
	  * @param  $DataArr = ['session_key'=>'imgcode', 'width'=>75, 'height'=>25, 'level'=>5]
				session_key 验证码保存到Session的键
				width 高度
				height 宽度
				level  难度系数 1至10 数字越大越高  [待实现...............]
	  * @author soul
	  * @copyright 2017/5/9
	  * @return img
	  */
	public function getImgcode($DataArr = [])
	{
		include('lib/captcha/Captcha.class.php');
		$config=[
			'imageW'=>!empty($DataArr['width']) ? $DataArr['width']: 75,
			'imageH'=>!empty($DataArr['height']) ? $DataArr['height']: 25,
		];
		if(!empty($DataArr['onlyNum'])) $config['onlyNum'] = $DataArr['onlyNum'];
		$captcha = new Captcha($config);//$id 标识
		$captcha->entry(isset($DataArr['session_key']) ? $DataArr['session_key']: 'imgcode');
		return;
		//$string = '', $DataArr['width'] = 75, $DataArr['height'] = 25
		$DataArr['session_key'] = isset($DataArr['session_key']) ? $DataArr['session_key']: 'imgcode';
		$DataArr['width'] = !empty($DataArr['width']) ? $DataArr['width']: 75;
		$DataArr['height'] = !empty($DataArr['height']) ? $DataArr['height']: 25;
		$DataArr['level'] = isset($DataArr['level']) ? $DataArr['level']: 5;

		$authstr = '';
		$Chars = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPRSTUVWXYZ23456789';
		for ($I = 0; $I < 5; $I++)
		{
			$authstr .= substr($Chars, mt_rand(0, strlen($Chars) - 1), 1);
		}
		$_SESSION[$DataArr['session_key']] = strtoupper($authstr);

		$board_width = $DataArr['width'];
		$board_height = $DataArr['height'];
		$ratew = $board_width/75;
		$rateh = $board_height/25;
		// 生成一个32帧的GIF动画
		for ($i = 0; $i < 32; $i++)
		{
			ob_start();
			$image = imagecreate($board_width, $board_height);
			imagecolorallocate($image, 0, 0, 0);
			// 设定文字颜色数组 
			$colorList[] = ImageColorAllocate($image, 15, 73, 210);
			$colorList[] = ImageColorAllocate($image, 0, 64, 0);
			$colorList[] = ImageColorAllocate($image, 0, 0, 64);
			$colorList[] = ImageColorAllocate($image, 0, 128, 128);
			$colorList[] = ImageColorAllocate($image, 27, 52, 47);
			$colorList[] = ImageColorAllocate($image, 51, 0, 102);
			$colorList[] = ImageColorAllocate($image, 0, 0, 145);
			$colorList[] = ImageColorAllocate($image, 0, 0, 113);
			$colorList[] = ImageColorAllocate($image, 0, 51, 51);
			$colorList[] = ImageColorAllocate($image, 158, 180, 35);
			$colorList[] = ImageColorAllocate($image, 59, 59, 59);
			$colorList[] = ImageColorAllocate($image, 0, 0, 0);
			$colorList[] = ImageColorAllocate($image, 1, 128, 180);
			$colorList[] = ImageColorAllocate($image, 0, 153, 51);
			$colorList[] = ImageColorAllocate($image, 60, 131, 1);
			$colorList[] = ImageColorAllocate($image, 0, 0, 0);
			$fontcolor = ImageColorAllocate($image, 0, 0, 0);
			$gray = ImageColorAllocate($image, 245, 245, 245);
			$color = imagecolorallocate($image, 255, 255, 255);
			$color2 = imagecolorallocate($image, 255, 0, 0);
			
			imagefill($image, 0, 0, $gray);
			$space = ceil(15*$ratew); // 字符间距
			if ($i > 0)
			{ // 屏蔽第一帧
				$top = ceil(4*$ratew);
				for ($k = 0; $k < strlen($authstr); $k++)
				{
					$colorRandom = mt_rand(0, sizeof($colorList) - 1);
					$float_top = rand(0, 4);
					$float_left = rand(0, 3);
					imagestring($image, ceil(6*$ratew), $space * $k+ceil(4*$ratew), $top + $float_top, substr($authstr, $k, 1), $colorList[$colorRandom]);
				}
			}
			for ($k = 0; $k < 20; $k++)
			{
				$colorRandom = mt_rand(0, sizeof($colorList) - 1);
				imagesetpixel($image, rand() % 70, rand() % 15, $colorList[$colorRandom]);
			}
			// 添加干扰线
			for ($k = 0; $k < 3; $k++)
			{
				$colorRandom = mt_rand(0, sizeof($colorList) - 1);
				$todrawline = 1;
				if ($todrawline)
				{
					imageline($image, mt_rand(0, $board_width), mt_rand(0, $board_height), mt_rand(0, $board_width), mt_rand(0, $board_height), $colorList[$colorRandom]);
				}
				else
				{
					$w = mt_rand(0, $board_width);
					$h = mt_rand(0, $board_width);
					imagearc($image, $board_width - floor($w / 2), floor($h / 2), $w, $h, rand(90, 180), rand(180, 270), $colorList[$colorRandom]);
				}
			}
			imagegif($image);
			imagedestroy($image);
			$imagedata[] = ob_get_contents();
			ob_clean();
			++$i;
		}
		include 'lib/GifCaptcha.php';
		$gif = new GIFEncoder($imagedata);
		Header('Content-type:image/gif');
		echo $gif->GetAnimation();
	}
	

	/**
     *  验证码验证
     * @param $token
     * @return int
     */
    public function checkDingxiangCaptcha($token, $cfg = [])
    {
		$cfg = empty($cfg)? mvc::$cfg['dignxiang']: $cfg;
        include(mvc::$cfg['ROOT_MVC'].'/lib/lib/dingxiang/CaptchaClient.php');
        $client = new CaptchaClient($cfg['appid'], $cfg['appsecret']);
        $client->setTimeOut(3);      //设置超时时间，默认2秒
        $response = $client->verifyToken($token);  //token指的是前端传递的值，即验证码验证成功颁发的token
        //确保验证状态是SERVER_SUCCESS，SDK中有容错机制，在网络出现异常的情况会返回通过
        if($response->result && $response->serverStatus == 'SERVER_SUCCESS'){
            return LibFc::ReturnData(true, true);
        }else{
           return LibFc::ReturnData(true, false);
        }
    }
}