<?php
/*
 * 华讯云加签sdk
 *
 * */
class hx_signer{
	private static $APPID  = '加签应用APPID';
	private static $APPKEY = '加签应用APPKEY';

	//$xml:不带签名节点的xml
	//返回:带签名的xml
	static function get_signed_xml($xml){
		$r = self::request(1, $xml);
		if($r['error']){
			return array(
				'error' => 1,
				'msg'   => $r['msg'],
				'xml'   => ''
			);
		}else{
			return array(
				'error' => 0,
				'msg'   => 'success',
				'xml'   => base64_decode($r['xml'])
			);
		}
	}

	//$digest:摘要
	//返回:签名
	static function get_signature($digest){
		$r = self::request(3, $digest);
		if($r['error']){
			return array(
				'error'     => 1,
				'msg'       => $r['msg'],
				'signature' => ''
			);
		}else{
			return array(
				'error'     => 0,
				'msg'       => 'success',
				'signature' => $r['signature']
			);
		}
	}

	//$data:179支付查询待签名字符串
	//返回:签名
	static function get_179_signature($data){
		$r = self::request(2, $data);
		if($r['error']){
			return array(
				'error'     => 1,
				'msg'       => $r['msg'],
				'signature' => ''
			);
		}else{
			return array(
				'error'     => 0,
				'msg'       => 'success',
				'signature' => $r['signature']
			);
		}
	}

	static private function request($type, $data){
		$data  = base64_encode($data);
		$param = array(
			'appid' => self::$APPID,
			'type'  => $type,
			'data'  => $data,
			'sign'  => md5(self::$APPID.$type.$data.self::$APPKEY)
		);
		$url   = 'http://ysapi.qdhuaxun.cn/sign.php';
		$resp  = self::curl_post($url, $param);
		return json_decode($resp, 1);
	}

	static private function curl_post($url = '', $data = array(), $headers = array(), $timeout = 15){
		$postfield = $s = '';
		if(!empty($data)){
			if(is_array($data)){
				foreach($data as $k => $v){
					$postfield .= $s.$k.'='.rawurlencode($v);
					if(preg_match('/^@/', $v)){
						$postfield = $data;
						break;
					}
					$s = '&';
				}
			}else if(is_string($data)){
				$postfield = $data;
			}
		}
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_HEADER, false);
		if($headers){
			curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
		}
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield);
		curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
		curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; SeaPort/1.2; Windows NT 5.1; SV1; InfoPath.2)");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
		if(stripos($url, 'https://') !== FALSE){
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
		}
		$value = curl_exec($ch);
		if($err = curl_error($ch)){
			if(is_resource($ch)){
				curl_close($ch);
			}
			return '{"error":1,"msg":"curl_error:'.$err.'"}';
		}
		curl_close($ch);
		return $value;
	}
}

/*
//demo, 返回值
$r = hx_signer::get_signed_xml('要加签的xml');
print_r($r);
$r = hx_signer::get_signature('xml的摘要值');
print_r($r);
$r = hx_signer::get_179_signature('179查询待加签数据');
print_r($r);
*/