瀏覽代碼

引入淘宝 SDK

LAPTOP-VT1IP978\suxio 3 周之前
父節點
當前提交
a3cec2801a
共有 100 個文件被更改,包括 7847 次插入0 次删除
  1. 78 0
      lib/taobao-sdk/Autoloader.php
  2. 12 0
      lib/taobao-sdk/OapiTest.php
  3. 384 0
      lib/taobao-sdk/QimenCloud/QimenCloudClient.php
  4. 40 0
      lib/taobao-sdk/TopSdk.php
  5. 255 0
      lib/taobao-sdk/aliyun/AliyunClient.php
  6. 656 0
      lib/taobao-sdk/dingtalk/DingTalkClient.php
  7. 18 0
      lib/taobao-sdk/dingtalk/DingTalkConstant.php
  8. 47 0
      lib/taobao-sdk/top/ApplicationVar.php
  9. 199 0
      lib/taobao-sdk/top/ClusterTopClient.php
  10. 23 0
      lib/taobao-sdk/top/HttpdnsGetRequest.php
  11. 107 0
      lib/taobao-sdk/top/RequestCheckUtil.php
  12. 21 0
      lib/taobao-sdk/top/ResultSet.php
  13. 219 0
      lib/taobao-sdk/top/SpiUtils.php
  14. 377 0
      lib/taobao-sdk/top/TopClient.php
  15. 43 0
      lib/taobao-sdk/top/TopLogger.php
  16. 30 0
      lib/taobao-sdk/top/domain/AddEntReqDto.php
  17. 25 0
      lib/taobao-sdk/top/domain/Address.php
  18. 95 0
      lib/taobao-sdk/top/domain/AppDrugReportDTO.php
  19. 85 0
      lib/taobao-sdk/top/domain/BaseInfoDto.php
  20. 15 0
      lib/taobao-sdk/top/domain/BaseInfosDto.php
  21. 115 0
      lib/taobao-sdk/top/domain/BillChkInOutDO.php
  22. 135 0
      lib/taobao-sdk/top/domain/BillDealStatusSearchDo.php
  23. 65 0
      lib/taobao-sdk/top/domain/BillInOutDetailDto.php
  24. 35 0
      lib/taobao-sdk/top/domain/BillProcessPartSuccessExcelDTO.php
  25. 25 0
      lib/taobao-sdk/top/domain/BillTypeCountDTO.php
  26. 145 0
      lib/taobao-sdk/top/domain/BillUpOutDetailDo.php
  27. 60 0
      lib/taobao-sdk/top/domain/BillUpOutDetailDto.php
  28. 60 0
      lib/taobao-sdk/top/domain/BillUpstreamDTO.php
  29. 90 0
      lib/taobao-sdk/top/domain/Billchkinoutdetaillistdtolist.php
  30. 15 0
      lib/taobao-sdk/top/domain/CASealDTO.php
  31. 125 0
      lib/taobao-sdk/top/domain/CodeActiveInfoDto.php
  32. 40 0
      lib/taobao-sdk/top/domain/CodeFullInfoDto.php
  33. 35 0
      lib/taobao-sdk/top/domain/CodeInfo.php
  34. 35 0
      lib/taobao-sdk/top/domain/CodeInfoListDto.php
  35. 15 0
      lib/taobao-sdk/top/domain/CodeProduceInfoDto.php
  36. 40 0
      lib/taobao-sdk/top/domain/CodeRelationDto.php
  37. 30 0
      lib/taobao-sdk/top/domain/CodeResList.php
  38. 15 0
      lib/taobao-sdk/top/domain/CodeStatusTypeDto.php
  39. 30 0
      lib/taobao-sdk/top/domain/Codeandparentlist.php
  40. 20 0
      lib/taobao-sdk/top/domain/DataEntTaskDto.php
  41. 30 0
      lib/taobao-sdk/top/domain/DataEntTaskResultDto.php
  42. 95 0
      lib/taobao-sdk/top/domain/DrugDetailInfoDto.php
  43. 50 0
      lib/taobao-sdk/top/domain/DrugEntBaseDto.php
  44. 55 0
      lib/taobao-sdk/top/domain/DrugEntBaseInfoDTO.php
  45. 115 0
      lib/taobao-sdk/top/domain/DrugInfosDto.php
  46. 25 0
      lib/taobao-sdk/top/domain/DrugReportSealInfo.php
  47. 80 0
      lib/taobao-sdk/top/domain/DrugTableDto.php
  48. 75 0
      lib/taobao-sdk/top/domain/DrugTestReportDTO.php
  49. 95 0
      lib/taobao-sdk/top/domain/EntDailyReportDTO.php
  50. 20 0
      lib/taobao-sdk/top/domain/EntDealResultDTO.php
  51. 50 0
      lib/taobao-sdk/top/domain/HoloBillSearchCommonShowDTO.php
  52. 15 0
      lib/taobao-sdk/top/domain/JSONObject.php
  53. 25 0
      lib/taobao-sdk/top/domain/MSCServiceInfoDTO.php
  54. 20 0
      lib/taobao-sdk/top/domain/Model.php
  55. 80 0
      lib/taobao-sdk/top/domain/OcrSealDrugReportDTO.php
  56. 70 0
      lib/taobao-sdk/top/domain/OnenetDrugInfoDTO.php
  57. 135 0
      lib/taobao-sdk/top/domain/OnenetDrugReportTopDTO.php
  58. 20 0
      lib/taobao-sdk/top/domain/OnenetOcrPdfDTO.php
  59. 35 0
      lib/taobao-sdk/top/domain/OnenetTaskDTO.php
  60. 15 0
      lib/taobao-sdk/top/domain/OperationInfoMap.php
  61. 130 0
      lib/taobao-sdk/top/domain/PEntParDTO.php
  62. 20 0
      lib/taobao-sdk/top/domain/PUserEntDto.php
  63. 105 0
      lib/taobao-sdk/top/domain/PUserEntInfoDTO.php
  64. 30 0
      lib/taobao-sdk/top/domain/Page.php
  65. 20 0
      lib/taobao-sdk/top/domain/PageInfoDTO.php
  66. 15 0
      lib/taobao-sdk/top/domain/PkgInfoDto.php
  67. 30 0
      lib/taobao-sdk/top/domain/ProduceInfoDto.php
  68. 20 0
      lib/taobao-sdk/top/domain/ResData.php
  69. 95 0
      lib/taobao-sdk/top/domain/ResDrugDetailInfoDTO.php
  70. 65 0
      lib/taobao-sdk/top/domain/ResPSynonymDTO.php
  71. 30 0
      lib/taobao-sdk/top/domain/Result.php
  72. 30 0
      lib/taobao-sdk/top/domain/ResultModel.php
  73. 20 0
      lib/taobao-sdk/top/domain/SealSignatureDTO.php
  74. 75 0
      lib/taobao-sdk/top/domain/SubTypeList.php
  75. 85 0
      lib/taobao-sdk/top/domain/TopDrugReportOptLog.php
  76. 80 0
      lib/taobao-sdk/top/domain/TopEntAuthProgressDTO.php
  77. 65 0
      lib/taobao-sdk/top/domain/TopEntAuthProgressRefDTO.php
  78. 35 0
      lib/taobao-sdk/top/domain/TopEntInfoReqDto.php
  79. 85 0
      lib/taobao-sdk/top/domain/TopEntInfoRespDto.php
  80. 20 0
      lib/taobao-sdk/top/domain/TopFileDTO.php
  81. 26 0
      lib/taobao-sdk/top/fileTest.php
  82. 163 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadDataerrordiagnosisRequest.php
  83. 47 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadEntlistRequest.php
  84. 63 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadFileacceptretRequest.php
  85. 82 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadGetentdailytaskdtolistRequest.php
  86. 64 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadGetproductxmlRequest.php
  87. 64 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydGetentinfolistRequest.php
  88. 64 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydGetentinfonewRequest.php
  89. 98 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydQueryBillcountRequest.php
  90. 98 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydQueryUpoutbillcountRequest.php
  91. 81 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydSaveentRequest.php
  92. 197 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydSearchbillRequest.php
  93. 229 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscBillSearchstatusRequest.php
  94. 65 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscBillinDetailwithcodeRequest.php
  95. 65 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscBilloutDetailwithcodesRequest.php
  96. 163 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscDrugtableRequest.php
  97. 65 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetbyentidRequest.php
  98. 65 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetbyrefentidRequest.php
  99. 65 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetentinfoRequest.php
  100. 64 0
      lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetentinfolistRequest.php

+ 78 - 0
lib/taobao-sdk/Autoloader.php

@@ -0,0 +1,78 @@
+<?php
+
+class Autoloader{
+  
+  /**
+     * 类库自动加载,写死路径,确保不加载其他文件。
+     * @param string $class 对象类名
+     * @return void
+     */
+    public static function autoload($class) {
+        $name = $class;
+        if(false !== strpos($name,'\\')){
+          $name = strstr($class, '\\', true);
+        }
+        
+        $filename = TOP_AUTOLOADER_PATH."/top/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+
+        $filename = TOP_AUTOLOADER_PATH."/top/request/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+
+        $filename = TOP_AUTOLOADER_PATH."/top/domain/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+
+        $filename = TOP_AUTOLOADER_PATH."/aliyun/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+
+        $filename = TOP_AUTOLOADER_PATH."/aliyun/request/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+
+        $filename = TOP_AUTOLOADER_PATH."/aliyun/domain/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }      
+
+        $filename = TOP_AUTOLOADER_PATH."/dingtalk/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+        $filename = TOP_AUTOLOADER_PATH."/dingtalk/request/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+
+        $filename = TOP_AUTOLOADER_PATH."/dingtalk/domain/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }         
+		
+		$filename = TOP_AUTOLOADER_PATH."/QimenCloud/top/request/".$name.".php";
+        if(is_file($filename)) {
+            include $filename;
+            return;
+        }
+    }
+}
+
+spl_autoload_register('Autoloader::autoload');
+?>

+ 12 - 0
lib/taobao-sdk/OapiTest.php

@@ -0,0 +1,12 @@
+<?php
+include "TopSdk.php";
+date_default_timezone_set('Asia/Shanghai');
+
+$c = new DingTalkClient(DingTalkConstant::$CALL_TYPE_OAPI, DingTalkConstant::$METHOD_POST , DingTalkConstant::$FORMAT_JSON);
+$req = new OapiMediaUploadRequest;
+$req->setType("image");
+$req->setMedia(array('type'=>'application/octet-stream','filename'=>'image.png', 'content' => file_get_contents('/Users/test/image.png')));
+$resp=$c->execute($req, "******","https://oapi.dingtalk.com/media/upload");
+var_dump($resp)
+
+?>

+ 384 - 0
lib/taobao-sdk/QimenCloud/QimenCloudClient.php

@@ -0,0 +1,384 @@
+<?php
+class QimenCloudClient
+{
+	public $appkey;
+
+	public $secretKey;
+	
+	public $targetAppkey = "";
+
+	public $gatewayUrl = null;
+
+	public $format = "xml";
+
+	public $connectTimeout;
+
+	public $readTimeout;
+
+	/** 是否打开入参check**/
+	public $checkRequest = true;
+
+	protected $signMethod = "md5";
+
+	protected $apiVersion = "2.0";
+
+	protected $sdkVersion = "top-sdk-php-20151012";
+
+	public function getAppkey()
+	{
+		return $this->appkey;
+	}
+
+	public function __construct($appkey = "",$secretKey = ""){
+		$this->appkey = $appkey;
+		$this->secretKey = $secretKey ;
+	}
+
+	protected function generateSign($params)
+	{
+		ksort($params);
+
+		$stringToBeSigned = $this->secretKey;
+		foreach ($params as $k => $v)
+		{
+			if(!is_array($v) && "@" != substr($v, 0, 1))
+			{
+				$stringToBeSigned .= "$k$v";
+			}
+		}
+		unset($k, $v);
+		$stringToBeSigned .= $this->secretKey;
+
+		return strtoupper(md5($stringToBeSigned));
+	}
+
+	public function curl($url, $postFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		curl_setopt ( $ch, CURLOPT_USERAGENT, "top-sdk-php" );
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+
+		if (is_array($postFields) && 0 < count($postFields))
+		{
+			$postBodyString = "";
+			$postMultipart = false;
+			foreach ($postFields as $k => $v)
+			{
+				if("@" != substr($v, 0, 1))//判断是不是文件上传
+				{
+					$postBodyString .= "$k=" . urlencode($v) . "&"; 
+				}
+				else//文件上传用multipart/form-data,否则用www-form-urlencoded
+				{
+					$postMultipart = true;
+					if(class_exists('\CURLFile')){
+						$postFields[$k] = new \CURLFile(substr($v, 1));
+					}
+				}
+			}
+			unset($k, $v);
+			curl_setopt($ch, CURLOPT_POST, true);
+			if ($postMultipart)
+			{
+				if (class_exists('\CURLFile')) {
+				    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
+				} else {
+				    if (defined('CURLOPT_SAFE_UPLOAD')) {
+				        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
+				    }
+				}
+				curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
+			}
+			else
+			{
+				$header = array("content-type: application/x-www-form-urlencoded; charset=UTF-8");
+				curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
+				curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));
+			}
+		}
+		$reponse = curl_exec($ch);
+		
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		else
+		{
+			$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+			if (200 !== $httpStatusCode)
+			{
+				throw new Exception($reponse,$httpStatusCode);
+			}
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+	public function curl_with_memory_file($url, $postFields = null, $fileFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		curl_setopt ( $ch, CURLOPT_USERAGENT, "top-sdk-php" );
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+		//生成分隔符
+		$delimiter = '-------------' . uniqid();
+		//先将post的普通数据生成主体字符串
+		$data = '';
+		if($postFields != null){
+			foreach ($postFields as $name => $content) {
+			    $data .= "--" . $delimiter . "\r\n";
+			    $data .= 'Content-Disposition: form-data; name="' . $name . '"';
+			    //multipart/form-data 不需要urlencode,参见 http:stackoverflow.com/questions/6603928/should-i-url-encode-post-data
+			    $data .= "\r\n\r\n" . $content . "\r\n";
+			}
+			unset($name,$content);
+		}
+
+		//将上传的文件生成主体字符串
+		if($fileFields != null){
+			foreach ($fileFields as $name => $file) {
+			    $data .= "--" . $delimiter . "\r\n";
+			    $data .= 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $file['name'] . "\" \r\n";
+			    $data .= 'Content-Type: ' . $file['type'] . "\r\n\r\n";//多了个文档类型
+
+			    $data .= $file['content'] . "\r\n";
+			}
+			unset($name,$file);
+		}
+		//主体结束的分隔符
+		$data .= "--" . $delimiter . "--";
+
+		curl_setopt($ch, CURLOPT_POST, true);
+		curl_setopt($ch, CURLOPT_HTTPHEADER , array(
+		    'Content-Type: multipart/form-data; boundary=' . $delimiter,
+		    'Content-Length: ' . strlen($data))
+		); 
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+
+		$reponse = curl_exec($ch);
+		unset($data);
+
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		else
+		{
+			$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+			if (200 !== $httpStatusCode)
+			{
+				throw new Exception($reponse,$httpStatusCode);
+			}
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+
+	protected function logCommunicationError($apiName, $requestUrl, $errorCode, $responseTxt)
+	{
+		$localIp = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI";
+		$logger = new TopLogger;
+		$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_comm_err_" . $this->appkey . "_" . date("Y-m-d") . ".log";
+		$logger->conf["separator"] = "^_^";
+		$logData = array(
+		date("Y-m-d H:i:s"),
+		$apiName,
+		$this->appkey,
+		$localIp,
+		PHP_OS,
+		$this->sdkVersion,
+		$requestUrl,
+		$errorCode,
+		str_replace("\n","",$responseTxt)
+		);
+		$logger->log($logData);
+	}
+
+	public function execute($request, $session = null,$bestUrl = null)
+	{
+		if($this->gatewayUrl == null) {
+			throw new Exception("client-check-error:Need Set gatewayUrl.", 40);
+		}
+
+		$result =  new ResultSet(); 
+		if($this->checkRequest) {
+			try {
+				$request->check();
+			} catch (Exception $e) {
+
+				$result->code = $e->getCode();
+				$result->msg = $e->getMessage();
+				return $result;
+			}
+		}
+		//组装系统参数
+		$sysParams["app_key"] = $this->appkey;
+		$sysParams["v"] = $this->apiVersion;
+		$sysParams["format"] = $this->format;
+		$sysParams["sign_method"] = $this->signMethod;
+		$sysParams["method"] = $request->getApiMethodName();
+		$sysParams["timestamp"] = date("Y-m-d H:i:s");
+		$sysParams["target_app_key"] = $this->targetAppkey;
+		if (null != $session)
+		{
+			$sysParams["session"] = $session;
+		}
+		$apiParams = array();
+		//获取业务参数
+		$apiParams = $request->getApiParas();
+
+
+		//系统参数放入GET请求串
+		if($bestUrl){
+			$requestUrl = $bestUrl."?";
+			$sysParams["partner_id"] = $this->getClusterTag();
+		}else{
+			$requestUrl = $this->gatewayUrl."?";
+			$sysParams["partner_id"] = $this->sdkVersion;
+		}
+		//签名
+		$sysParams["sign"] = $this->generateSign(array_merge($apiParams, $sysParams));
+
+		foreach ($sysParams as $sysParamKey => $sysParamValue)
+		{
+			// if(strcmp($sysParamKey,"timestamp") != 0)
+			$requestUrl .= "$sysParamKey=" . urlencode($sysParamValue) . "&";
+		}
+
+		$fileFields = array();
+		foreach ($apiParams as $key => $value) {
+			if(is_array($value) && array_key_exists('type',$value) && array_key_exists('content',$value) ){
+				$value['name'] = $key;
+				$fileFields[$key] = $value;
+				unset($apiParams[$key]);
+			}
+		}
+
+		// $requestUrl .= "timestamp=" . urlencode($sysParams["timestamp"]) . "&";
+		$requestUrl = substr($requestUrl, 0, -1);
+
+		//发起HTTP请求
+		try
+		{
+			if(count($fileFields) > 0){
+				$resp = $this->curl_with_memory_file($requestUrl, $apiParams, $fileFields);
+			}else{
+				$resp = $this->curl($requestUrl, $apiParams);
+			}
+		}
+		catch (Exception $e)
+		{
+			$this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_ERROR_" . $e->getCode(),$e->getMessage());
+			$result->code = $e->getCode();
+			$result->msg = $e->getMessage();
+			return $result;
+		}
+
+		unset($apiParams);
+		unset($fileFields);
+		//解析TOP返回结果
+		$respWellFormed = false;
+		if ("json" == $this->format)
+		{
+			$respObject = json_decode($resp);
+			if (null !== $respObject)
+			{
+				$respWellFormed = true;
+				foreach ($respObject as $propKey => $propValue)
+				{
+					$respObject = $propValue;
+				}
+			}
+		}
+		else if("xml" == $this->format)
+		{
+			$respObject = @simplexml_load_string($resp);
+			if (false !== $respObject)
+			{
+				$respWellFormed = true;
+			}
+		}
+
+		//返回的HTTP文本不是标准JSON或者XML,记下错误日志
+		if (false === $respWellFormed)
+		{
+			$this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_RESPONSE_NOT_WELL_FORMED",$resp);
+			$result->code = 0;
+			$result->msg = "HTTP_RESPONSE_NOT_WELL_FORMED";
+			return $result;
+		}
+
+		//如果TOP返回了错误码,记录到业务错误日志中
+		if (isset($respObject->code))
+		{
+			$logger = new TopLogger;
+			$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_biz_err_" . $this->appkey . "_" . date("Y-m-d") . ".log";
+			$logger->log(array(
+				date("Y-m-d H:i:s"),
+				$resp
+			));
+		}
+		return $respObject;
+	}
+
+	public function exec($paramsArray)
+	{
+		if (!isset($paramsArray["method"]))
+		{
+			trigger_error("No api name passed");
+		}
+		$inflector = new LtInflector;
+		$inflector->conf["separator"] = ".";
+		$requestClassName = ucfirst($inflector->camelize(substr($paramsArray["method"], 7))) . "Request";
+		if (!class_exists($requestClassName))
+		{
+			trigger_error("No such api: " . $paramsArray["method"]);
+		}
+
+		$session = isset($paramsArray["session"]) ? $paramsArray["session"] : null;
+
+		$req = new $requestClassName;
+		foreach($paramsArray as $paraKey => $paraValue)
+		{
+			$inflector->conf["separator"] = "_";
+			$setterMethodName = $inflector->camelize($paraKey);
+			$inflector->conf["separator"] = ".";
+			$setterMethodName = "set" . $inflector->camelize($setterMethodName);
+			if (method_exists($req, $setterMethodName))
+			{
+				$req->$setterMethodName($paraValue);
+			}
+		}
+		return $this->execute($req, $session);
+	}
+
+	private function getClusterTag()
+    {
+	    return substr($this->sdkVersion,0,11)."-cluster".substr($this->sdkVersion,11);
+    }
+}

+ 40 - 0
lib/taobao-sdk/TopSdk.php

@@ -0,0 +1,40 @@
+<?php
+/**
+ * TOP SDK 入口文件
+ * 请不要修改这个文件,除非你知道怎样修改以及怎样恢复
+ * @author xuteng.xt
+ */
+
+/**
+ * 定义常量开始
+ * 在include("TopSdk.php")之前定义这些常量,不要直接修改本文件,以利于升级覆盖
+ */
+/**
+ * SDK工作目录
+ * 存放日志,TOP缓存数据
+ */
+if (!defined("TOP_SDK_WORK_DIR"))
+{
+	define("TOP_SDK_WORK_DIR", "/tmp/");
+}
+
+/**
+ * 是否处于开发模式
+ * 在你自己电脑上开发程序的时候千万不要设为false,以免缓存造成你的代码修改了不生效
+ * 部署到生产环境正式运营后,如果性能压力大,可以把此常量设定为false,能提高运行速度(对应的代价就是你下次升级程序时要清一下缓存)
+ */
+if (!defined("TOP_SDK_DEV_MODE"))
+{
+	define("TOP_SDK_DEV_MODE", true);
+}
+
+if (!defined("TOP_AUTOLOADER_PATH"))
+{
+	define("TOP_AUTOLOADER_PATH", dirname(__FILE__));
+}
+
+/**
+* 注册autoLoader,此注册autoLoader只加载top文件
+* 不要删除,除非你自己加载文件。
+**/
+require("Autoloader.php");

+ 255 - 0
lib/taobao-sdk/aliyun/AliyunClient.php

@@ -0,0 +1,255 @@
+<?php
+class AliyunClient
+{
+	public $accessKeyId;
+
+	public $accessKeySecret;
+
+	public $serverUrl = "http://ecs.aliyuncs.com/";
+
+	public $format = "json";
+
+	public $connectTimeout = 3000;//3秒
+
+	public $readTimeout = 80000;//80秒
+
+	/** 是否打开入参check**/
+	public $checkRequest = true;
+
+	protected $signatureMethod = "HMAC-SHA1";
+
+	protected $signatureVersion = "1.0";
+	
+    protected  $dateTimeFormat = 'Y-m-d\TH:i:s\Z'; // ISO8601规范
+	
+	protected $sdkVersion = "1.0";
+
+	public function execute($request)
+	{
+		if($this->checkRequest) {
+			try {
+				$request->check();
+			} catch (Exception $e) {
+				$result->code = $e->getCode();
+				$result->message = $e->getMessage();
+				return $result;
+			}
+		}
+		//获取业务参数
+		$apiParams = $request->getApiParas();
+		//组装系统参数
+		$apiParams["AccessKeyId"] = $this->accessKeyId;
+		$apiParams["Format"] = $this->format;//
+		$apiParams["SignatureMethod"] = $this->signatureMethod;
+		$apiParams["SignatureVersion"] = $this->signatureVersion;
+		$apiParams["SignatureNonce"] = uniqid();
+		date_default_timezone_set("GMT");
+		$apiParams["TimeStamp"] = date($this->dateTimeFormat);
+		$apiParams["partner_id"] = $this->sdkVersion;
+		
+	    $apiNameArray =	split("\.", $request->getApiMethodName());
+		$apiParams["Action"] = $apiNameArray[3];
+		$apiParams["Version"] = $apiNameArray[4];
+		//签名
+		$apiParams["Signature"] = $this->computeSignature($apiParams, $this->accessKeySecret);
+
+		//系统参数放入GET请求串
+		$requestUrl = rtrim($this->serverUrl,"/") . "/?";
+		foreach ($apiParams as $apiParamKey => $apiParamValue)
+		{
+			$requestUrl .= "$apiParamKey=" . urlencode($apiParamValue) . "&";
+		}
+		$requestUrl = substr($requestUrl, 0, -1);
+		//发起HTTP请求
+		try
+		{
+			$resp = $this->curl($requestUrl, null);
+		}
+		catch (Exception $e)
+		{
+			$this->logCommunicationError($apiParams["Action"],$requestUrl,"HTTP_ERROR_" . $e->getCode(),$e->getMessage());
+			if ("json" == $this->format)
+			{
+				return  json_decode($e->getMessage());
+			}
+			else if("xml" == $this->format)
+			{
+				return  @simplexml_load_string($e->getMessage());
+			}
+	    }
+
+		//解析API返回结果
+		$respWellFormed = false;
+		if ("json" == $this->format)
+		{
+			$respObject = json_decode($resp);
+			if (null !== $respObject)
+			{
+				$respWellFormed = true;
+			}
+		}
+		else if("xml" == $this->format)
+		{
+			$respObject = @simplexml_load_string($resp);
+			if (false !== $respObject)
+			{
+				$respWellFormed = true;
+			}
+		}
+
+		//返回的HTTP文本不是标准JSON或者XML,记下错误日志
+		if (false === $respWellFormed)
+		{
+			$this->logCommunicationError($apiParams["Action"],$requestUrl,"HTTP_RESPONSE_NOT_WELL_FORMED",$resp);
+			$result->code = 0;
+			$result->message = "HTTP_RESPONSE_NOT_WELL_FORMED";
+			return $result;
+		}
+
+		//如果TOP返回了错误码,记录到业务错误日志中
+		if (isset($respObject->code))
+		{
+			$logger = new LtLogger;
+			$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_biz_err_" . $this->appkey . "_" . date("Y-m-d") . ".log";
+			$logger->log(array(
+				date("Y-m-d H:i:s"),
+				$resp
+			));
+		}
+		return $respObject;
+	}
+
+	public function exec($paramsArray)
+	{
+		if (!isset($paramsArray["Action"]))
+		{
+			trigger_error("No api name passed");
+		}
+		$inflector = new LtInflector;
+		$inflector->conf["separator"] = ".";
+		$requestClassName = ucfirst($inflector->camelize(substr($paramsArray["Action"], 7))) . "Request";
+		if (!class_exists($requestClassName))
+		{
+			trigger_error("No such api: " . $paramsArray["Action"]);
+		}
+
+		$req = new $requestClassName;
+		foreach($paramsArray as $paraKey => $paraValue)
+		{
+			$inflector->conf["separator"] = "_";
+			$setterMethodName = $inflector->camelize($paraKey);
+			$inflector->conf["separator"] = ".";
+			$setterMethodName = "set" . $inflector->camelize($setterMethodName);
+			if (method_exists($req, $setterMethodName))
+			{
+				$req->$setterMethodName($paraValue);
+			}
+		}
+		return $this->execute($req, $session);
+	}
+	
+	protected function percentEncode($str)
+	{
+	    // 使用urlencode编码后,将"+","*","%7E"做替换即满足 API规定的编码规范
+	    $res = urlencode($str);
+	    $res = preg_replace('/\+/', '%20', $res);
+	    $res = preg_replace('/\*/', '%2A', $res);
+	    $res = preg_replace('/%7E/', '~', $res);
+	    return $res;
+	}
+	
+	protected function computeSignature($parameters, $accessKeySecret)
+	{
+	    // 将参数Key按字典顺序排序
+	    ksort($parameters);
+	
+	    // 生成规范化请求字符串
+	    $canonicalizedQueryString = '';
+	    foreach($parameters as $key => $value)
+	    {
+		$canonicalizedQueryString .= '&' . $this->percentEncode($key) 
+		    . '=' . $this->percentEncode($value);
+	    }
+	
+	    // 生成用于计算签名的字符串 stringToSign
+	    $stringToSign = 'GET&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1));
+	
+	    // 计算签名,注意accessKeySecret后面要加上字符'&'
+	    $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
+	    return $signature;
+	}
+	
+    public function curl($url, $postFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+
+		if (is_array($postFields) && 0 < count($postFields))
+		{
+			$postBodyString = "";
+			$postMultipart = false;
+			foreach ($postFields as $k => $v)
+			{
+				if("@" != substr($v, 0, 1))//判断是不是文件上传
+				{
+					$postBodyString .= "$k=" . urlencode($v) . "&"; 
+				}
+				else//文件上传用multipart/form-data,否则用www-form-urlencoded
+				{
+					$postMultipart = true;
+				}
+			}
+			unset($k, $v);
+			curl_setopt($ch, CURLOPT_POST, true);
+			if ($postMultipart)
+			{
+				curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
+			}
+			else
+			{
+				curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));
+			}
+		}
+		$reponse = curl_exec($ch);
+		
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+
+	protected function logCommunicationError($apiName, $requestUrl, $errorCode, $responseTxt)
+	{
+		$localIp = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI";
+		$logger = new LtLogger;
+		$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_comm_err_" . $this->accessKeyId . "_" . date("Y-m-d") . ".log";
+		$logger->conf["separator"] = "^_^";
+		$logData = array(
+		date("Y-m-d H:i:s"),
+		$apiName,
+		$this->accessKeyId,
+		$localIp,
+		PHP_OS,
+		$this->sdkVersion,
+		$requestUrl,
+		$errorCode,
+		str_replace("\n","",$responseTxt)
+		);
+		$logger->log($logData);
+	}
+}

+ 656 - 0
lib/taobao-sdk/dingtalk/DingTalkClient.php

@@ -0,0 +1,656 @@
+<?php
+class DingTalkClient
+{
+	/**@Author chaohui.zch copy from TopClient and modify 2016-12-14 **/
+
+    /**@Author chaohui.zch modify $gatewayUrl 2017-07-18 **/
+    public $gatewayUrl = "https://eco.taobao.com/router/rest";
+
+	public $format = "xml";
+
+	public $connectTimeout;
+
+	public $readTimeout;
+
+    public $apiCallType;
+
+    public $httpMethod;
+
+	/** 是否打开入参check**/
+	public $checkRequest = true;
+
+	protected $apiVersion = "2.0";
+
+	protected $sdkVersion = "dingtalk-sdk-php-20161214";
+
+    public function __construct($apiCallType = null, $httpMethod = null, $format = "xml"){
+        $this->apiCallType = $apiCallType;
+        $this->httpMethod = $httpMethod;
+        $this->format = $format;
+    }
+
+	public function curl($url, $postFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		curl_setopt ( $ch, CURLOPT_USERAGENT, "dingtalk-sdk-php" );
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+
+		if (is_array($postFields) && 0 < count($postFields))
+		{
+			$postBodyString = "";
+			$postMultipart = false;
+			foreach ($postFields as $k => $v)
+			{
+				if("@" != substr($v, 0, 1))//判断是不是文件上传
+				{
+					$postBodyString .= "$k=" . urlencode($v) . "&"; 
+				}
+				else//文件上传用multipart/form-data,否则用www-form-urlencoded
+				{
+					$postMultipart = true;
+					if(class_exists('\CURLFile')){
+						$postFields[$k] = new \CURLFile(substr($v, 1));
+					}
+				}
+			}
+			unset($k, $v);
+			curl_setopt($ch, CURLOPT_POST, true);
+			if ($postMultipart)
+			{
+				if (class_exists('\CURLFile')) {
+				    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
+				} else {
+				    if (defined('CURLOPT_SAFE_UPLOAD')) {
+				        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
+				    }
+				}
+				curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
+			}
+			else
+			{
+				$header = array("content-type: application/x-www-form-urlencoded; charset=UTF-8");
+				curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
+				curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));
+			}
+		}
+		$reponse = curl_exec($ch);
+		
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		else
+		{
+			$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+			if (200 !== $httpStatusCode)
+			{
+				throw new Exception($reponse,$httpStatusCode);
+			}
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+
+    public function curl_get($url,$apiFields = null)
+    {
+        $ch = curl_init();
+
+        foreach ($apiFields as $key => $value)
+        {
+            if(!is_string($value)){
+                $value = json_encode($value);
+            }
+            $url .= "&" ."$key=" . urlencode($value);
+        }
+
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($ch, CURLOPT_FAILONERROR, false);
+        curl_setopt($ch, CURLOPT_HEADER, false);
+        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+
+
+        if ($this->readTimeout)
+        {
+            curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+        }
+
+        if ($this->connectTimeout)
+        {
+            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+        }
+
+        curl_setopt ( $ch, CURLOPT_USERAGENT, "dingtalk-sdk-php" );
+
+        //https ignore ssl check ?
+        if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" )
+        {
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        }
+
+        $reponse = curl_exec($ch);
+
+        if (curl_errno($ch))
+        {
+            throw new Exception(curl_error($ch),0);
+        }
+        else
+        {
+            $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+            if (200 !== $httpStatusCode)
+            {
+                throw new Exception($reponse,$httpStatusCode);
+            }
+        }
+        curl_close($ch);
+        return $reponse;
+    }
+
+    public function curl_json($url, $postFields = null)
+    {
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, $url);
+        curl_setopt($ch, CURLOPT_FAILONERROR, false);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+        if ($this->readTimeout) {
+            curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+        }
+        if ($this->connectTimeout) {
+            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+        }
+        curl_setopt ( $ch, CURLOPT_USERAGENT, "dingtalk-sdk-php" );
+        //https 请求
+        if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+        }
+
+        if (is_array($postFields) && 0 < count($postFields))
+        {
+            $postBodyString = "";
+            $postMultipart = false;
+            foreach ($postFields as $k => $v)
+            {
+                if(!is_string($v)){
+                    $v = json_encode($v);
+                }
+                if("@" != substr($v, 0, 1))//判断是不是文件上传
+                {
+                    $postBodyString .= "$k=" . urlencode($v) . "&";
+                }
+                else//文件上传用multipart/form-data,否则用www-form-urlencoded
+                {
+                    $postMultipart = true;
+                    if(class_exists('\CURLFile')){
+                        $postFields[$k] = new \CURLFile(substr($v, 1));
+                    }
+                }
+            }
+            unset($k, $v);
+            curl_setopt($ch, CURLOPT_POST, true);
+            if ($postMultipart)
+            {
+                if (class_exists('\CURLFile')) {
+                    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
+                } else {
+                    if (defined('CURLOPT_SAFE_UPLOAD')) {
+                        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
+                    }
+                }
+                curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
+            }
+            else {
+                $header = array("Content-Type: application/json; charset=utf-8", "Content-Length:".strlen(json_encode($postFields)));
+                curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
+                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postFields));
+            }
+        }
+        $reponse = curl_exec($ch);
+
+        if (curl_errno($ch))
+        {
+            throw new Exception(curl_error($ch),0);
+        }
+        else
+        {
+            $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+            if (200 !== $httpStatusCode)
+            {
+                throw new Exception($reponse,$httpStatusCode);
+            }
+        }
+        curl_close($ch);
+        return $reponse;
+    }
+
+	public function curl_with_memory_file($url, $postFields = null, $fileFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		curl_setopt ( $ch, CURLOPT_USERAGENT, "dingtalk-sdk-php" );
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+		//生成分隔符
+		$delimiter = '-------------' . uniqid();
+		//先将post的普通数据生成主体字符串
+		$data = '';
+		if($postFields != null){
+			foreach ($postFields as $name => $content) {
+			    $data .= "--" . $delimiter . "\r\n";
+			    $data .= 'Content-Disposition: form-data; name="' . $name . '"';
+			    //multipart/form-data 不需要urlencode,参见 http:stackoverflow.com/questions/6603928/should-i-url-encode-post-data
+			    $data .= "\r\n\r\n" . $content . "\r\n";
+			}
+			unset($name,$content);
+		}
+
+		//将上传的文件生成主体字符串
+		if($fileFields != null){
+			foreach ($fileFields as $name => $file) {
+			    $data .= "--" . $delimiter . "\r\n";
+			    $data .= 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $file['filename'] . "\" \r\n";
+			    $data .= 'Content-Type: ' . $file['type'] . "\r\n\r\n";//多了个文档类型
+
+			    $data .= $file['content'] . "\r\n";
+			}
+			unset($name,$file);
+		}
+		//主体结束的分隔符
+		$data .= "--" . $delimiter . "--";
+
+		curl_setopt($ch, CURLOPT_POST, true);
+		curl_setopt($ch, CURLOPT_HTTPHEADER , array(
+		    'Content-Type: multipart/form-data; boundary=' . $delimiter,
+		    'Content-Length: ' . strlen($data))
+		); 
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+
+		$reponse = curl_exec($ch);
+		unset($data);
+
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		else
+		{
+			$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+			if (200 !== $httpStatusCode)
+			{
+				throw new Exception($reponse,$httpStatusCode);
+			}
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+
+	protected function logCommunicationError($apiName, $requestUrl, $errorCode, $responseTxt)
+	{
+		$localIp = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI";
+		$logger = new TopLogger;
+		$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_comm_err_" . "_" . date("Y-m-d") . ".log";
+		$logger->conf["separator"] = "^_^";
+		$logData = array(
+		date("Y-m-d H:i:s"),
+		$apiName,
+		$localIp,
+		PHP_OS,
+		$this->sdkVersion,
+		$requestUrl,
+		$errorCode,
+		str_replace("\n","",$responseTxt)
+		);
+		$logger->log($logData);
+	}
+
+    public function execute($request, $session = null,$bestUrl = null){
+        if(DingTalkConstant::$CALL_TYPE_OAPI == $this->apiCallType){
+            return $this->_executeOapi($request, $session, $bestUrl, null, null, null, null);
+        }else{
+            return $this->_execute($request, $session, $bestUrl);
+        }
+    }
+
+    public function executeWithAccessKey($request, $bestUrl = null, $accessKey, $accessSecret){
+        return $this->executeWithCorpId($request, $bestUrl, $accessKey, $accessSecret, null, null);
+    }
+
+    public function executeWithSuiteTicket($request,$bestUrl = null, $accessKey, $accessSecret, $suiteTicket){
+        return $this->executeWithCorpId($request,$bestUrl, $accessKey, $accessSecret, $suiteTicket, null);
+    }
+
+	public function executeWithCorpId($request, $bestUrl = null, $accessKey, $accessSecret, $suiteTicket, $corpId) {
+        if(DingTalkConstant::$CALL_TYPE_OAPI == $this->apiCallType){
+            return $this->_executeOapi($request, null, $bestUrl,$accessKey, $accessSecret, $suiteTicket, $corpId);
+        }else{
+            return $this->_execute($request, null, $bestUrl);
+        }
+    }
+
+    private function _executeOapi($request, $session = null,$bestUrl = null,$accessKey, $accessSecret, $suiteTicket, $corpId){
+        $result =  new ResultSet();
+        if($this->checkRequest) {
+            try {
+                $request->check();
+            } catch (Exception $e) {
+
+                $result->code = $e->getCode();
+                $result->msg = $e->getMessage();
+                return $result;
+            }
+        }
+
+        $sysParams["method"] = $request->getApiMethodName();
+        //系统参数放入GET请求串
+        if($bestUrl){
+            if(strpos($bestUrl,'?') === false){
+                $requestUrl = $bestUrl."?";
+            }else{
+                $requestUrl = $bestUrl;
+            }
+        }else{
+            $requestUrl = $this->gatewayUrl."?";
+        }
+        if(null != $accessKey){
+            $timestamp = $this->getMillisecond();
+            // 验证签名有效性
+            $canonicalString = $this->getCanonicalStringForIsv($timestamp, $suiteTicket);
+            $signature = $this->computeSignature($accessSecret, $canonicalString);
+
+            $queryParams["accessKey"] = $accessKey;
+            $queryParams["signature"] = $signature;
+            $queryParams["timestamp"] = $timestamp+"";
+            if($suiteTicket != null) {
+                $queryParams["suiteTicket"] = $suiteTicket;
+            }
+            if($corpId != null){
+                $queryParams["corpId"] =  $corpId;
+            }
+            foreach ($queryParams as $queryParamKey => $queryParamValue) {
+                $requestUrl .= "$queryParamKey=" . urlencode($queryParamValue) . "&";
+            }
+        }else{
+            $requestUrl .= "access_token=" . urlencode($session) . "&";
+        }
+
+        $apiParams = array();
+        //获取业务参数
+        $apiParams = $request->getApiParas();
+        $fileFields = array();
+        foreach ($apiParams as $key => $value) {
+            if(is_array($value) && array_key_exists('type',$value) && array_key_exists('content',$value) ){
+                $value['name'] = $key;
+                $fileFields[$key] = $value;
+                unset($apiParams[$key]);
+            }
+        }
+
+        // $requestUrl .= "timestamp=" . urlencode($sysParams["timestamp"]) . "&";
+        $requestUrl = substr($requestUrl, 0, -1);
+
+        //发起HTTP请求
+        try
+        {
+            if(count($fileFields) > 0){
+                $resp = $this->curl_with_memory_file($requestUrl, $apiParams, $fileFields);
+            }else{
+                if(DingTalkConstant::$METHOD_POST == $this->httpMethod){
+                    $resp = $this->curl_json($requestUrl, $apiParams);
+                }else{
+                    $resp = $this->curl_get($requestUrl, $apiParams);
+                }
+            }
+        }
+        catch (Exception $e)
+        {
+            $this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_ERROR_" . $e->getCode(),$e->getMessage());
+            $result->code = $e->getCode();
+            $result->msg = $e->getMessage();
+            return $result;
+        }
+
+        unset($apiParams);
+        unset($fileFields);
+        //解析TOP返回结果
+        $respWellFormed = false;
+        if ("json" == $this->format)
+        {
+            $respObject = json_decode($resp);
+            if (null !== $respObject)
+            {
+                $respWellFormed = true;
+            }
+        }
+        else if("xml" == $this->format)
+        {
+            $respObject = @simplexml_load_string($resp);
+            if (false !== $respObject)
+            {
+                $respWellFormed = true;
+            }
+        }
+
+        //返回的HTTP文本不是标准JSON或者XML,记下错误日志
+        if (false === $respWellFormed)
+        {
+            $this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_RESPONSE_NOT_WELL_FORMED",$resp);
+            $result->code = 0;
+            $result->msg = "HTTP_RESPONSE_NOT_WELL_FORMED";
+            return $result;
+        }
+
+        //如果TOP返回了错误码,记录到业务错误日志中
+        if (isset($respObject->code))
+        {
+            $logger = new TopLogger;
+            $logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_biz_err_" .  "_" . date("Y-m-d") . ".log";
+            $logger->log(array(
+                date("Y-m-d H:i:s"),
+                $resp
+            ));
+        }
+        return $respObject;
+    }
+
+    private function getMillisecond() {
+        list($s1, $s2) = explode(' ', microtime());
+        return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
+    }
+
+    private function getCanonicalStringForIsv($timestamp, $suiteTicket) {
+        $result = $timestamp;
+        if($suiteTicket != null) {
+            $result .= "\n".$suiteTicket;
+        }
+        return $result;
+    }
+
+    private function computeSignature($accessSecret, $canonicalString){
+        $s = hash_hmac('sha256', $canonicalString, $accessSecret, true);
+        return base64_encode($s);
+    }
+
+    private function _execute($request, $session = null,$bestUrl = null)
+	{
+		$result =  new ResultSet(); 
+		if($this->checkRequest) {
+			try {
+				$request->check();
+			} catch (Exception $e) {
+
+				$result->code = $e->getCode();
+				$result->msg = $e->getMessage();
+				return $result;
+			}
+		}
+		//组装系统参数
+		$sysParams["v"] = $this->apiVersion;
+		$sysParams["format"] = $this->format;
+		$sysParams["method"] = $request->getApiMethodName();
+		$sysParams["timestamp"] = date("Y-m-d H:i:s");
+		if (null != $session)
+		{
+			$sysParams["session"] = $session;
+		}
+		$apiParams = array();
+		//获取业务参数
+		$apiParams = $request->getApiParas();
+
+
+		//系统参数放入GET请求串
+		if($bestUrl){
+            if(strpos($bestUrl,'?') === false){
+                $requestUrl = $bestUrl."?";
+            }else{
+                $requestUrl = $bestUrl;
+            }
+			$sysParams["partner_id"] = $this->getClusterTag();
+		}else{
+			$requestUrl = $this->gatewayUrl."?";
+			$sysParams["partner_id"] = $this->sdkVersion;
+		}
+
+		foreach ($sysParams as $sysParamKey => $sysParamValue)
+		{
+			// if(strcmp($sysParamKey,"timestamp") != 0)
+			$requestUrl .= "$sysParamKey=" . urlencode($sysParamValue) . "&";
+		}
+
+		$fileFields = array();
+		foreach ($apiParams as $key => $value) {
+			if(is_array($value) && array_key_exists('type',$value) && array_key_exists('content',$value) ){
+				$value['name'] = $key;
+				$fileFields[$key] = $value;
+				unset($apiParams[$key]);
+			}
+		}
+
+		// $requestUrl .= "timestamp=" . urlencode($sysParams["timestamp"]) . "&";
+		$requestUrl = substr($requestUrl, 0, -1);
+
+		//发起HTTP请求
+		try
+		{
+			if(count($fileFields) > 0){
+				$resp = $this->curl_with_memory_file($requestUrl, $apiParams, $fileFields);
+			}else{
+				$resp = $this->curl($requestUrl, $apiParams);
+			}
+		}
+		catch (Exception $e)
+		{
+			$this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_ERROR_" . $e->getCode(),$e->getMessage());
+			$result->code = $e->getCode();
+			$result->msg = $e->getMessage();
+			return $result;
+		}
+
+		unset($apiParams);
+		unset($fileFields);
+		//解析TOP返回结果
+		$respWellFormed = false;
+		if ("json" == $this->format)
+		{
+			$respObject = json_decode($resp);
+			if (null !== $respObject)
+			{
+				$respWellFormed = true;
+				foreach ($respObject as $propKey => $propValue)
+				{
+					$respObject = $propValue;
+				}
+			}
+		}
+		else if("xml" == $this->format)
+		{
+			$respObject = @simplexml_load_string($resp);
+			if (false !== $respObject)
+			{
+				$respWellFormed = true;
+			}
+		}
+
+		//返回的HTTP文本不是标准JSON或者XML,记下错误日志
+		if (false === $respWellFormed)
+		{
+			$this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_RESPONSE_NOT_WELL_FORMED",$resp);
+			$result->code = 0;
+			$result->msg = "HTTP_RESPONSE_NOT_WELL_FORMED";
+			return $result;
+		}
+
+		//如果TOP返回了错误码,记录到业务错误日志中
+		if (isset($respObject->code))
+		{
+			$logger = new TopLogger;
+			$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_biz_err_" .  "_" . date("Y-m-d") . ".log";
+			$logger->log(array(
+				date("Y-m-d H:i:s"),
+				$resp
+			));
+		}
+		return $respObject;
+	}
+
+	public function exec($paramsArray)
+	{
+		if (!isset($paramsArray["method"]))
+		{
+			trigger_error("No api name passed");
+		}
+		$inflector = new LtInflector;
+		$inflector->conf["separator"] = ".";
+		$requestClassName = ucfirst($inflector->camelize(substr($paramsArray["method"], 7))) . "Request";
+		if (!class_exists($requestClassName))
+		{
+			trigger_error("No such dingtalk-api: " . $paramsArray["method"]);
+		}
+
+		$session = isset($paramsArray["session"]) ? $paramsArray["session"] : null;
+
+		$req = new $requestClassName;
+		foreach($paramsArray as $paraKey => $paraValue)
+		{
+			$inflector->conf["separator"] = "_";
+			$setterMethodName = $inflector->camelize($paraKey);
+			$inflector->conf["separator"] = ".";
+			$setterMethodName = "set" . $inflector->camelize($setterMethodName);
+			if (method_exists($req, $setterMethodName))
+			{
+				$req->$setterMethodName($paraValue);
+			}
+		}
+		return $this->execute($req, $session);
+	}
+
+	private function getClusterTag()
+    {
+	    return substr($this->sdkVersion,0,11)."-cluster".substr($this->sdkVersion,11);
+    }
+}

+ 18 - 0
lib/taobao-sdk/dingtalk/DingTalkConstant.php

@@ -0,0 +1,18 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: zuodeng
+ * Date: 2018/7/18
+ * Time: 上午11:31
+ */
+class DingTalkConstant
+{
+    static $CALL_TYPE_OAPI = "oapi";
+    static $CALL_TYPE_TOP = "top";
+
+    static $METHOD_POST = "POST";
+    static $METHOD_GET = "GET";
+
+    static $FORMAT_JSON = "json";
+    static $FORMAT_XML = "xml";
+}

+ 47 - 0
lib/taobao-sdk/top/ApplicationVar.php

@@ -0,0 +1,47 @@
+<?php
+
+class ApplicationVar
+{
+	var $save_file;
+	var $application  = null;
+ 	var $app_data    = '';
+ 	var $__writed    = false;
+
+	function __construct()
+ 	{
+    $this->save_file = __DIR__.'/httpdns.conf' ;
+ 		$this->application = array();
+ 	}
+
+ 	public function setValue($var_name,$var_value)
+  {
+   		if (!is_string($var_name) || empty($var_name))
+    		return false;
+   
+   		$this->application[$var_name] = $var_value;
+  }
+
+  public function write(){
+      $this->app_data = @serialize($this->application);    
+      $this->__writeToFile();
+  }
+
+ 	public function getValue()
+ 	{
+     	if (!is_file($this->save_file))
+        	 $this->__writeToFile();
+     	return @unserialize(@file_get_contents($this->save_file));
+ 	}
+
+ 	function __writeToFile()
+ 	{
+  		$fp = @fopen($this->save_file,"w");
+      if(flock($fp , LOCK_EX | LOCK_NB)){
+          @fwrite($fp,$this->app_data);
+          flock($fp , LOCK_UN);
+      }
+      @fclose($fp);
+ 	}
+}
+
+?>

+ 199 - 0
lib/taobao-sdk/top/ClusterTopClient.php

@@ -0,0 +1,199 @@
+<?php
+class ClusterTopClient extends TopClient {
+
+	private static $dnsconfig;
+	private static $syncDate = 0;
+	private static $applicationVar ;
+	private static $cfgDuration = 10;
+
+	public function __construct($appkey = "",$secretKey = ""){
+		ClusterTopClient::$applicationVar = new ApplicationVar;
+		$this->appkey = $appkey;
+		$this->secretKey = $secretKey ;
+		$saveConfig = ClusterTopClient::$applicationVar->getValue();
+
+		if($saveConfig){
+			$tmpConfig = $saveConfig['dnsconfig'];
+			ClusterTopClient::$dnsconfig = $this->object_to_array($tmpConfig);
+			unset($tmpConfig);
+
+			ClusterTopClient::$syncDate = $saveConfig['syncDate'];
+			if(!ClusterTopClient::$syncDate)
+				ClusterTopClient::$syncDate = 0;
+		}
+	}
+
+	public function __destruct(){
+		if(ClusterTopClient::$dnsconfig && ClusterTopClient::$syncDate){
+			ClusterTopClient::$applicationVar->setValue("dnsconfig",ClusterTopClient::$dnsconfig);
+			ClusterTopClient::$applicationVar->setValue("syncDate",ClusterTopClient::$syncDate);
+			ClusterTopClient::$applicationVar->write();
+		}
+	}
+
+	public function execute($request = null, $session = null,$bestUrl = null){
+		$currentDate = date('U');
+		$syncDuration = $this->getDnsConfigSyncDuration();
+		$bestUrl = $this->getBestVipUrl($this->gatewayUrl,$request->getApiMethodName(),$session);
+		if($currentDate - ClusterTopClient::$syncDate > $syncDuration * 60){
+			$httpdns = new HttpdnsGetRequest;
+			ClusterTopClient::$dnsconfig = json_decode(parent::execute($httpdns,null,$bestUrl)->result,true);
+			$syncDate = date('U');
+			ClusterTopClient::$syncDate = $syncDate ;
+		}
+		return parent::execute($request,$session,$bestUrl);
+	}
+
+	private function getDnsConfigSyncDuration(){
+		if(ClusterTopClient::$cfgDuration){
+			return ClusterTopClient::$cfgDuration;
+		}
+		if(!ClusterTopClient::$dnsconfig){
+			return ClusterTopClient::$cfgDuration;
+		}
+		$config = json_encode(ClusterTopClient::$dnsconfig);
+		if(!$config){
+			return ClusterTopClient::$cfgDuration;
+		}
+		$config = ClusterTopClient::$dnsconfig['config'];
+		$duration = $config['interval'];
+		ClusterTopClient::$cfgDuration = $duration;
+
+		return ClusterTopClient::$cfgDuration;
+	}
+
+	private function getBestVipUrl($url,$apiname = null,$session = null){
+		$config = ClusterTopClient::$dnsconfig['config'];
+		$degrade = $config['degrade'];
+		if(strcmp($degrade,'true') == 0){
+			return $url;
+		}		
+		$currentEnv = $this->getEnvByApiName($apiname,$session);
+		$vip = $this->getVipByEnv($url,$currentEnv);
+		if($vip)
+			return $vip;
+		return $url;
+	}
+
+	private function getVipByEnv($comUrl,$currentEnv){
+		$urlSchema = parse_url($comUrl);
+		if(!$urlSchema)
+			return null;
+		if(!ClusterTopClient::$dnsconfig['env'])
+			return null;
+		
+		if(!array_key_exists($currentEnv,ClusterTopClient::$dnsconfig['env']))
+			return null;
+
+		$hostList = ClusterTopClient::$dnsconfig['env'][$currentEnv];
+		if(!$hostList)
+			return null ;
+
+		$vipList = null;
+		foreach ($hostList as $key => $value) {
+			if(strcmp($key,$urlSchema['host']) == 0 && strcmp($value['proto'],$urlSchema['scheme']) == 0){
+				$vipList = $value;
+				break;
+			}
+		}
+		$vip = $this->getRandomWeightElement($vipList['vip']);
+		
+		if($vip){
+			return $urlSchema['scheme']."://".$vip.$urlSchema['path'];
+		}
+		return null;
+	}
+
+	private function getEnvByApiName($apiName,$session=""){
+		$apiCfgArray = ClusterTopClient::$dnsconfig['api'];
+		if($apiCfgArray){	
+			if(array_key_exists($apiName,$apiCfgArray)){
+				$apiCfg = $apiCfgArray[$apiName];
+				if(array_key_exists('user',$apiCfg)){
+					$userFlag = $apiCfg['user'];
+					$flag = $this->getUserFlag($session);
+					if($userFlag && $flag ){
+						return $this->getEnvBySessionFlag($userFlag,$flag);
+					}else{
+						return $this->getRandomWeightElement($apiCfg['rule']);
+					}
+				}
+			}
+		}
+		return $this->getDeafultEnv();
+	}
+
+	private function getUserFlag($session){
+		if($session && strlen($session) > 5){
+			if($session[0] == '6' || $session[0] == '7'){
+				return $session[strlen($session) -1];
+			}else if($session[0] == '5' || $session[0] == '8'){
+				return $session[5];
+			}
+		}
+		return null;
+	}
+
+	private function getEnvBySessionFlag($targetConfig,$flag){
+		if($flag){
+			$userConf = ClusterTopClient::$dnsconfig['user'];
+			$cfgArry = $userConf[$targetConfig];
+			foreach ($cfgArry as $key => $value) {
+				if(in_array($flag,$value))
+					return $key;
+			}
+		}else{
+			return null;
+		}
+	}
+
+	private function getRandomWeightElement($elements){
+		$totalWeight = 0;
+		if($elements){
+			foreach ($elements as $ele) {
+				$weight = $this->getElementWeight($ele);
+				$r = $this->randomFloat() * ($weight + $totalWeight);
+				if($r >= $totalWeight){
+					$selected = $ele;
+				}
+				$totalWeight += $weight;
+			}
+			if($selected){
+				return $this->getElementValue($selected);
+			}
+		}
+		return null;
+
+	}
+
+	private function getElementWeight($ele){
+		$params = explode('|', $ele);
+		return floatval($params[1]);
+	}
+	private function getElementValue($ele){
+		$params = explode('|', $ele);
+		return $params[0];		
+	}
+
+	private function getDeafultEnv(){
+		return ClusterTopClient::$dnsconfig['config']['def_env'];
+	}
+
+	private static function startsWith($haystack, $needle) {
+    	return $needle === "" || strpos($haystack, $needle) === 0;
+	}
+
+	private function object_to_array($obj) 
+	{ 
+    	$_arr= is_object($obj) ? get_object_vars($obj) : $obj; 
+    	foreach($_arr as $key=> $val) 
+    	{ 
+        	$val= (is_array($val) || is_object($val))? $this->object_to_array($val) : $val; 
+        	$arr[$key] = $val; 
+    	} 
+    	return$arr; 
+	}
+
+	private function randomFloat($min = 0, $max = 1) { return $min + mt_rand() / mt_getrandmax() * ($max - $min); }
+}
+?>

+ 23 - 0
lib/taobao-sdk/top/HttpdnsGetRequest.php

@@ -0,0 +1,23 @@
+<?php
+
+class HttpdnsGetRequest
+{
+	private $apiParas = array();
+	
+	public function getApiMethodName()
+	{
+		return "taobao.httpdns.get";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check(){}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 107 - 0
lib/taobao-sdk/top/RequestCheckUtil.php

@@ -0,0 +1,107 @@
+<?php
+/**
+ * API入参静态检查类
+ * 可以对API的参数类型、长度、最大值等进行校验
+ *
+ **/
+class RequestCheckUtil
+{
+	/**
+	 * 校验字段 fieldName 的值$value非空
+	 *
+	 **/
+	public static function checkNotNull($value,$fieldName) {
+		
+		if(self::checkEmpty($value)){
+			throw new Exception("client-check-error:Missing Required Arguments: " .$fieldName , 40);
+		}
+	}
+
+	/**
+	 * 检验字段fieldName的值value 的长度
+	 *
+	 **/
+	public static function checkMaxLength($value,$maxLength,$fieldName){		
+		if(!self::checkEmpty($value) && mb_strlen($value , "UTF-8") > $maxLength){
+			throw new Exception("client-check-error:Invalid Arguments:the length of " .$fieldName . " can not be larger than " . $maxLength . "." , 41);
+		}
+	}
+
+	/**
+	 * 检验字段fieldName的值value的最大列表长度
+	 *
+	 **/
+	public static function checkMaxListSize($value,$maxSize,$fieldName) {	
+
+		if(self::checkEmpty($value))
+			return ;
+
+		$list=preg_split("/,/",$value);
+		if(count($list) > $maxSize){
+				throw new Exception("client-check-error:Invalid Arguments:the listsize(the string split by \",\") of ". $fieldName . " must be less than " . $maxSize . " ." , 41);
+		}
+	}
+
+	/**
+	 * 检验字段fieldName的值value 的最大值
+	 *
+	 **/
+	public static function checkMaxValue($value,$maxValue,$fieldName){	
+
+		if(self::checkEmpty($value))
+			return ;
+
+		self::checkNumeric($value,$fieldName);
+
+		if($value > $maxValue){
+				throw new Exception("client-check-error:Invalid Arguments:the value of " . $fieldName . " can not be larger than " . $maxValue ." ." , 41);
+		}
+	}
+
+	/**
+	 * 检验字段fieldName的值value 的最小值
+	 *
+	 **/
+	public static function checkMinValue($value,$minValue,$fieldName) {
+		
+		if(self::checkEmpty($value))
+			return ;
+
+		self::checkNumeric($value,$fieldName);
+		
+		if($value < $minValue){
+				throw new Exception("client-check-error:Invalid Arguments:the value of " . $fieldName . " can not be less than " . $minValue . " ." , 41);
+		}
+	}
+
+	/**
+	 * 检验字段fieldName的值value是否是number
+	 *
+	 **/
+	protected static function checkNumeric($value,$fieldName) {
+		if(!is_numeric($value))
+			throw new Exception("client-check-error:Invalid Arguments:the value of " . $fieldName . " is not number : " . $value . " ." , 41);
+	}
+
+	/**
+	 * 校验$value是否非空
+	 *  if not set ,return true;
+	 *	if is null , return true;
+	 *	
+	 *
+	 **/
+	public static function checkEmpty($value) {
+		if(!isset($value))
+			return true ;
+		if($value === null )
+			return true;
+		if(is_array($value) && count($value) == 0)
+			return true;
+		if(is_string($value) &&trim($value) === "")
+			return true;
+		
+		return false;
+	}
+
+}
+?>

+ 21 - 0
lib/taobao-sdk/top/ResultSet.php

@@ -0,0 +1,21 @@
+<?php
+/**
+ * 返回的默认类
+ * 
+ * @author auto create
+ * @since 1.0, 2015-01-20
+ */
+class ResultSet
+{
+	
+	/** 
+	 * 返回的错误码
+	 **/
+	public $code;
+	
+	/** 
+	 * 返回的错误信息
+	 **/
+	public $msg;
+	
+}

+ 219 - 0
lib/taobao-sdk/top/SpiUtils.php

@@ -0,0 +1,219 @@
+<?php
+class SpiUtils{
+	private static $top_sign_list = "HTTP_TOP_SIGN_LIST";
+	private static $timestamp = "timestamp";
+	private static $header_real_ip = array("X_Real_IP", "X_Forwarded_For", "Proxy_Client_IP",
+											"WL_Proxy_Client_IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR");
+	/**
+	 * 校验SPI请求签名,适用于所有GET请求,及不包含文件参数的POST请求。
+	 * 
+	 * @param request 请求对象
+	 * @param secret app对应的secret
+	 * @return true:校验通过;false:校验不通过
+	 */
+	public static function checkSign4FormRequest($secret){
+		return self::checkSign(null,null,$secret);
+	}
+
+	/**
+	 * 校验SPI请求签名,适用于请求体是xml/json等可用文本表示的POST请求。
+	 * 
+	 * @param request 请求对象
+	 * @param body 请求体的文本内容
+	 * @param secret app对应的secret
+	 * @return true:校验通过;false:校验不通过
+	 */
+	public static function checkSign4TextRequest($body,$secret){
+		return self::checkSign(null,$body,$secret);
+	}
+	
+	/**
+	 * 校验SPI请求签名,适用于带文件上传的POST请求。
+	 * 
+	 * @param request 请求对象
+	 * @param form 除了文件参数以外的所有普通文本参数的map集合
+	 * @param secret app对应的secret
+	 * @return true:校验通过;false:校验不通过
+	 */
+	public static function checkSign4FileRequest($form, $secret){
+		return self::checkSign($form, null, $secret);
+	}
+
+	private static function checkSign($form, $body, $secret) {
+		$params = array();
+		// 1. 获取header参数
+		$headerMap = self::getHeaderMap();
+		foreach ($headerMap as $k => $v){
+			$params[$k] = $v ;
+		}
+
+		// 2. 获取url参数
+		$queryMap = self::getQueryMap();
+		foreach ($queryMap as $k => $v){
+			$params[$k] = $v ;
+		}
+
+		// 3. 获取form参数
+		if ($form == null && $body == null) {
+			$formMap = self::getFormMap();
+			foreach ($formMap as $k => $v){
+				$params[$k] = $v ;
+			}
+		} else if ($form != null) {
+			foreach ($form as $k => $v){
+				$params[$k] = $v ;
+			}
+		}
+
+		if($body == null){
+			$body = file_get_contents('php://input');
+		}
+
+		$remoteSign = $queryMap["sign"];
+		$localSign = self::sign($params, $body, $secret);
+		if (strcmp($remoteSign, $localSign) == 0) {
+			return true;
+		} else {
+			$paramStr = self::getParamStrFromMap($params);
+			self::logCommunicationError($remoteSign,$localSign,$paramStr,$body);
+			return false;
+		}
+	}
+
+	private static function getHeaderMap() {
+		$headerMap = array();
+		$signList = $_SERVER['HTTP_TOP_SIGN_LIST']; // 只获取参与签名的头部字段
+
+		if(!$signList) {
+			return $headerMap;
+		}
+
+		$signList = trim($signList);
+		if (strlen($signList) > 0){
+			$params = split(",", $signList);
+			foreach ($_SERVER as $k => $v){
+				if (substr($k, 0, 5) == 'HTTP_'){
+					foreach($params as $kk){
+						$upperkey = strtoupper($kk);
+						if(self::endWith($k,$upperkey)){
+							$headerMap[$kk] = $v;
+						}
+					}
+				}
+			}
+		}
+		return $headerMap;
+	}
+
+	private static function getQueryMap(){
+		$queryStr = $_SERVER["QUERY_STRING"];
+		$resultArray = array();
+		foreach (explode('&', $queryStr) as $pair) {
+		    list($key, $value) = explode('=', $pair);
+		    if (strpos($key, '.') !== false) {
+		        list($subKey, $subVal) = explode('.', $key);
+
+		        if (preg_match('/(?P<name>\w+)\[(?P<index>\w+)\]/', $subKey, $matches)) {
+		            $resultArray[$matches['name']][$matches['index']][$subVal] = $value;
+		        } else {
+		            $resultArray[$subKey][$subVal] = urldecode($value);
+		        }
+		    } else {
+		        $resultArray[$key] = urldecode($value);
+		    }
+		}
+		return $resultArray;
+	}
+
+	private static function checkRemoteIp(){
+		$remoteIp = $_SERVER["REMOTE_ADDR"];
+		foreach ($header_real_ip as $k){
+			$realIp = $_SERVER[$k];
+			$realIp = trim($realIp);
+			if(strlen($realIp) > 0 && strcasecmp("unknown",$realIp)){
+				$remoteIp = $realIp;
+				break;
+			}
+		}
+		return self::startsWith($remoteIp,"140.205.144.") || self::startsWith($remoteIp,"40.205.145.");
+	}
+
+	private static function getFormMap(){
+		$resultArray = array();
+		foreach($_POST as $key=>$v) { 
+			$resultArray[$key] = $v ;
+		}
+		return $resultArray ;	
+	}
+
+	private static function startsWith($haystack, $needle) {
+    	return $needle === "" || strpos($haystack, $needle) === 0;
+	}
+
+	private static function endWith($haystack, $needle) {   
+	    $length = strlen($needle);  
+	    if($length == 0)
+	    {    
+	        return true;  
+	    }  
+	    return (substr($haystack, -$length) === $needle);
+ 	}
+
+	private static function checkTimestamp(){
+		$ts = $_POST['timestamp'];
+		if($ts){
+			$clientTimestamp = strtotime($ts);
+			$current = $_SERVER['REQUEST_TIME'];
+			return ($current - $clientTimestamp) <= 5*60*1000;
+		}else{
+			return false;
+		}
+	}
+
+	private static function getParamStrFromMap($params){
+		ksort($params);
+		$stringToBeSigned = "";
+		foreach ($params as $k => $v)
+		{
+			if(strcmp("sign", $k) != 0)
+			{
+				$stringToBeSigned .= "$k$v";
+			}
+		}
+		unset($k, $v);
+		return $stringToBeSigned;
+	}
+
+	private static function sign($params,$body,$secret){
+		ksort($params);
+
+		$stringToBeSigned = $secret;
+		$stringToBeSigned .= self::getParamStrFromMap($params);
+
+		if($body)
+			$stringToBeSigned .= $body;
+		$stringToBeSigned .= $secret;
+		return strtoupper(md5($stringToBeSigned));
+	}
+
+	protected static function logCommunicationError($remoteSign, $localSign, $paramStr, $body)
+	{
+		$localIp = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI";
+		$logger = new TopLogger;
+		$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_comm_err_". date("Y-m-d") . ".log";
+		$logger->conf["separator"] = "^_^";
+		$logData = array(
+		"checkTopSign error" ,
+		"remoteSign=".$remoteSign ,
+		"localSign=".$localSign ,
+		"paramStr=".$paramStr ,
+		"body=".$body
+		);
+		$logger->log($logData);
+	}
+	private static function clear_blank($str, $glue='')
+	{
+		$replace = array(" ", "\r", "\n", "\t"); return str_replace($replace, $glue, $str);
+	}
+}
+?>

+ 377 - 0
lib/taobao-sdk/top/TopClient.php

@@ -0,0 +1,377 @@
+<?php
+class TopClient
+{
+	public $appkey;
+
+	public $secretKey;
+
+	public $gatewayUrl = "http://gw.api.taobao.com/router/rest";
+
+	public $format = "xml";
+
+	public $connectTimeout;
+
+	public $readTimeout;
+
+	/** 是否打开入参check**/
+	public $checkRequest = true;
+
+	protected $signMethod = "md5";
+
+	protected $apiVersion = "2.0";
+
+	protected $sdkVersion = "top-sdk-php-20251118";
+
+	public function getAppkey()
+	{
+		return $this->appkey;
+	}
+
+	public function __construct($appkey = "",$secretKey = ""){
+		$this->appkey = $appkey;
+		$this->secretKey = $secretKey ;
+	}
+
+	protected function generateSign($params)
+	{
+		ksort($params);
+
+		$stringToBeSigned = $this->secretKey;
+		foreach ($params as $k => $v)
+		{
+			if(!is_array($v) && "@" != substr($v, 0, 1))
+			{
+				$stringToBeSigned .= "$k$v";
+			}
+		}
+		unset($k, $v);
+		$stringToBeSigned .= $this->secretKey;
+
+		return strtoupper(md5($stringToBeSigned));
+	}
+
+	public function curl($url, $postFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		curl_setopt ( $ch, CURLOPT_USERAGENT, "top-sdk-php" );
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+
+		if (is_array($postFields) && 0 < count($postFields))
+		{
+			$postBodyString = "";
+			$postMultipart = false;
+			foreach ($postFields as $k => $v)
+			{
+				if("@" != substr($v, 0, 1))//判断是不是文件上传
+				{
+					$postBodyString .= "$k=" . urlencode($v) . "&"; 
+				}
+				else//文件上传用multipart/form-data,否则用www-form-urlencoded
+				{
+					$postMultipart = true;
+					if(class_exists('\CURLFile')){
+						$postFields[$k] = new \CURLFile(substr($v, 1));
+					}
+				}
+			}
+			unset($k, $v);
+			curl_setopt($ch, CURLOPT_POST, true);
+			if ($postMultipart)
+			{
+				if (class_exists('\CURLFile')) {
+				    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true);
+				} else {
+				    if (defined('CURLOPT_SAFE_UPLOAD')) {
+				        curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
+				    }
+				}
+				curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
+			}
+			else
+			{
+				$header = array("content-type: application/x-www-form-urlencoded; charset=UTF-8");
+				curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
+				curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));
+			}
+		}
+		$reponse = curl_exec($ch);
+		
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		else
+		{
+			$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+			if (200 !== $httpStatusCode)
+			{
+				throw new Exception($reponse,$httpStatusCode);
+			}
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+	public function curl_with_memory_file($url, $postFields = null, $fileFields = null)
+	{
+		$ch = curl_init();
+		curl_setopt($ch, CURLOPT_URL, $url);
+		curl_setopt($ch, CURLOPT_FAILONERROR, false);
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+		if ($this->readTimeout) {
+			curl_setopt($ch, CURLOPT_TIMEOUT, $this->readTimeout);
+		}
+		if ($this->connectTimeout) {
+			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connectTimeout);
+		}
+		curl_setopt ( $ch, CURLOPT_USERAGENT, "top-sdk-php" );
+		//https 请求
+		if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
+			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
+		}
+		//生成分隔符
+		$delimiter = '-------------' . uniqid();
+		//先将post的普通数据生成主体字符串
+		$data = '';
+		if($postFields != null){
+			foreach ($postFields as $name => $content) {
+			    $data .= "--" . $delimiter . "\r\n";
+			    $data .= 'Content-Disposition: form-data; name="' . $name . '"';
+			    //multipart/form-data 不需要urlencode,参见 http:stackoverflow.com/questions/6603928/should-i-url-encode-post-data
+			    $data .= "\r\n\r\n" . $content . "\r\n";
+			}
+			unset($name,$content);
+		}
+
+		//将上传的文件生成主体字符串
+		if($fileFields != null){
+			foreach ($fileFields as $name => $file) {
+			    $data .= "--" . $delimiter . "\r\n";
+			    $data .= 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $file['name'] . "\" \r\n";
+			    $data .= 'Content-Type: ' . $file['type'] . "\r\n\r\n";//多了个文档类型
+
+			    $data .= $file['content'] . "\r\n";
+			}
+			unset($name,$file);
+		}
+		//主体结束的分隔符
+		$data .= "--" . $delimiter . "--";
+
+		curl_setopt($ch, CURLOPT_POST, true);
+		curl_setopt($ch, CURLOPT_HTTPHEADER , array(
+		    'Content-Type: multipart/form-data; boundary=' . $delimiter,
+		    'Content-Length: ' . strlen($data))
+		); 
+		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+
+		$reponse = curl_exec($ch);
+		unset($data);
+
+		if (curl_errno($ch))
+		{
+			throw new Exception(curl_error($ch),0);
+		}
+		else
+		{
+			$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+			if (200 !== $httpStatusCode)
+			{
+				throw new Exception($reponse,$httpStatusCode);
+			}
+		}
+		curl_close($ch);
+		return $reponse;
+	}
+
+	protected function logCommunicationError($apiName, $requestUrl, $errorCode, $responseTxt)
+	{
+		$localIp = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI";
+		$logger = new TopLogger;
+		$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_comm_err_" . $this->appkey . "_" . date("Y-m-d") . ".log";
+		$logger->conf["separator"] = "^_^";
+		$logData = array(
+		date("Y-m-d H:i:s"),
+		$apiName,
+		$this->appkey,
+		$localIp,
+		PHP_OS,
+		$this->sdkVersion,
+		$requestUrl,
+		$errorCode,
+		str_replace("\n","",$responseTxt)
+		);
+		$logger->log($logData);
+	}
+
+	public function execute($request, $session = null,$bestUrl = null)
+	{
+		$result =  new ResultSet(); 
+		if($this->checkRequest) {
+			try {
+				$request->check();
+			} catch (Exception $e) {
+
+				$result->code = $e->getCode();
+				$result->msg = $e->getMessage();
+				return $result;
+			}
+		}
+		//组装系统参数
+		$sysParams["app_key"] = $this->appkey;
+		$sysParams["v"] = $this->apiVersion;
+		$sysParams["format"] = $this->format;
+		$sysParams["sign_method"] = $this->signMethod;
+		$sysParams["method"] = $request->getApiMethodName();
+		$sysParams["timestamp"] = date("Y-m-d H:i:s");
+		if (null != $session)
+		{
+			$sysParams["session"] = $session;
+		}
+		$apiParams = array();
+		//获取业务参数
+		$apiParams = $request->getApiParas();
+
+
+		//系统参数放入GET请求串
+		if($bestUrl){
+			$requestUrl = $bestUrl."?";
+			$sysParams["partner_id"] = $this->getClusterTag();
+		}else{
+			$requestUrl = $this->gatewayUrl."?";
+			$sysParams["partner_id"] = $this->sdkVersion;
+		}
+		//签名
+		$sysParams["sign"] = $this->generateSign(array_merge($apiParams, $sysParams));
+
+		foreach ($sysParams as $sysParamKey => $sysParamValue)
+		{
+			// if(strcmp($sysParamKey,"timestamp") != 0)
+			$requestUrl .= "$sysParamKey=" . urlencode($sysParamValue) . "&";
+		}
+
+		$fileFields = array();
+		foreach ($apiParams as $key => $value) {
+			if(is_array($value) && array_key_exists('type',$value) && array_key_exists('content',$value) ){
+				$value['name'] = $key;
+				$fileFields[$key] = $value;
+				unset($apiParams[$key]);
+			}
+		}
+
+		// $requestUrl .= "timestamp=" . urlencode($sysParams["timestamp"]) . "&";
+		$requestUrl = substr($requestUrl, 0, -1);
+
+		//发起HTTP请求
+		try
+		{
+			if(count($fileFields) > 0){
+				$resp = $this->curl_with_memory_file($requestUrl, $apiParams, $fileFields);
+			}else{
+				$resp = $this->curl($requestUrl, $apiParams);
+			}
+		}
+		catch (Exception $e)
+		{
+			$this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_ERROR_" . $e->getCode(),$e->getMessage());
+			$result->code = $e->getCode();
+			$result->msg = $e->getMessage();
+			return $result;
+		}
+
+		unset($apiParams);
+		unset($fileFields);
+		//解析TOP返回结果
+		$respWellFormed = false;
+		if ("json" == $this->format)
+		{
+			$respObject = json_decode($resp);
+			if (null !== $respObject)
+			{
+				$respWellFormed = true;
+				foreach ($respObject as $propKey => $propValue)
+				{
+					$respObject = $propValue;
+				}
+			}
+		}
+		else if("xml" == $this->format)
+		{
+			$respObject = @simplexml_load_string($resp);
+			if (false !== $respObject)
+			{
+				$respWellFormed = true;
+			}
+		}
+
+		//返回的HTTP文本不是标准JSON或者XML,记下错误日志
+		if (false === $respWellFormed)
+		{
+			$this->logCommunicationError($sysParams["method"],$requestUrl,"HTTP_RESPONSE_NOT_WELL_FORMED",$resp);
+			$result->code = 0;
+			$result->msg = "HTTP_RESPONSE_NOT_WELL_FORMED";
+			return $result;
+		}
+
+		//如果TOP返回了错误码,记录到业务错误日志中
+		if (isset($respObject->code))
+		{
+			$logger = new TopLogger;
+			$logger->conf["log_file"] = rtrim(TOP_SDK_WORK_DIR, '\\/') . '/' . "logs/top_biz_err_" . $this->appkey . "_" . date("Y-m-d") . ".log";
+			$logger->log(array(
+				date("Y-m-d H:i:s"),
+				$resp
+			));
+		}
+		return $respObject;
+	}
+
+	public function exec($paramsArray)
+	{
+		if (!isset($paramsArray["method"]))
+		{
+			trigger_error("No api name passed");
+		}
+		$inflector = new LtInflector;
+		$inflector->conf["separator"] = ".";
+		$requestClassName = ucfirst($inflector->camelize(substr($paramsArray["method"], 7))) . "Request";
+		if (!class_exists($requestClassName))
+		{
+			trigger_error("No such api: " . $paramsArray["method"]);
+		}
+
+		$session = isset($paramsArray["session"]) ? $paramsArray["session"] : null;
+
+		$req = new $requestClassName;
+		foreach($paramsArray as $paraKey => $paraValue)
+		{
+			$inflector->conf["separator"] = "_";
+			$setterMethodName = $inflector->camelize($paraKey);
+			$inflector->conf["separator"] = ".";
+			$setterMethodName = "set" . $inflector->camelize($setterMethodName);
+			if (method_exists($req, $setterMethodName))
+			{
+				$req->$setterMethodName($paraValue);
+			}
+		}
+		return $this->execute($req, $session);
+	}
+
+	private function getClusterTag()
+    {
+	    return substr($this->sdkVersion,0,11)."-cluster".substr($this->sdkVersion,11);
+    }
+}

+ 43 - 0
lib/taobao-sdk/top/TopLogger.php

@@ -0,0 +1,43 @@
+<?php
+class TopLogger
+{
+	public $conf = array(
+		"separator" => "\t",
+		"log_file" => ""
+	);
+
+	private $fileHandle;
+
+	protected function getFileHandle()
+	{
+		if (null === $this->fileHandle)
+		{
+			if (empty($this->conf["log_file"]))
+			{
+				trigger_error("no log file spcified.");
+			}
+			$logDir = dirname($this->conf["log_file"]);
+			if (!is_dir($logDir))
+			{
+				mkdir($logDir, 0777, true);
+			}
+			$this->fileHandle = fopen($this->conf["log_file"], "a");
+		}
+		return $this->fileHandle;
+	}
+
+	public function log($logData)
+	{
+		if ("" == $logData || array() == $logData)
+		{
+			return false;
+		}
+		if (is_array($logData))
+		{
+			$logData = implode($this->conf["separator"], $logData);
+		}
+		$logData = $logData. "\n";
+		fwrite($this->getFileHandle(), $logData);
+	}
+}
+?>

File diff suppressed because it is too large
+ 30 - 0
lib/taobao-sdk/top/domain/AddEntReqDto.php


+ 25 - 0
lib/taobao-sdk/top/domain/Address.php

@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * 企业注册地址省市区信息
+ * @author auto create
+ */
+class Address
+{
+	
+	/** 
+	 * 境内填写区县名称/境外则填写境外国家中文名称
+	 **/
+	public $area_name;
+	
+	/** 
+	 * 城市名称/境外不用填,境内必填
+	 **/
+	public $city_name;
+	
+	/** 
+	 * 省份名称/境外不用填,境内必填
+	 **/
+	public $prov_name;	
+}
+?>

+ 95 - 0
lib/taobao-sdk/top/domain/AppDrugReportDTO.php

@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * 结果
+ * @author auto create
+ */
+class AppDrugReportDTO
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approval_licence_no;
+	
+	/** 
+	 * 委托企业
+	 **/
+	public $ass_ent_name;
+	
+	/** 
+	 * mah
+	 **/
+	public $authorized_ent_name;
+	
+	/** 
+	 * 单据号
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据detail
+	 **/
+	public $bill_detail_id;
+	
+	/** 
+	 * 单据id
+	 **/
+	public $bill_id;
+	
+	/** 
+	 * 单据时间
+	 **/
+	public $bill_time_desc;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_id;
+	
+	/** 
+	 * 药品信息
+	 **/
+	public $drug_info_desc;
+	
+	/** 
+	 * 报告状态(0 :待发送  2:待签收 3:已签收 4:已拒绝)
+	 **/
+	public $drug_report_sign_status;
+	
+	/** 
+	 * 发货企业
+	 **/
+	public $from_ent_name;
+	
+	/** 
+	 * 发货企业
+	 **/
+	public $from_ref_ent_id;
+	
+	/** 
+	 * 批号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 生产企业
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 签章报告URL
+	 **/
+	public $seal_report_url;
+	
+	/** 
+	 * 签章坐标
+	 **/
+	public $seal_signatures;	
+}
+?>

+ 85 - 0
lib/taobao-sdk/top/domain/BaseInfoDto.php

@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * 药品基础信息
+ * @author auto create
+ */
+class BaseInfoDto
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approve_no;
+	
+	/** 
+	 * 药品有效期至
+	 **/
+	public $exprie_date;
+	
+	/** 
+	 * 药品信息
+	 **/
+	public $physic_info;
+	
+	/** 
+	 * 药品通用名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 药品包装比例
+	 **/
+	public $pkg_ratio;
+	
+	/** 
+	 * 药品包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 药品制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 药品制剂类型
+	 **/
+	public $prepn_type;
+	
+	/** 
+	 * 药品ID
+	 **/
+	public $prod_id;
+	
+	/** 
+	 * 药品生产批次号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 药品生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 药品编号
+	 **/
+	public $product_code;
+	
+	/** 
+	 * 企业id
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 药品自类编码
+	 **/
+	public $sub_type_no;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/BaseInfosDto.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 药品基础信息
+ * @author auto create
+ */
+class BaseInfosDto
+{
+	
+	/** 
+	 * 药品基础信息
+	 **/
+	public $base_info_list;	
+}
+?>

+ 115 - 0
lib/taobao-sdk/top/domain/BillChkInOutDO.php

@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * 返回结果
+ * @author auto create
+ */
+class BillChkInOutDO
+{
+	
+	/** 
+	 * 代理企业ID
+	 **/
+	public $agent_ref_user_id;
+	
+	/** 
+	 * 代理企业
+	 **/
+	public $agent_user_name;
+	
+	/** 
+	 * 单号号码
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据ID
+	 **/
+	public $bill_id;
+	
+	/** 
+	 * 单据时间
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type_name;
+	
+	/** 
+	 * 发货单位ID
+	 **/
+	public $from_ref_user_id;
+	
+	/** 
+	 * 发货企业ID
+	 **/
+	public $from_user_id;
+	
+	/** 
+	 * 发货单位
+	 **/
+	public $from_user_name;
+	
+	/** 
+	 * 处理日期
+	 **/
+	public $process_date;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 生产企业ID
+	 **/
+	public $produce_ent_id;
+	
+	/** 
+	 * 企业ID
+	 **/
+	public $ref_user_id;
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $ref_user_name;
+	
+	/** 
+	 * 51全部成功 52部分成功
+	 **/
+	public $sub_process_flag;
+	
+	/** 
+	 * 收货单位ID
+	 **/
+	public $to_ref_user_id;
+	
+	/** 
+	 * 收货单位
+	 **/
+	public $to_user_id;
+	
+	/** 
+	 * 收货单位
+	 **/
+	public $to_user_name;
+	
+	/** 
+	 * 上传文件名
+	 **/
+	public $upload_file_name;
+	
+	/** 
+	 * 角色类型
+	 **/
+	public $user_role_type;	
+}
+?>

+ 135 - 0
lib/taobao-sdk/top/domain/BillDealStatusSearchDo.php

@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class BillDealStatusSearchDo
+{
+	
+	/** 
+	 * 单号号
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据日期
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 上传日期
+	 **/
+	public $crt_date;
+	
+	/** 
+	 * 发货单位唯一标识
+	 **/
+	public $from_ref_user_id;
+	
+	/** 
+	 * 发货单位主键
+	 **/
+	public $from_user_id;
+	
+	/** 
+	 * 发货单位
+	 **/
+	public $from_user_name;
+	
+	/** 
+	 * 操作人标识
+	 **/
+	public $ic_code;
+	
+	/** 
+	 * 药品类型
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 处理日期
+	 **/
+	public $process_date;
+	
+	/** 
+	 * 处理结果表状态(暂不用)
+	 **/
+	public $process_flag;
+	
+	/** 
+	 * 处理信息
+	 **/
+	public $process_info;
+	
+	/** 
+	 * 用户唯一标识
+	 **/
+	public $ref_user_id;
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $ref_user_name;
+	
+	/** 
+	 * 处理状态  0,处理中 1, 上传成功     3, 处理成功     4, 处理失败
+	 **/
+	public $result_type;
+	
+	/** 
+	 * 角色类型
+	 **/
+	public $role_type;
+	
+	/** 
+	 * 文件名
+	 **/
+	public $short_file_name;
+	
+	/** 
+	 * 单据号
+	 **/
+	public $store_inout_seq_no;
+	
+	/** 
+	 * 51全部成功 52部分成功
+	 **/
+	public $sub_process_flag;
+	
+	/** 
+	 * 收货单位唯一标识
+	 **/
+	public $to_ref_user_id;
+	
+	/** 
+	 * 收货单位主键
+	 **/
+	public $to_user_id;
+	
+	/** 
+	 * 收货单位
+	 **/
+	public $to_user_name;
+	
+	/** 
+	 * 上传文件名
+	 **/
+	public $upload_file_name;
+	
+	/** 
+	 * 上传标识
+	 **/
+	public $upload_flag;
+	
+	/** 
+	 * 用户主键
+	 **/
+	public $user_id;	
+}
+?>

+ 65 - 0
lib/taobao-sdk/top/domain/BillInOutDetailDto.php

@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * 对象模型信息
+ * @author auto create
+ */
+class BillInOutDetailDto
+{
+	
+	/** 
+	 * 单据详情
+	 **/
+	public $bill_chk_in_out_detail_list_d_t_o_list;
+	
+	/** 
+	 * 单据号码
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据日期
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 单据类型名称
+	 **/
+	public $bill_type_name;
+	
+	/** 
+	 * 发货企业名称
+	 **/
+	public $from_ent_name;
+	
+	/** 
+	 * 发货企业id
+	 **/
+	public $from_user_id;
+	
+	/** 
+	 * 修改时间
+	 **/
+	public $mod_date;
+	
+	/** 
+	 * 处理时间
+	 **/
+	public $process_date;
+	
+	/** 
+	 * 收货企业名称
+	 **/
+	public $to_ent_name;
+	
+	/** 
+	 * 收货企业id
+	 **/
+	public $to_user_id;	
+}
+?>

+ 35 - 0
lib/taobao-sdk/top/domain/BillProcessPartSuccessExcelDTO.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class BillProcessPartSuccessExcelDTO
+{
+	
+	/** 
+	 * 追溯码
+	 **/
+	public $code;
+	
+	/** 
+	 * 错误类型
+	 **/
+	public $error_code;
+	
+	/** 
+	 * 错误类型描述
+	 **/
+	public $error_code_desc;
+	
+	/** 
+	 * 最后一次重新处理时间
+	 **/
+	public $last_process_date_desc;
+	
+	/** 
+	 * 处理失败原因描述
+	 **/
+	public $process_status_reason_desc;	
+}
+?>

+ 25 - 0
lib/taobao-sdk/top/domain/BillTypeCountDTO.php

@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * model
+ * @author auto create
+ */
+class BillTypeCountDTO
+{
+	
+	/** 
+	 * 单据类型枚举
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type_name;
+	
+	/** 
+	 * 单据数量
+	 **/
+	public $count;	
+}
+?>

+ 145 - 0
lib/taobao-sdk/top/domain/BillUpOutDetailDo.php

@@ -0,0 +1,145 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class BillUpOutDetailDo
+{
+	
+	/** 
+	 * 单据码
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据ID
+	 **/
+	public $bill_out_id;
+	
+	/** 
+	 * 单据时间
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据时间格式化
+	 **/
+	public $bill_time_format;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 最小码量
+	 **/
+	public $code_count;
+	
+	/** 
+	 * 药品ID
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 失效日期
+	 **/
+	public $exprie_date;
+	
+	/** 
+	 * 失效日期格式化
+	 **/
+	public $exprie_date_format;
+	
+	/** 
+	 * 发货单位
+	 **/
+	public $from_ent_name;
+	
+	/** 
+	 * 发货单位REF_ENT_ID
+	 **/
+	public $from_ref_user_id;
+	
+	/** 
+	 * 发货企业ent_id
+	 **/
+	public $from_user_id;
+	
+	/** 
+	 * 发货企业
+	 **/
+	public $from_user_name;
+	
+	/** 
+	 * 药品信息
+	 **/
+	public $physic_info;
+	
+	/** 
+	 * 药品名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 制剂数量
+	 **/
+	public $prepn_count;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 制剂单位
+	 **/
+	public $prepn_unit;
+	
+	/** 
+	 * 生产批号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 生产日期格式化
+	 **/
+	public $produce_date_format;
+	
+	/** 
+	 * 厂商
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 确认状态1未确认2已确认
+	 **/
+	public $status;
+	
+	/** 
+	 * 收货单位REF_ENT_ID
+	 **/
+	public $to_ref_user_id;
+	
+	/** 
+	 * 收货企业ent_id
+	 **/
+	public $to_user_id;
+	
+	/** 
+	 * 收货企业
+	 **/
+	public $to_user_name;	
+}
+?>

+ 60 - 0
lib/taobao-sdk/top/domain/BillUpOutDetailDto.php

@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * 最外层对象
+ * @author auto create
+ */
+class BillUpOutDetailDto
+{
+	
+	/** 
+	 * 单据编码
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 单据类型描述
+	 **/
+	public $bill_type_name;
+	
+	/** 
+	 * 药品信息数据
+	 **/
+	public $drug_infos_dto_list;
+	
+	/** 
+	 * 收货企业ref_ent_id
+	 **/
+	public $ent_recv_id;
+	
+	/** 
+	 * 收货企业名称
+	 **/
+	public $ent_recv_name;
+	
+	/** 
+	 * 发货企业的ref_ent_id
+	 **/
+	public $ent_send_id;
+	
+	/** 
+	 * 发货企业名称
+	 **/
+	public $ent_send_name;
+	
+	/** 
+	 * 单据日期
+	 **/
+	public $store_out_date;
+	
+	/** 
+	 * 最后更新时间
+	 **/
+	public $update_date;	
+}
+?>

+ 60 - 0
lib/taobao-sdk/top/domain/BillUpstreamDTO.php

@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * model
+ * @author auto create
+ */
+class BillUpstreamDTO
+{
+	
+	/** 
+	 * 单据号
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据时间
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 发货企业REF_ENT_ID
+	 **/
+	public $from_ref_user_id;
+	
+	/** 
+	 * 发货企业ID
+	 **/
+	public $from_user_id;
+	
+	/** 
+	 * 发货企业名称
+	 **/
+	public $from_user_name;
+	
+	/** 
+	 * 货主
+	 **/
+	public $ref_user_id;
+	
+	/** 
+	 * 收货企业REF_ENT_ID
+	 **/
+	public $to_ref_user_id;
+	
+	/** 
+	 * 收货企业ID
+	 **/
+	public $to_user_id;
+	
+	/** 
+	 * 收货企业名称
+	 **/
+	public $to_user_name;	
+}
+?>

+ 90 - 0
lib/taobao-sdk/top/domain/Billchkinoutdetaillistdtolist.php

@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * 单据详情
+ * @author auto create
+ */
+class Billchkinoutdetaillistdtolist
+{
+	
+	/** 
+	 * 国药准字
+	 **/
+	public $approve_no;
+	
+	/** 
+	 * 码列表
+	 **/
+	public $code_and_parent_list;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 有效期至
+	 **/
+	public $expired_date;
+	
+	/** 
+	 * 最小包装数量
+	 **/
+	public $min_pkg_count;
+	
+	/** 
+	 * 最小制剂数量
+	 **/
+	public $min_preparations_count;
+	
+	/** 
+	 * 药品名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型编码
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 药品类型名称
+	 **/
+	public $physic_type_name;
+	
+	/** 
+	 * 制剂单位
+	 **/
+	public $preparations_unit;
+	
+	/** 
+	 * 子类编码
+	 **/
+	public $prod_code;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 生产企业名称
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 批次号
+	 **/
+	public $product_batch_no;
+	
+	/** 
+	 * 子类编码前7位
+	 **/
+	public $product_code;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $temp_pkg_spec;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/CASealDTO.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 结果
+ * @author auto create
+ */
+class CASealDTO
+{
+	
+	/** 
+	 * 印章名称
+	 **/
+	public $seal_name;	
+}
+?>

+ 125 - 0
lib/taobao-sdk/top/domain/CodeActiveInfoDto.php

@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * 激活信息
+ * @author auto create
+ */
+class CodeActiveInfoDto
+{
+	
+	/** 
+	 * 总激活数量
+	 **/
+	public $active_count;
+	
+	/** 
+	 * 激活时间
+	 **/
+	public $active_date;
+	
+	/** 
+	 * 单据id
+	 **/
+	public $bill_in_id;
+	
+	/** 
+	 * 激活信息id
+	 **/
+	public $code_active_info_id;
+	
+	/** 
+	 * 激活时间
+	 **/
+	public $crt_date;
+	
+	/** 
+	 * 关联关系文件上传日期
+	 **/
+	public $crt_date_string;
+	
+	/** 
+	 * 旧企业ID
+	 **/
+	public $ent_id;
+	
+	/** 
+	 * 操作人编码
+	 **/
+	public $oper_ic_code;
+	
+	/** 
+	 * 操作人姓名
+	 **/
+	public $oper_ic_name;
+	
+	/** 
+	 * 最大包装数量
+	 **/
+	public $other_num;
+	
+	/** 
+	 * 处理数量
+	 **/
+	public $process_count;
+	
+	/** 
+	 * 处理日期
+	 **/
+	public $process_date;
+	
+	/** 
+	 * 处理结束时间
+	 **/
+	public $process_end_date;
+	
+	/** 
+	 * 处理标志
+	 **/
+	public $process_flag;
+	
+	/** 
+	 * 生产编号
+	 **/
+	public $prod_code;
+	
+	/** 
+	 * 企业ID
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 关联关系类型
+	 **/
+	public $relation_type;
+	
+	/** 
+	 * 小码数量
+	 **/
+	public $small_num;
+	
+	/** 
+	 * 状态
+	 **/
+	public $status;
+	
+	/** 
+	 * 上传文件名
+	 **/
+	public $upload_file_name;
+	
+	/** 
+	 * 上传文件路径
+	 **/
+	public $upload_file_path;
+	
+	/** 
+	 * 上传标识
+	 **/
+	public $upload_flag;
+	
+	/** 
+	 * 紧急人
+	 **/
+	public $user_cert;	
+}
+?>

+ 40 - 0
lib/taobao-sdk/top/domain/CodeFullInfoDto.php

@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * 内层大对象
+ * @author auto create
+ */
+class CodeFullInfoDto
+{
+	
+	/** 
+	 * 追溯码
+	 **/
+	public $code;
+	
+	/** 
+	 * 码生产信息对象
+	 **/
+	public $code_produce_info_d_t_o;
+	
+	/** 
+	 * 码对象
+	 **/
+	public $code_status_type_d_t_o;
+	
+	/** 
+	 * 药品基本信息对象
+	 **/
+	public $drug_ent_base_d_t_o;
+	
+	/** 
+	 * 企业信息对象
+	 **/
+	public $p_user_ent_d_t_o;
+	
+	/** 
+	 * 码等级【1代表最小码 如:申请的包装比例是1:5:10, 对应的码等级就是3、2、1, 代表大码、中码、小码】
+	 **/
+	public $package_level;	
+}
+?>

+ 35 - 0
lib/taobao-sdk/top/domain/CodeInfo.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * 码关联关系
+ * @author auto create
+ */
+class CodeInfo
+{
+	
+	/** 
+	 * 追溯码
+	 **/
+	public $code;
+	
+	/** 
+	 * 码等级--展示等级 【相当于包装等级,1代表最大展示等级, 如:申请的包装比例是1:5:10, 对应的码展示等级就是 1、2、3, 代表大码、中码、小码】
+	 **/
+	public $code_level;
+	
+	/** 
+	 * 码等级【1代表最小码 如:申请的包装比例是1:5:10, 对应的码等级就是3、2、1, 代表大码、中码、小码】
+	 **/
+	public $code_pack_level;
+	
+	/** 
+	 * 父码
+	 **/
+	public $parent_code;
+	
+	/** 
+	 * 码状态(A:已激活;I:已核注;O:已核销;C:已注销;E:码不存在)
+	 **/
+	public $status;	
+}
+?>

+ 35 - 0
lib/taobao-sdk/top/domain/CodeInfoListDto.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * 码信息
+ * @author auto create
+ */
+class CodeInfoListDto
+{
+	
+	/** 
+	 * 监管码
+	 **/
+	public $code;
+	
+	/** 
+	 * 码等级【1代表最小码 如:申请的包装比例是1:5:10, 对应的码等级就是3、2、1, 代表大码、中码、小码】
+	 **/
+	public $code_level;
+	
+	/** 
+	 * 最小包装数量
+	 **/
+	public $pkg_amount;
+	
+	/** 
+	 * 最小制剂数量
+	 **/
+	public $prepn_amount;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/CodeProduceInfoDto.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 码生产信息对象
+ * @author auto create
+ */
+class CodeProduceInfoDto
+{
+	
+	/** 
+	 * 生产信息集合
+	 **/
+	public $produce_info_list;	
+}
+?>

+ 40 - 0
lib/taobao-sdk/top/domain/CodeRelationDto.php

@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * model
+ * @author auto create
+ */
+class CodeRelationDto
+{
+	
+	/** 
+	 * 药品基础信息
+	 **/
+	public $base_infos_dto;
+	
+	/** 
+	 * 激活信息
+	 **/
+	public $code_active_info_dto;
+	
+	/** 
+	 * 码关联关系
+	 **/
+	public $code_relation_list;
+	
+	/** 
+	 * 是否是最小包装
+	 **/
+	public $is_smallest;
+	
+	/** 
+	 * 药品包装信息
+	 **/
+	public $pkg_info_dto;
+	
+	/** 
+	 * 生产信息
+	 **/
+	public $produce_info_list;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/CodeResList.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * 码列表
+ * @author auto create
+ */
+class CodeResList
+{
+	
+	/** 
+	 * 层级
+	 **/
+	public $code_level;
+	
+	/** 
+	 * 码前缀
+	 **/
+	public $code_prefix;
+	
+	/** 
+	 * 包装比例
+	 **/
+	public $pkg_ratio;
+	
+	/** 
+	 * 资源码
+	 **/
+	public $res_code;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/CodeStatusTypeDto.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 码对象
+ * @author auto create
+ */
+class CodeStatusTypeDto
+{
+	
+	/** 
+	 * 码状态(A:已激活;I:已核注;O:已核销;C:已注销;E:码不存在)
+	 **/
+	public $code_status;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/Codeandparentlist.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * 码列表
+ * @author auto create
+ */
+class Codeandparentlist
+{
+	
+	/** 
+	 * 追溯码
+	 **/
+	public $code;
+	
+	/** 
+	 * 码级别
+	 **/
+	public $code_level;
+	
+	/** 
+	 * 是否有父码
+	 **/
+	public $has_parent_code;
+	
+	/** 
+	 * 父码
+	 **/
+	public $parent_code;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/DataEntTaskDto.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * model
+ * @author auto create
+ */
+class DataEntTaskDto
+{
+	
+	/** 
+	 * fileInfoList
+	 **/
+	public $file_info_list;
+	
+	/** 
+	 * fileNum
+	 **/
+	public $file_num;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/DataEntTaskResultDto.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * result
+ * @author auto create
+ */
+class DataEntTaskResultDto
+{
+	
+	/** 
+	 * httpStatusCode
+	 **/
+	public $http_status_code;
+	
+	/** 
+	 * model
+	 **/
+	public $model;
+	
+	/** 
+	 * msgInfo
+	 **/
+	public $msg_info;
+	
+	/** 
+	 * success
+	 **/
+	public $success;	
+}
+?>

+ 95 - 0
lib/taobao-sdk/top/domain/DrugDetailInfoDto.php

@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * 结果列表
+ * @author auto create
+ */
+class DrugDetailInfoDto
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approve_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 修改日期
+	 **/
+	public $mod_date;
+	
+	/** 
+	 * 药品详细类型
+	 **/
+	public $physic_detail_type;
+	
+	/** 
+	 * 药品信息
+	 **/
+	public $physic_info;
+	
+	/** 
+	 * 药品通用名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型(详见码表) 1:特殊药品原料药,2:特殊药品制剂,3:普通药品,9:未分类
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 包装单位
+	 **/
+	public $pkg_unit;
+	
+	/** 
+	 * 包装单位描述
+	 **/
+	public $pkg_unit_desc;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 制剂单位类型(详见码表)  赋码最小包装内使用单元单位
+	 **/
+	public $prepn_unit;
+	
+	/** 
+	 * 制剂单位描述
+	 **/
+	public $prepn_unit_desc;
+	
+	/** 
+	 * 药品子类编码
+	 **/
+	public $prod_code;
+	
+	/** 
+	 * 商品名称
+	 **/
+	public $prod_name;
+	
+	/** 
+	 * 生产厂企业名称
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 企业id
+	 **/
+	public $produce_ref_ent_id;	
+}
+?>

+ 50 - 0
lib/taobao-sdk/top/domain/DrugEntBaseDto.php

@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * 药品基本信息对象
+ * @author auto create
+ */
+class DrugEntBaseDto
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approval_licence_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 有效期
+	 **/
+	public $exprie;
+	
+	/** 
+	 * 药品名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型描述
+	 **/
+	public $physic_type_desc;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec_crit;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 剂型描述
+	 **/
+	public $prepn_type_desc;	
+}
+?>

+ 55 - 0
lib/taobao-sdk/top/domain/DrugEntBaseInfoDTO.php

@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * 药品集合
+ * @author auto create
+ */
+class DrugEntBaseInfoDTO
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approval_licence_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_id;
+	
+	/** 
+	 * mah名称
+	 **/
+	public $mah_ent_name;
+	
+	/** 
+	 * 包装厂名称
+	 **/
+	public $pack_ent_name;
+	
+	/** 
+	 * 药品通用名
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 剂型
+	 **/
+	public $prepn_type_desc;
+	
+	/** 
+	 * 生产企业名称
+	 **/
+	public $produce_ent_name;	
+}
+?>

+ 115 - 0
lib/taobao-sdk/top/domain/DrugInfosDto.php

@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * 药品信息数据
+ * @author auto create
+ */
+class DrugInfosDto
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approval_no;
+	
+	/** 
+	 * 国家药监局药品唯一码
+	 **/
+	public $cfda_drug_id;
+	
+	/** 
+	 * 码信息
+	 **/
+	public $code_info_list_dto_list;
+	
+	/** 
+	 * 药品标识
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 按最小包装单位统计数量
+	 **/
+	public $least_pkg_amount;
+	
+	/** 
+	 * 按最小制剂单位统计数量
+	 **/
+	public $least_prepn_amount;
+	
+	/** 
+	 * 产品包装规格
+	 **/
+	public $package_spec;
+	
+	/** 
+	 * 药品通用名
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 药品类型描述
+	 **/
+	public $physic_type_name;
+	
+	/** 
+	 * 包装单位描述
+	 **/
+	public $pkg_unit_desc;
+	
+	/** 
+	 * 制剂单位
+	 **/
+	public $preparations_unit;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 制剂规格描述
+	 **/
+	public $prepn_type_desc;
+	
+	/** 
+	 * 制剂单位编码
+	 **/
+	public $prepn_unit;
+	
+	/** 
+	 * 药品商品名
+	 **/
+	public $prod_name;
+	
+	/** 
+	 * 药品标识
+	 **/
+	public $prod_seq_no;
+	
+	/** 
+	 * 批次号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 生产企业名称
+	 **/
+	public $product_ent_name;
+	
+	/** 
+	 * 有效期至
+	 **/
+	public $valid_end_date;	
+}
+?>

+ 25 - 0
lib/taobao-sdk/top/domain/DrugReportSealInfo.php

@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * 本企业签章
+ * @author auto create
+ */
+class DrugReportSealInfo
+{
+	
+	/** 
+	 * X坐标
+	 **/
+	public $position_x;
+	
+	/** 
+	 * Y坐标
+	 **/
+	public $position_y;
+	
+	/** 
+	 * 印章名称
+	 **/
+	public $seal_name;	
+}
+?>

+ 80 - 0
lib/taobao-sdk/top/domain/DrugTableDto.php

@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class DrugTableDto
+{
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 修改日期
+	 **/
+	public $mod_date;
+	
+	/** 
+	 * 药品详细类型
+	 **/
+	public $physic_detail_type;
+	
+	/** 
+	 * 药品类型详情描述
+	 **/
+	public $physic_detail_type_desc;
+	
+	/** 
+	 * 药品名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型(详见码表) 1:特殊药品原料药,2:特殊药品制剂,3:普通药品,9:未分类
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 药品类型描述
+	 **/
+	public $physic_type_desc;
+	
+	/** 
+	 * 包装单位描述
+	 **/
+	public $pkg_unit_desc;
+	
+	/** 
+	 * 制剂类型描述
+	 **/
+	public $prepn_type_desc;
+	
+	/** 
+	 * 制剂单位描述
+	 **/
+	public $prepn_unit_desc;
+	
+	/** 
+	 * 药品自类编码
+	 **/
+	public $prod_code;
+	
+	/** 
+	 * 商品名称
+	 **/
+	public $prod_name;
+	
+	/** 
+	 * 企业主键
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 子列表
+	 **/
+	public $sub_type_list;	
+}
+?>

+ 75 - 0
lib/taobao-sdk/top/domain/DrugTestReportDTO.php

@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * 内层小对象
+ * @author auto create
+ */
+class DrugTestReportDTO
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approval_no;
+	
+	/** 
+	 * 药品持有人企业名称
+	 **/
+	public $auth_ent_name;
+	
+	/** 
+	 * 药品信息
+	 **/
+	public $drug_base_info;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 药检报告id
+	 **/
+	public $drug_report_v2_id;
+	
+	/** 
+	 * 生产企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 有效期至
+	 **/
+	public $expire_date;
+	
+	/** 
+	 * 产品批号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 报告创建时间
+	 **/
+	public $report_create_time;
+	
+	/** 
+	 * 报告id
+	 **/
+	public $report_id;
+	
+	/** 
+	 * 盖章状态:0无效  1有效
+	 **/
+	public $seal_status;
+	
+	/** 
+	 * 药检报告上传状态: 0无效; 1有效 
+	 **/
+	public $status;	
+}
+?>

+ 95 - 0
lib/taobao-sdk/top/domain/EntDailyReportDTO.php

@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * 返回的主要实体
+ * @author auto create
+ */
+class EntDailyReportDTO
+{
+	
+	/** 
+	 * 其中已经接收到正确回执的单据数量是
+	 **/
+	public $bill_file_accepted_count;
+	
+	/** 
+	 * 其中生成的单据总数
+	 **/
+	public $bill_file_count;
+	
+	/** 
+	 * 其中还没有接收回执的单据数量是
+	 **/
+	public $bill_file_un_accepted_count;
+	
+	/** 
+	 * 其中已经接收到正确回执的单据包数量是
+	 **/
+	public $bill_task_accepted_count;
+	
+	/** 
+	 * 其中单据生成包的数量
+	 **/
+	public $bill_task_count;
+	
+	/** 
+	 * 其中还没有接收回执的包数量是
+	 **/
+	public $bill_task_un_accepted_count;
+	
+	/** 
+	 * 报告结束时间
+	 **/
+	public $end_time;
+	
+	/** 
+	 * 报告所有者名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 该报告的所有者唯一标识
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 其中已经接收到正确回执的关联关系数量是
+	 **/
+	public $relation_file_accepted_count;
+	
+	/** 
+	 * 其中生成的关联关系文件总数
+	 **/
+	public $relation_file_count;
+	
+	/** 
+	 * 其中还没有接收回执的关联关系数量是
+	 **/
+	public $relation_file_un_accepted_count;
+	
+	/** 
+	 * 其中已经接收到正确回执的文件数量是
+	 **/
+	public $relation_task_accepted_count;
+	
+	/** 
+	 * 其中关联关系工生成包的数量
+	 **/
+	public $relation_task_count;
+	
+	/** 
+	 * 其中还没有接收回执的数量是
+	 **/
+	public $relation_task_un_accepted_count;
+	
+	/** 
+	 * 备注
+	 **/
+	public $remark;
+	
+	/** 
+	 * 报告开始时间
+	 **/
+	public $start_time;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/EntDealResultDTO.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 返回对象
+ * @author auto create
+ */
+class EntDealResultDTO
+{
+	
+	/** 
+	 * 当操作类型为签收并盖章(signAndSeal)和盖章签收后的报告(sealAfterSign),会返回盖章的报告id
+	 **/
+	public $drug_report_id;
+	
+	/** 
+	 * 操作类型:签收(onlySign),拒收(rejectReceive),签收并盖章(signAndSeal),盖章签收后的报告(sealAfterSign)
+	 **/
+	public $opt;	
+}
+?>

+ 50 - 0
lib/taobao-sdk/top/domain/HoloBillSearchCommonShowDTO.php

@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * 结果
+ * @author auto create
+ */
+class HoloBillSearchCommonShowDTO
+{
+	
+	/** 
+	 * 单据编码
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据明细ID
+	 **/
+	public $bill_detail_id;
+	
+	/** 
+	 * 单据id
+	 **/
+	public $bill_id;
+	
+	/** 
+	 * 单据时间
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_id;
+	
+	/** 
+	 * 批号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 签章URL
+	 **/
+	public $sealed_report_url;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/JSONObject.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 返回值
+ * @author auto create
+ */
+class JSONObject
+{
+	
+	/** 
+	 * 文件下载地址
+	 **/
+	public $url;	
+}
+?>

+ 25 - 0
lib/taobao-sdk/top/domain/MSCServiceInfoDTO.php

@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * 服务对象
+ * @author auto create
+ */
+class MSCServiceInfoDTO
+{
+	
+	/** 
+	 * 服务到期日期
+	 **/
+	public $end_date;
+	
+	/** 
+	 * 企业的refEntId
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 服务生效日期
+	 **/
+	public $start_date;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/Model.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 返回对象
+ * @author auto create
+ */
+class Model
+{
+	
+	/** 
+	 * 药品集合
+	 **/
+	public $result;
+	
+	/** 
+	 * 总记录数
+	 **/
+	public $total_num;	
+}
+?>

+ 80 - 0
lib/taobao-sdk/top/domain/OcrSealDrugReportDTO.php

@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * 结果列表
+ * @author auto create
+ */
+class OcrSealDrugReportDTO
+{
+	
+	/** 
+	 * 批次号
+	 **/
+	public $batch_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 药品名称
+	 **/
+	public $drug_name;
+	
+	/** 
+	 * 报告名称
+	 **/
+	public $drug_report_name;
+	
+	/** 
+	 * 药检报告Id
+	 **/
+	public $drug_report_v2_id;
+	
+	/** 
+	 * 包装比例
+	 **/
+	public $pkg_ratio_list;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 药品子类编码
+	 **/
+	public $prod_code;
+	
+	/** 
+	 * 报告日期
+	 **/
+	public $report_date;
+	
+	/** 
+	 * 报告id
+	 **/
+	public $report_id;
+	
+	/** 
+	 * 报告编号
+	 **/
+	public $report_no;
+	
+	/** 
+	 * 盖章报告链接
+	 **/
+	public $sealed_report_url;
+	
+	/** 
+	 * 盖章状态:1是未盖章,2是已盖章
+	 **/
+	public $status;	
+}
+?>

+ 70 - 0
lib/taobao-sdk/top/domain/OnenetDrugInfoDTO.php

@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * 结果
+ * @author auto create
+ */
+class OnenetDrugInfoDTO
+{
+	
+	/** 
+	 * 是否激活:0未激活,1激活
+	 **/
+	public $active_status;
+	
+	/** 
+	 * 批次
+	 **/
+	public $batch_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_id;
+	
+	/** 
+	 * 有效期至
+	 **/
+	public $expire_date;
+	
+	/** 
+	 * mah名字
+	 **/
+	public $mah_name;
+	
+	/** 
+	 * mahRefEntId
+	 **/
+	public $mah_ref_ent_id;
+	
+	/** 
+	 * 药品名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 生产企业名称
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 生产企业refEntId
+	 **/
+	public $produce_ref_ent_id;	
+}
+?>

+ 135 - 0
lib/taobao-sdk/top/domain/OnenetDrugReportTopDTO.php

@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * 结果
+ * @author auto create
+ */
+class OnenetDrugReportTopDTO
+{
+	
+	/** 
+	 * 委托企业
+	 **/
+	public $ass_ref_ent_id;
+	
+	/** 
+	 * 单据编码
+	 **/
+	public $bill_code;
+	
+	/** 
+	 * 单据明细ID
+	 **/
+	public $bill_detail_id;
+	
+	/** 
+	 * 单据ID
+	 **/
+	public $bill_id;
+	
+	/** 
+	 * 单据时间
+	 **/
+	public $bill_time;
+	
+	/** 
+	 * 单据类型
+	 **/
+	public $bill_type;
+	
+	/** 
+	 * 单据上传日期
+	 **/
+	public $crt_date;
+	
+	/** 
+	 * 药品ID
+	 **/
+	public $drug_id;
+	
+	/** 
+	 * 报告ID
+	 **/
+	public $drug_report_id;
+	
+	/** 
+	 * 报告状态(0 :待发送  2:待签收 3:已签收 4:已拒绝 7:对方已签收(更正待处理)  13:对方已拒绝(更正待签收))
+	 **/
+	public $drug_report_sign_status;
+	
+	/** 
+	 * 报告名称
+	 **/
+	public $file_name;
+	
+	/** 
+	 * 发货企业
+	 **/
+	public $from_ent_name;
+	
+	/** 
+	 * 发货企业
+	 **/
+	public $from_ref_ent_id;
+	
+	/** 
+	 * 药品名
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 包装
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 制剂
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 剂型
+	 **/
+	public $prepn_type_desc;
+	
+	/** 
+	 * 批号
+	 **/
+	public $produce_batch_no;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date;
+	
+	/** 
+	 * 生产企业ID
+	 **/
+	public $produce_ent_id;
+	
+	/** 
+	 * 生产企业
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 签章位置
+	 **/
+	public $seal_signatures;
+	
+	/** 
+	 * 盖章状态 0:待盖章 5:已盖章 6:同批号已盖章 
+	 **/
+	public $seal_status;
+	
+	/** 
+	 * 签章URL
+	 **/
+	public $sealed_report_url;
+	
+	/** 
+	 * 签收时间
+	 **/
+	public $signed_time;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/OnenetOcrPdfDTO.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 报告文件
+ * @author auto create
+ */
+class OnenetOcrPdfDTO
+{
+	
+	/** 
+	 * 文件名称 后缀仅支持:pdf,jpg,png
+	 **/
+	public $title;
+	
+	/** 
+	 * 文件URL 注意:url不能含有空格
+	 **/
+	public $url;	
+}
+?>

+ 35 - 0
lib/taobao-sdk/top/domain/OnenetTaskDTO.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * 结果
+ * @author auto create
+ */
+class OnenetTaskDTO
+{
+	
+	/** 
+	 * 报告ID
+	 **/
+	public $id;
+	
+	/** 
+	 * 备注
+	 **/
+	public $remark;
+	
+	/** 
+	 * 药检报告URL
+	 **/
+	public $report_url;
+	
+	/** 
+	 * 签章后的药检报告URL
+	 **/
+	public $seal_report_url;
+	
+	/** 
+	 * 任务状态:0待处理,1处理中,2成功,3文件无法下载,4文件合并错误,5其他错误,-1系统错误
+	 **/
+	public $task_status;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/OperationInfoMap.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 错误信息明细,便于后续操作
+ * @author auto create
+ */
+class OperationInfoMap
+{
+	
+	/** 
+	 * json,key是错误类型编码,value是具体得信息,详细参考文档
+	 **/
+	public $code_check_error_info;	
+}
+?>

+ 130 - 0
lib/taobao-sdk/top/domain/PEntParDTO.php

@@ -0,0 +1,130 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class PEntParDTO
+{
+	
+	/** 
+	 * 往来单位所在市
+	 **/
+	public $area_name;
+	
+	/** 
+	 * 往来单位审核状态:0-审核中;1-审核通过;2-审核不通过
+	 **/
+	public $audit_flag;
+	
+	/** 
+	 * 往来单位所在县
+	 **/
+	public $city_name;
+	
+	/** 
+	 * 添加到本企业往来单位列表日期
+	 **/
+	public $crt_date;
+	
+	/** 
+	 * 创建IC码:废弃字段
+	 **/
+	public $crt_ic_code;
+	
+	/** 
+	 * 创建IC名称:废弃字段
+	 **/
+	public $crt_ic_name;
+	
+	/** 
+	 * 企业id:废弃字段
+	 **/
+	public $ent_id;
+	
+	/** 
+	 * 往来单位企业所在省编码
+	 **/
+	public $ent_prov_code;
+	
+	/** 
+	 * 是不是入网企业:1-是;0-不是
+	 **/
+	public $is_network;
+	
+	/** 
+	 * 往来单位最近修改日期
+	 **/
+	public $last_mod_date;
+	
+	/** 
+	 * 修改IC码:废弃字段
+	 **/
+	public $mod_ic_code;
+	
+	/** 
+	 * 修改IC名称:废弃字段
+	 **/
+	public $mod_ic_name;
+	
+	/** 
+	 * 记录ID
+	 **/
+	public $p_ent_par_id;
+	
+	/** 
+	 * 往来单位企业refEntId
+	 **/
+	public $par_ref_ent_id;
+	
+	/** 
+	 * 往来单位拼音缩写
+	 **/
+	public $partner_capital_name;
+	
+	/** 
+	 * 往来单位企业entId
+	 **/
+	public $partner_ent_id;
+	
+	/** 
+	 * 往来单位ID:企业自定义编号
+	 **/
+	public $partner_id;
+	
+	/** 
+	 * 级别:废弃字段
+	 **/
+	public $partner_level;
+	
+	/** 
+	 * 往来单位名称
+	 **/
+	public $partner_name;
+	
+	/** 
+	 * 往来单位类型
+	 **/
+	public $partner_type;
+	
+	/** 
+	 * 往来单位企业类型描述
+	 **/
+	public $partner_type_desc;
+	
+	/** 
+	 * 往来单位所在省
+	 **/
+	public $prov_name;
+	
+	/** 
+	 * 调用企业唯一标识
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 状态
+	 **/
+	public $status;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/PUserEntDto.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 企业信息对象
+ * @author auto create
+ */
+class PUserEntDto
+{
+	
+	/** 
+	 * 生产企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 生产企业entid,不是refentid
+	 **/
+	public $ref_ent_id;	
+}
+?>

+ 105 - 0
lib/taobao-sdk/top/domain/PUserEntInfoDTO.php

@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * 返回对象
+ * @author auto create
+ */
+class PUserEntInfoDTO
+{
+	
+	/** 
+	 * 市
+	 **/
+	public $area_name;
+	
+	/** 
+	 * 县
+	 **/
+	public $city_name;
+	
+	/** 
+	 * 所在地编码
+	 **/
+	public $dict_region_code;
+	
+	/** 
+	 * 所在地明细
+	 **/
+	public $dict_region_detail;
+	
+	/** 
+	 * 所属管理机构
+	 **/
+	public $direct_manage;
+	
+	/** 
+	 * 拼音缩写
+	 **/
+	public $ent_capital_name;
+	
+	/** 
+	 * 企业id
+	 **/
+	public $ent_id;
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 企业机构详细类别
+	 **/
+	public $ent_org_type;
+	
+	/** 
+	 * 是否入网
+	 **/
+	public $is_network;
+	
+	/** 
+	 * 是否法人
+	 **/
+	public $legal_org_flag;
+	
+	/** 
+	 * 注册地明细
+	 **/
+	public $org_code;
+	
+	/** 
+	 * 省
+	 **/
+	public $prov_name;
+	
+	/** 
+	 * 企业唯一标识
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 注册地编码
+	 **/
+	public $reg_region_code;
+	
+	/** 
+	 * 所在地明细
+	 **/
+	public $reg_region_detail;
+	
+	/** 
+	 * 状态1.使用中0.已废除
+	 **/
+	public $status;
+	
+	/** 
+	 * 企业类型
+	 **/
+	public $user_role_type;
+	
+	/** 
+	 * 企业类型编码
+	 **/
+	public $user_role_type_str;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/Page.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * 返回对象
+ * @author auto create
+ */
+class Page
+{
+	
+	/** 
+	 * 当前页
+	 **/
+	public $page;
+	
+	/** 
+	 * 分页大小
+	 **/
+	public $page_size;
+	
+	/** 
+	 * 返回列表
+	 **/
+	public $result_list;
+	
+	/** 
+	 * 总数
+	 **/
+	public $total_num;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/PageInfoDTO.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 返回对象
+ * @author auto create
+ */
+class PageInfoDto
+{
+	
+	/** 
+	 * 返回列表
+	 **/
+	public $result_list;
+	
+	/** 
+	 * 总计
+	 **/
+	public $total_num;	
+}
+?>

+ 15 - 0
lib/taobao-sdk/top/domain/PkgInfoDto.php

@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * 药品包装信息
+ * @author auto create
+ */
+class PkgInfoDto
+{
+	
+	/** 
+	 * 码信息
+	 **/
+	public $code_list;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/ProduceInfoDto.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * 生产信息集合
+ * @author auto create
+ */
+class ProduceInfoDto
+{
+	
+	/** 
+	 * 批次号
+	 **/
+	public $batch_no;
+	
+	/** 
+	 * 有效期至
+	 **/
+	public $expire_date;
+	
+	/** 
+	 * 最小包装数量
+	 **/
+	public $pkg_amount;
+	
+	/** 
+	 * 生产日期
+	 **/
+	public $produce_date_str;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/ResData.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 返回对象类型是Map,属性如下 id(报告id)和 sealed_report_url(盖章后的链接)
+ * @author auto create
+ */
+class ResData
+{
+	
+	/** 
+	 * 报告id
+	 **/
+	public $id;
+	
+	/** 
+	 * 盖章报告链接
+	 **/
+	public $sealed_report_url;	
+}
+?>

+ 95 - 0
lib/taobao-sdk/top/domain/ResDrugDetailInfoDTO.php

@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class ResDrugDetailInfoDTO
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approve_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 修改日期
+	 **/
+	public $mod_date;
+	
+	/** 
+	 * 药品详细类型
+	 **/
+	public $physic_detail_type;
+	
+	/** 
+	 * 药品信息
+	 **/
+	public $physic_info;
+	
+	/** 
+	 * 药品通用名称
+	 **/
+	public $physic_name;
+	
+	/** 
+	 * 药品类型(详见码表) 1:特殊药品原料药,2:特殊药品制剂,3:普通药品,9:未分类
+	 **/
+	public $physic_type;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $pkg_spec;
+	
+	/** 
+	 * 包装单位
+	 **/
+	public $pkg_unit;
+	
+	/** 
+	 * 包装单位描述
+	 **/
+	public $pkg_unit_desc;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 制剂单位类型(详见码表)  赋码最小包装内使用单元单位
+	 **/
+	public $prepn_unit;
+	
+	/** 
+	 * 制剂单位描述
+	 **/
+	public $prepn_unit_desc;
+	
+	/** 
+	 * 药品子类编码
+	 **/
+	public $prod_code;
+	
+	/** 
+	 * 商品名称
+	 **/
+	public $prod_name;
+	
+	/** 
+	 * 生产厂企业名称
+	 **/
+	public $produce_ent_name;
+	
+	/** 
+	 * 企业id
+	 **/
+	public $produce_ref_ent_id;	
+}
+?>

+ 65 - 0
lib/taobao-sdk/top/domain/ResPSynonymDTO.php

@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * 返回列表
+ * @author auto create
+ */
+class ResPSynonymDTO
+{
+	
+	/** 
+	 * 区
+	 **/
+	public $area_desc;
+	
+	/** 
+	 * 市
+	 **/
+	public $city_desc;
+	
+	/** 
+	 * 创建日期
+	 **/
+	public $crt_date;
+	
+	/** 
+	 * 区域编码
+	 **/
+	public $dict_region_code;
+	
+	/** 
+	 * 企业id
+	 **/
+	public $ent_id;
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 省
+	 **/
+	public $prov_desc;
+	
+	/** 
+	 * 企业唯一标识
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 货主
+	 **/
+	public $syn_own_ent_id;
+	
+	/** 
+	 * 货主标识
+	 **/
+	public $user_ent_id;
+	
+	/** 
+	 * 角色
+	 **/
+	public $user_role_type;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/Result.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * result
+ * @author auto create
+ */
+class Result
+{
+	
+	/** 
+	 * httpStatusCode
+	 **/
+	public $http_status_code;
+	
+	/** 
+	 * model
+	 **/
+	public $model;
+	
+	/** 
+	 * msgInfo
+	 **/
+	public $msg_info;
+	
+	/** 
+	 * success
+	 **/
+	public $success;	
+}
+?>

+ 30 - 0
lib/taobao-sdk/top/domain/ResultModel.php

@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * 监控宝推送网站监控信息,返回结果
+ * @author auto create
+ */
+class ResultModel
+{
+	
+	/** 
+	 * 返回对象
+	 **/
+	public $model;
+	
+	/** 
+	 * 返回码
+	 **/
+	public $msg_code;
+	
+	/** 
+	 * 返回值
+	 **/
+	public $msg_info;
+	
+	/** 
+	 * 是否响应成功
+	 **/
+	public $response_success;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/SealSignatureDTO.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 签章坐标
+ * @author auto create
+ */
+class SealSignatureDTO
+{
+	
+	/** 
+	 * 左下角x
+	 **/
+	public $position_x;
+	
+	/** 
+	 * 左下角y
+	 **/
+	public $position_y;	
+}
+?>

+ 75 - 0
lib/taobao-sdk/top/domain/SubTypeList.php

@@ -0,0 +1,75 @@
+<?php
+
+/**
+ * 子列表
+ * @author auto create
+ */
+class SubTypeList
+{
+	
+	/** 
+	 * 批准文号
+	 **/
+	public $approve_no;
+	
+	/** 
+	 * 码列表
+	 **/
+	public $code_res_list;
+	
+	/** 
+	 * 药品ID
+	 **/
+	public $drug_ent_base_info_id;
+	
+	/** 
+	 * 包装单位
+	 **/
+	public $pack_unit;
+	
+	/** 
+	 * 包装单位
+	 **/
+	public $pack_unit_name;
+	
+	/** 
+	 * 包装规格
+	 **/
+	public $package_spec;
+	
+	/** 
+	 * 药品详情类型
+	 **/
+	public $physic_detail_type;
+	
+	/** 
+	 * 制剂描述
+	 **/
+	public $prepn_desc;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	public $prepn_spec;
+	
+	/** 
+	 * 制剂单位
+	 **/
+	public $prepn_unit;
+	
+	/** 
+	 * 制剂单位描述
+	 **/
+	public $prepn_unit_name;
+	
+	/** 
+	 * 企业药品ID
+	 **/
+	public $prod_seq_no;
+	
+	/** 
+	 * 子类型
+	 **/
+	public $sub_type_no;	
+}
+?>

+ 85 - 0
lib/taobao-sdk/top/domain/TopDrugReportOptLog.php

@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * 结果列表
+ * @author auto create
+ */
+class TopDrugReportOptLog
+{
+	
+	/** 
+	 * 批次号
+	 **/
+	public $batch_no;
+	
+	/** 
+	 * 药品id
+	 **/
+	public $drug_id;
+	
+	/** 
+	 * 药检报告id
+	 **/
+	public $drug_report_v2_id;
+	
+	/** 
+	 * 报告所属企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 操作企业名称
+	 **/
+	public $opt_ent_name;
+	
+	/** 
+	 * 操作来源web:客户端,top:top平台,legao:小二操作
+	 **/
+	public $opt_from;
+	
+	/** 
+	 * 操作企业id
+	 **/
+	public $opt_ref_ent_id;
+	
+	/** 
+	 * 操作时间:yyyy-MM-dd HH:mm:ss
+	 **/
+	public $opt_time;
+	
+	/** 
+	 * 操作类型insertReport:新增报告,deleteReport:删除报告,sealReport:报告签章,updateReport:报告更新
+	 **/
+	public $opt_type;
+	
+	/** 
+	 * 操作人
+	 **/
+	public $opt_user;
+	
+	/** 
+	 * 报告所属企业id
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 报告日期yyyy-MM-dd
+	 **/
+	public $report_date;
+	
+	/** 
+	 * ocr上传报告名字
+	 **/
+	public $report_name;
+	
+	/** 
+	 * 报告编号
+	 **/
+	public $report_no;
+	
+	/** 
+	 * 报告操作记录唯一值
+	 **/
+	public $uuid;	
+}
+?>

+ 80 - 0
lib/taobao-sdk/top/domain/TopEntAuthProgressDTO.php

@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * 返回的分页结果集合
+ * @author auto create
+ */
+class TopEntAuthProgressDTO
+{
+	
+	/** 
+	 * 最近权限变更时间,没有就是-
+	 **/
+	public $auth_msg;
+	
+	/** 
+	 * 权限状态 1有权限 0无权限
+	 **/
+	public $auth_status;
+	
+	/** 
+	 * 权限状态描述
+	 **/
+	public $auth_status_desc;
+	
+	/** 
+	 * 权限操作类型:0手动授权,1协议授权, 2邀请函授权 3:取消授权 4:无
+	 **/
+	public $auth_type;
+	
+	/** 
+	 * 权限操作类型描述
+	 **/
+	public $auth_type_desc;
+	
+	/** 
+	 * MAH/生产企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 最近邀请授权日期,没有就是-
+	 **/
+	public $invite_date;
+	
+	/** 
+	 * 企业ID
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $rel_ent_name;
+	
+	/** 
+	 * MAH/生产企业ID
+	 **/
+	public $rel_ref_ent_id;
+	
+	/** 
+	 * 企业区域code
+	 **/
+	public $rel_region_code;
+	
+	/** 
+	 * 企业区域描述
+	 **/
+	public $rel_region_desc;
+	
+	/** 
+	 * 企业类型code
+	 **/
+	public $rel_user_role_type;
+	
+	/** 
+	 * 企业类型描述
+	 **/
+	public $rel_user_role_type_desc;	
+}
+?>

+ 65 - 0
lib/taobao-sdk/top/domain/TopEntAuthProgressRefDTO.php

@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * D2D企业授权记录入参
+ * @author auto create
+ */
+class TopEntAuthProgressRefDTO
+{
+	
+	/** 
+	 * 企业appKey
+	 **/
+	public $app_key;
+	
+	/** 
+	 * 权限变更日期开始
+	 **/
+	public $auth_date_begin;
+	
+	/** 
+	 * 权限变更日期截止,距离开始时间不超过1年
+	 **/
+	public $auth_date_end;
+	
+	/** 
+	 * 授权状态 1有权限 0无权限
+	 **/
+	public $auth_status;
+	
+	/** 
+	 * 授权类型:0手动授权,1协议授权, 2邀请授权 3:取消授权 4:无授权
+	 **/
+	public $auth_type;
+	
+	/** 
+	 * 最近邀请时间开始
+	 **/
+	public $invite_date_begin;
+	
+	/** 
+	 * 最近邀请时间截止,无限制
+	 **/
+	public $invite_date_end;
+	
+	/** 
+	 * 所在页数
+	 **/
+	public $page;
+	
+	/** 
+	 * 页的大小
+	 **/
+	public $page_size;
+	
+	/** 
+	 * 企业id
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 商业企业id
+	 **/
+	public $rel_ref_ent_id;	
+}
+?>

+ 35 - 0
lib/taobao-sdk/top/domain/TopEntInfoReqDto.php

@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * 查询企业信息参数
+ * @author auto create
+ */
+class TopEntInfoReqDto
+{
+	
+	/** 
+	 * 查询参数:企业entId
+	 **/
+	public $ent_id;
+	
+	/** 
+	 * 查询参数:企业名称,无其他查询条件时不能为空
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 查询参数:诊所备案号或医疗单位登记号,无其他查询条件时不能为空
+	 **/
+	public $medical_code;
+	
+	/** 
+	 * 查询参数:统一社会信用代码,无其他查询条件时不能为空
+	 **/
+	public $org_code;
+	
+	/** 
+	 * 查询参数:企业refEntId
+	 **/
+	public $par_ref_ent_id;	
+}
+?>

+ 85 - 0
lib/taobao-sdk/top/domain/TopEntInfoRespDto.php

@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * 响应结果
+ * @author auto create
+ */
+class TopEntInfoRespDto
+{
+	
+	/** 
+	 * 企业所在区县代码
+	 **/
+	public $area_code;
+	
+	/** 
+	 * 企业所在区县名称
+	 **/
+	public $area_name;
+	
+	/** 
+	 * 1-审核通过,0-审核中,2-审核不通过
+	 **/
+	public $audit_status;
+	
+	/** 
+	 * 企业所在城市代码
+	 **/
+	public $city_code;
+	
+	/** 
+	 * 企业所在城市名称
+	 **/
+	public $city_name;
+	
+	/** 
+	 * 企业ID【ent_id】(单据上传时的收发货企业id就是填这个字段)
+	 **/
+	public $ent_id;
+	
+	/** 
+	 * 企业名称
+	 **/
+	public $ent_name;
+	
+	/** 
+	 * 唯一代码来源的资质代码(非精准)
+	 **/
+	public $lic_type_code;
+	
+	/** 
+	 * 唯一代码来源的资质名称(非精准)
+	 **/
+	public $lic_type_name;
+	
+	/** 
+	 * 企业所在省份代码
+	 **/
+	public $prov_code;
+	
+	/** 
+	 * 企业所在省份名称
+	 **/
+	public $prov_name;
+	
+	/** 
+	 * 企业唯一标识【ref_ent_id】(单据上传时的货主企业ref_user_id就是填这个字段)
+	 **/
+	public $ref_ent_id;
+	
+	/** 
+	 * 企业注册详细地址
+	 **/
+	public $reg_region_detail;
+	
+	/** 
+	 * 是否入驻,1-入驻企业,0-非入驻
+	 **/
+	public $settle_status;
+	
+	/** 
+	 * 唯一代码
+	 **/
+	public $unique_code;	
+}
+?>

+ 20 - 0
lib/taobao-sdk/top/domain/TopFileDTO.php

@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * 报告数据 最大100个文件
+ * @author auto create
+ */
+class TopFileDTO
+{
+	
+	/** 
+	 * 文件名称
+	 **/
+	public $title;
+	
+	/** 
+	 *  文件链接,链接格式支持:pdf, jpeg,jpg, png,  图片:最大边长小于5000像素,  注意:url不能含有空格
+	 **/
+	public $url;	
+}
+?>

+ 26 - 0
lib/taobao-sdk/top/fileTest.php

@@ -0,0 +1,26 @@
+<?php
+    include "TopSdk.php";
+    date_default_timezone_set('Asia/Shanghai'); 
+
+    $c = new TopClient;
+    $c->appkey = '*********';
+    $c->secretKey = '*******************';
+    // $req = new TradeVoucherUploadRequest;
+    // $req->setFileName("example");
+    // $req->setFileData("@/Users/xt/Downloads/1.jpg");
+    // $req->setSellerNick("奥利奥官方旗舰店");
+    // $req->setBuyerNick("101NufynDYcbjf2cFQDd62j8M/mjtyz6RoxQ2OL1c0e/Bc=");
+    // var_dump($c->execute($req));
+
+    $req2 = new TradeVoucherUploadRequest;
+    $req2->setFileName("example");
+
+    $myPic = array(
+            'type' => 'application/octet-stream',
+            'content' => file_get_contents('/Users/xt/Downloads/1.jpg')
+            );
+    $req2->setFileData($myPic);
+    $req2->setSellerNick("奥利奥官方旗舰店");
+    $req2->setBuyerNick("101NufynDYcbjf2cFQDd62j8M/mjtyz6RoxQ2OL1c0e/Bc=");
+    var_dump($c->execute($req2));
+?>

+ 163 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadDataerrordiagnosisRequest.php

@@ -0,0 +1,163 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.download.dataerrordiagnosis request
+ * 
+ * @author auto create
+ * @since 1.0, 2024.12.24
+ */
+class AlibabaAlihealthDrugDownloadDataerrordiagnosisRequest
+{
+	/** 
+	 * appKey
+	 **/
+	private $appKeyN;
+	
+	/** 
+	 * 数据所有者企业名称
+	 **/
+	private $baseEntName;
+	
+	/** 
+	 * 单据号
+	 **/
+	private $billCode;
+	
+	/** 
+	 * 单据所有者企业名称
+	 **/
+	private $billEntName;
+	
+	/** 
+	 * 单据标识 入库填写I 出库填写O
+	 **/
+	private $billTypeFlag;
+	
+	/** 
+	 * 追溯码;当有code时候billEntname  bill_code  bill_type_flag可以不填,优先根据code判定
+	 **/
+	private $code;
+	
+	/** 
+	 * 是否需要重传 1代表需要 0代表不需要
+	 **/
+	private $reUpload;
+	
+	/** 
+	 * 下游模式填2 集团模式填3
+	 **/
+	private $type;
+	
+	private $apiParas = array();
+	
+	public function setAppKeyN($appKeyN)
+	{
+		$this->appKeyN = $appKeyN;
+		$this->apiParas["app_key_n"] = $appKeyN;
+	}
+
+	public function getAppKeyN()
+	{
+		return $this->appKeyN;
+	}
+
+	public function setBaseEntName($baseEntName)
+	{
+		$this->baseEntName = $baseEntName;
+		$this->apiParas["base_ent_name"] = $baseEntName;
+	}
+
+	public function getBaseEntName()
+	{
+		return $this->baseEntName;
+	}
+
+	public function setBillCode($billCode)
+	{
+		$this->billCode = $billCode;
+		$this->apiParas["bill_code"] = $billCode;
+	}
+
+	public function getBillCode()
+	{
+		return $this->billCode;
+	}
+
+	public function setBillEntName($billEntName)
+	{
+		$this->billEntName = $billEntName;
+		$this->apiParas["bill_ent_name"] = $billEntName;
+	}
+
+	public function getBillEntName()
+	{
+		return $this->billEntName;
+	}
+
+	public function setBillTypeFlag($billTypeFlag)
+	{
+		$this->billTypeFlag = $billTypeFlag;
+		$this->apiParas["bill_type_flag"] = $billTypeFlag;
+	}
+
+	public function getBillTypeFlag()
+	{
+		return $this->billTypeFlag;
+	}
+
+	public function setCode($code)
+	{
+		$this->code = $code;
+		$this->apiParas["code"] = $code;
+	}
+
+	public function getCode()
+	{
+		return $this->code;
+	}
+
+	public function setReUpload($reUpload)
+	{
+		$this->reUpload = $reUpload;
+		$this->apiParas["re_upload"] = $reUpload;
+	}
+
+	public function getReUpload()
+	{
+		return $this->reUpload;
+	}
+
+	public function setType($type)
+	{
+		$this->type = $type;
+		$this->apiParas["type"] = $type;
+	}
+
+	public function getType()
+	{
+		return $this->type;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.download.dataerrordiagnosis";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->appKeyN,"appKeyN");
+		RequestCheckUtil::checkNotNull($this->baseEntName,"baseEntName");
+		RequestCheckUtil::checkNotNull($this->reUpload,"reUpload");
+		RequestCheckUtil::checkNotNull($this->type,"type");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 47 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadEntlistRequest.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.download.entlist request
+ * 
+ * @author auto create
+ * @since 1.0, 2021.11.22
+ */
+class AlibabaAlihealthDrugDownloadEntlistRequest
+{
+	/** 
+	 * appKey
+	 **/
+	private $appKeyN;
+	
+	private $apiParas = array();
+	
+	public function setAppKeyN($appKeyN)
+	{
+		$this->appKeyN = $appKeyN;
+		$this->apiParas["app_key_n"] = $appKeyN;
+	}
+
+	public function getAppKeyN()
+	{
+		return $this->appKeyN;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.download.entlist";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 63 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadFileacceptretRequest.php

@@ -0,0 +1,63 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.download.fileacceptret request
+ * 
+ * @author auto create
+ * @since 1.0, 2021.11.23
+ */
+class AlibabaAlihealthDrugDownloadFileacceptretRequest
+{
+	/** 
+	 * appKey
+	 **/
+	private $appKeyN;
+	
+	/** 
+	 * fileResultJson
+	 **/
+	private $fileResultJson;
+	
+	private $apiParas = array();
+	
+	public function setAppKeyN($appKeyN)
+	{
+		$this->appKeyN = $appKeyN;
+		$this->apiParas["app_key_n"] = $appKeyN;
+	}
+
+	public function getAppKeyN()
+	{
+		return $this->appKeyN;
+	}
+
+	public function setFileResultJson($fileResultJson)
+	{
+		$this->fileResultJson = $fileResultJson;
+		$this->apiParas["file_result_json"] = $fileResultJson;
+	}
+
+	public function getFileResultJson()
+	{
+		return $this->fileResultJson;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.download.fileacceptret";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 82 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadGetentdailytaskdtolistRequest.php

@@ -0,0 +1,82 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.download.getentdailytaskdtolist request
+ * 
+ * @author auto create
+ * @since 1.0, 2022.06.30
+ */
+class AlibabaAlihealthDrugDownloadGetentdailytaskdtolistRequest
+{
+	/** 
+	 * appkey
+	 **/
+	private $appKeyN;
+	
+	/** 
+	 * 统计的结束时间
+	 **/
+	private $endTime;
+	
+	/** 
+	 * 统计的开始时间
+	 **/
+	private $startTime;
+	
+	private $apiParas = array();
+	
+	public function setAppKeyN($appKeyN)
+	{
+		$this->appKeyN = $appKeyN;
+		$this->apiParas["app_key_n"] = $appKeyN;
+	}
+
+	public function getAppKeyN()
+	{
+		return $this->appKeyN;
+	}
+
+	public function setEndTime($endTime)
+	{
+		$this->endTime = $endTime;
+		$this->apiParas["end_time"] = $endTime;
+	}
+
+	public function getEndTime()
+	{
+		return $this->endTime;
+	}
+
+	public function setStartTime($startTime)
+	{
+		$this->startTime = $startTime;
+		$this->apiParas["start_time"] = $startTime;
+	}
+
+	public function getStartTime()
+	{
+		return $this->startTime;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.download.getentdailytaskdtolist";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->appKeyN,"appKeyN");
+		RequestCheckUtil::checkNotNull($this->endTime,"endTime");
+		RequestCheckUtil::checkNotNull($this->startTime,"startTime");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 64 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugDownloadGetproductxmlRequest.php

@@ -0,0 +1,64 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.download.getproductxml request
+ * 
+ * @author auto create
+ * @since 1.0, 2022.09.19
+ */
+class AlibabaAlihealthDrugDownloadGetproductxmlRequest
+{
+	/** 
+	 * appKey
+	 **/
+	private $appKeyN;
+	
+	/** 
+	 * 企业名称
+	 **/
+	private $entName;
+	
+	private $apiParas = array();
+	
+	public function setAppKeyN($appKeyN)
+	{
+		$this->appKeyN = $appKeyN;
+		$this->apiParas["app_key_n"] = $appKeyN;
+	}
+
+	public function getAppKeyN()
+	{
+		return $this->appKeyN;
+	}
+
+	public function setEntName($entName)
+	{
+		$this->entName = $entName;
+		$this->apiParas["ent_name"] = $entName;
+	}
+
+	public function getEntName()
+	{
+		return $this->entName;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.download.getproductxml";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->appKeyN,"appKeyN");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 64 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydGetentinfolistRequest.php

@@ -0,0 +1,64 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.lsyd.getentinfolist request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.09.08
+ */
+class AlibabaAlihealthDrugLsydGetentinfolistRequest
+{
+	/** 
+	 * 查询企业信息参数
+	 **/
+	private $queryParam;
+	
+	/** 
+	 * refEntId
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setQueryParam($queryParam)
+	{
+		$this->queryParam = $queryParam;
+		$this->apiParas["query_param"] = $queryParam;
+	}
+
+	public function getQueryParam()
+	{
+		return $this->queryParam;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.lsyd.getentinfolist";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 64 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydGetentinfonewRequest.php

@@ -0,0 +1,64 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.lsyd.getentinfonew request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.09.29
+ */
+class AlibabaAlihealthDrugLsydGetentinfonewRequest
+{
+	/** 
+	 * 查询企业信息参数
+	 **/
+	private $queryParam;
+	
+	/** 
+	 * refEntId
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setQueryParam($queryParam)
+	{
+		$this->queryParam = $queryParam;
+		$this->apiParas["query_param"] = $queryParam;
+	}
+
+	public function getQueryParam()
+	{
+		return $this->queryParam;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.lsyd.getentinfonew";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 98 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydQueryBillcountRequest.php

@@ -0,0 +1,98 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.lsyd.query.billcount request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.11.03
+ */
+class AlibabaAlihealthDrugLsydQueryBillcountRequest
+{
+	/** 
+	 * 开始日期
+	 **/
+	private $beginDate;
+	
+	/** 
+	 * 单据类型
+	 **/
+	private $billType;
+	
+	/** 
+	 * 结束日期
+	 **/
+	private $endDate;
+	
+	/** 
+	 * 企业ID
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setBeginDate($beginDate)
+	{
+		$this->beginDate = $beginDate;
+		$this->apiParas["begin_date"] = $beginDate;
+	}
+
+	public function getBeginDate()
+	{
+		return $this->beginDate;
+	}
+
+	public function setBillType($billType)
+	{
+		$this->billType = $billType;
+		$this->apiParas["bill_type"] = $billType;
+	}
+
+	public function getBillType()
+	{
+		return $this->billType;
+	}
+
+	public function setEndDate($endDate)
+	{
+		$this->endDate = $endDate;
+		$this->apiParas["end_date"] = $endDate;
+	}
+
+	public function getEndDate()
+	{
+		return $this->endDate;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.lsyd.query.billcount";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->beginDate,"beginDate");
+		RequestCheckUtil::checkNotNull($this->endDate,"endDate");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 98 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydQueryUpoutbillcountRequest.php

@@ -0,0 +1,98 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.lsyd.query.upoutbillcount request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.11.03
+ */
+class AlibabaAlihealthDrugLsydQueryUpoutbillcountRequest
+{
+	/** 
+	 * 开始日期
+	 **/
+	private $beginDate;
+	
+	/** 
+	 * 单据类型
+	 **/
+	private $billType;
+	
+	/** 
+	 * 结束日期
+	 **/
+	private $endDate;
+	
+	/** 
+	 * 企业ID
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setBeginDate($beginDate)
+	{
+		$this->beginDate = $beginDate;
+		$this->apiParas["begin_date"] = $beginDate;
+	}
+
+	public function getBeginDate()
+	{
+		return $this->beginDate;
+	}
+
+	public function setBillType($billType)
+	{
+		$this->billType = $billType;
+		$this->apiParas["bill_type"] = $billType;
+	}
+
+	public function getBillType()
+	{
+		return $this->billType;
+	}
+
+	public function setEndDate($endDate)
+	{
+		$this->endDate = $endDate;
+		$this->apiParas["end_date"] = $endDate;
+	}
+
+	public function getEndDate()
+	{
+		return $this->endDate;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.lsyd.query.upoutbillcount";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->beginDate,"beginDate");
+		RequestCheckUtil::checkNotNull($this->endDate,"endDate");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 81 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydSaveentRequest.php

@@ -0,0 +1,81 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.lsyd.saveent request
+ * 
+ * @author auto create
+ * @since 1.0, 2021.11.25
+ */
+class AlibabaAlihealthDrugLsydSaveentRequest
+{
+	/** 
+	 * 新增企业信息
+	 **/
+	private $addEntReq;
+	
+	/** 
+	 * 图片数据流。图片大小务必控制在2M以内
+	 **/
+	private $licPictureByte;
+	
+	/** 
+	 * 添加企业唯一标识
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setAddEntReq($addEntReq)
+	{
+		$this->addEntReq = $addEntReq;
+		$this->apiParas["add_ent_req"] = $addEntReq;
+	}
+
+	public function getAddEntReq()
+	{
+		return $this->addEntReq;
+	}
+
+	public function setLicPictureByte($licPictureByte)
+	{
+		$this->licPictureByte = $licPictureByte;
+		$this->apiParas["lic_picture_byte"] = $licPictureByte;
+	}
+
+	public function getLicPictureByte()
+	{
+		return $this->licPictureByte;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.lsyd.saveent";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->licPictureByte,"licPictureByte");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 197 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugLsydSearchbillRequest.php

@@ -0,0 +1,197 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.lsyd.searchbill request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.10.16
+ */
+class AlibabaAlihealthDrugLsydSearchbillRequest
+{
+	/** 
+	 * 单据所有者
+	 **/
+	private $authRefUserId;
+	
+	/** 
+	 * 开始日期
+	 **/
+	private $beginDate;
+	
+	/** 
+	 * 单据号码
+	 **/
+	private $billCode;
+	
+	/** 
+	 * 单据类型  A : 所有  AI :入库    AO:出库
+	 **/
+	private $billType;
+	
+	/** 
+	 * 当前页
+	 **/
+	private $curPage;
+	
+	/** 
+	 * 结束日期
+	 **/
+	private $endDate;
+	
+	/** 
+	 * 页大小
+	 **/
+	private $pageSize;
+	
+	/** 
+	 * 收货企业entId
+	 **/
+	private $partnerIdRecv;
+	
+	/** 
+	 * 发货企业entId
+	 **/
+	private $partnerIdSend;
+	
+	/** 
+	 * 企业标识
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setAuthRefUserId($authRefUserId)
+	{
+		$this->authRefUserId = $authRefUserId;
+		$this->apiParas["auth_ref_user_id"] = $authRefUserId;
+	}
+
+	public function getAuthRefUserId()
+	{
+		return $this->authRefUserId;
+	}
+
+	public function setBeginDate($beginDate)
+	{
+		$this->beginDate = $beginDate;
+		$this->apiParas["begin_date"] = $beginDate;
+	}
+
+	public function getBeginDate()
+	{
+		return $this->beginDate;
+	}
+
+	public function setBillCode($billCode)
+	{
+		$this->billCode = $billCode;
+		$this->apiParas["bill_code"] = $billCode;
+	}
+
+	public function getBillCode()
+	{
+		return $this->billCode;
+	}
+
+	public function setBillType($billType)
+	{
+		$this->billType = $billType;
+		$this->apiParas["bill_type"] = $billType;
+	}
+
+	public function getBillType()
+	{
+		return $this->billType;
+	}
+
+	public function setCurPage($curPage)
+	{
+		$this->curPage = $curPage;
+		$this->apiParas["cur_page"] = $curPage;
+	}
+
+	public function getCurPage()
+	{
+		return $this->curPage;
+	}
+
+	public function setEndDate($endDate)
+	{
+		$this->endDate = $endDate;
+		$this->apiParas["end_date"] = $endDate;
+	}
+
+	public function getEndDate()
+	{
+		return $this->endDate;
+	}
+
+	public function setPageSize($pageSize)
+	{
+		$this->pageSize = $pageSize;
+		$this->apiParas["page_size"] = $pageSize;
+	}
+
+	public function getPageSize()
+	{
+		return $this->pageSize;
+	}
+
+	public function setPartnerIdRecv($partnerIdRecv)
+	{
+		$this->partnerIdRecv = $partnerIdRecv;
+		$this->apiParas["partner_id_recv"] = $partnerIdRecv;
+	}
+
+	public function getPartnerIdRecv()
+	{
+		return $this->partnerIdRecv;
+	}
+
+	public function setPartnerIdSend($partnerIdSend)
+	{
+		$this->partnerIdSend = $partnerIdSend;
+		$this->apiParas["partner_id_send"] = $partnerIdSend;
+	}
+
+	public function getPartnerIdSend()
+	{
+		return $this->partnerIdSend;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.lsyd.searchbill";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->beginDate,"beginDate");
+		RequestCheckUtil::checkNotNull($this->billType,"billType");
+		RequestCheckUtil::checkNotNull($this->curPage,"curPage");
+		RequestCheckUtil::checkNotNull($this->endDate,"endDate");
+		RequestCheckUtil::checkNotNull($this->pageSize,"pageSize");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 229 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscBillSearchstatusRequest.php

@@ -0,0 +1,229 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.bill.searchstatus request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.06.26
+ */
+class AlibabaAlihealthDrugMscBillSearchstatusRequest
+{
+	/** 
+	 * 代理商(第三方物流企业)
+	 **/
+	private $agentRefUserId;
+	
+	/** 
+	 * 开始日期(没有时分秒,【单据创建时间】)
+	 **/
+	private $beginDate;
+	
+	/** 
+	 * 单据号(精确值,不支持模糊查询)
+	 **/
+	private $billCode;
+	
+	/** 
+	 * 单据类型 A:全部 AI:全部入库 AO:全部出库
+	 **/
+	private $billType;
+	
+	/** 
+	 * 状态  0, 处理中     3, 处理成功     4, 处理失败
+	 **/
+	private $dealStatus;
+	
+	/** 
+	 * 药品类型
+	 **/
+	private $drugType;
+	
+	/** 
+	 * 结束日期(没有时分秒,【单据创建时间】)
+	 **/
+	private $endDate;
+	
+	/** 
+	 * 发货商
+	 **/
+	private $fromUserId;
+	
+	/** 
+	 * 页码
+	 **/
+	private $page;
+	
+	/** 
+	 * 页大小
+	 **/
+	private $pageSize;
+	
+	/** 
+	 * 企业ref_ent_id(货主企业的ref_ent_id)
+	 **/
+	private $refEntId;
+	
+	/** 
+	 * 收货商
+	 **/
+	private $toUserId;
+	
+	private $apiParas = array();
+	
+	public function setAgentRefUserId($agentRefUserId)
+	{
+		$this->agentRefUserId = $agentRefUserId;
+		$this->apiParas["agent_ref_user_id"] = $agentRefUserId;
+	}
+
+	public function getAgentRefUserId()
+	{
+		return $this->agentRefUserId;
+	}
+
+	public function setBeginDate($beginDate)
+	{
+		$this->beginDate = $beginDate;
+		$this->apiParas["begin_date"] = $beginDate;
+	}
+
+	public function getBeginDate()
+	{
+		return $this->beginDate;
+	}
+
+	public function setBillCode($billCode)
+	{
+		$this->billCode = $billCode;
+		$this->apiParas["bill_code"] = $billCode;
+	}
+
+	public function getBillCode()
+	{
+		return $this->billCode;
+	}
+
+	public function setBillType($billType)
+	{
+		$this->billType = $billType;
+		$this->apiParas["bill_type"] = $billType;
+	}
+
+	public function getBillType()
+	{
+		return $this->billType;
+	}
+
+	public function setDealStatus($dealStatus)
+	{
+		$this->dealStatus = $dealStatus;
+		$this->apiParas["deal_status"] = $dealStatus;
+	}
+
+	public function getDealStatus()
+	{
+		return $this->dealStatus;
+	}
+
+	public function setDrugType($drugType)
+	{
+		$this->drugType = $drugType;
+		$this->apiParas["drug_type"] = $drugType;
+	}
+
+	public function getDrugType()
+	{
+		return $this->drugType;
+	}
+
+	public function setEndDate($endDate)
+	{
+		$this->endDate = $endDate;
+		$this->apiParas["end_date"] = $endDate;
+	}
+
+	public function getEndDate()
+	{
+		return $this->endDate;
+	}
+
+	public function setFromUserId($fromUserId)
+	{
+		$this->fromUserId = $fromUserId;
+		$this->apiParas["from_user_id"] = $fromUserId;
+	}
+
+	public function getFromUserId()
+	{
+		return $this->fromUserId;
+	}
+
+	public function setPage($page)
+	{
+		$this->page = $page;
+		$this->apiParas["page"] = $page;
+	}
+
+	public function getPage()
+	{
+		return $this->page;
+	}
+
+	public function setPageSize($pageSize)
+	{
+		$this->pageSize = $pageSize;
+		$this->apiParas["page_size"] = $pageSize;
+	}
+
+	public function getPageSize()
+	{
+		return $this->pageSize;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function setToUserId($toUserId)
+	{
+		$this->toUserId = $toUserId;
+		$this->apiParas["to_user_id"] = $toUserId;
+	}
+
+	public function getToUserId()
+	{
+		return $this->toUserId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.bill.searchstatus";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->beginDate,"beginDate");
+		RequestCheckUtil::checkNotNull($this->billType,"billType");
+		RequestCheckUtil::checkNotNull($this->endDate,"endDate");
+		RequestCheckUtil::checkNotNull($this->page,"page");
+		RequestCheckUtil::checkNotNull($this->pageSize,"pageSize");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 65 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscBillinDetailwithcodeRequest.php

@@ -0,0 +1,65 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.billin.detailwithcode request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.08.13
+ */
+class AlibabaAlihealthDrugMscBillinDetailwithcodeRequest
+{
+	/** 
+	 * 单据号码
+	 **/
+	private $billCode;
+	
+	/** 
+	 * 企业refEntId
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setBillCode($billCode)
+	{
+		$this->billCode = $billCode;
+		$this->apiParas["bill_code"] = $billCode;
+	}
+
+	public function getBillCode()
+	{
+		return $this->billCode;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.billin.detailwithcode";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->billCode,"billCode");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 65 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscBilloutDetailwithcodesRequest.php

@@ -0,0 +1,65 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.billout.detailwithcodes request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.08.13
+ */
+class AlibabaAlihealthDrugMscBilloutDetailwithcodesRequest
+{
+	/** 
+	 * 单据号码
+	 **/
+	private $billCode;
+	
+	/** 
+	 * 企业refEntId
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setBillCode($billCode)
+	{
+		$this->billCode = $billCode;
+		$this->apiParas["bill_code"] = $billCode;
+	}
+
+	public function getBillCode()
+	{
+		return $this->billCode;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.billout.detailwithcodes";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->billCode,"billCode");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 163 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscDrugtableRequest.php

@@ -0,0 +1,163 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.drugtable request
+ * 
+ * @author auto create
+ * @since 1.0, 2023.12.14
+ */
+class AlibabaAlihealthDrugMscDrugtableRequest
+{
+	/** 
+	 * 批准文号
+	 **/
+	private $approvalLicenceNo;
+	
+	/** 
+	 * 包装规格
+	 **/
+	private $packageSpec;
+	
+	/** 
+	 * 页面大小
+	 **/
+	private $page;
+	
+	/** 
+	 * 页码
+	 **/
+	private $pageSize;
+	
+	/** 
+	 * 药品通用名
+	 **/
+	private $physicName;
+	
+	/** 
+	 * 制剂规格
+	 **/
+	private $prepnSpec;
+	
+	/** 
+	 * 生产企业名字
+	 **/
+	private $produceEntName;
+	
+	/** 
+	 * 调用企业id
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setApprovalLicenceNo($approvalLicenceNo)
+	{
+		$this->approvalLicenceNo = $approvalLicenceNo;
+		$this->apiParas["approval_licence_no"] = $approvalLicenceNo;
+	}
+
+	public function getApprovalLicenceNo()
+	{
+		return $this->approvalLicenceNo;
+	}
+
+	public function setPackageSpec($packageSpec)
+	{
+		$this->packageSpec = $packageSpec;
+		$this->apiParas["package_spec"] = $packageSpec;
+	}
+
+	public function getPackageSpec()
+	{
+		return $this->packageSpec;
+	}
+
+	public function setPage($page)
+	{
+		$this->page = $page;
+		$this->apiParas["page"] = $page;
+	}
+
+	public function getPage()
+	{
+		return $this->page;
+	}
+
+	public function setPageSize($pageSize)
+	{
+		$this->pageSize = $pageSize;
+		$this->apiParas["page_size"] = $pageSize;
+	}
+
+	public function getPageSize()
+	{
+		return $this->pageSize;
+	}
+
+	public function setPhysicName($physicName)
+	{
+		$this->physicName = $physicName;
+		$this->apiParas["physic_name"] = $physicName;
+	}
+
+	public function getPhysicName()
+	{
+		return $this->physicName;
+	}
+
+	public function setPrepnSpec($prepnSpec)
+	{
+		$this->prepnSpec = $prepnSpec;
+		$this->apiParas["prepn_spec"] = $prepnSpec;
+	}
+
+	public function getPrepnSpec()
+	{
+		return $this->prepnSpec;
+	}
+
+	public function setProduceEntName($produceEntName)
+	{
+		$this->produceEntName = $produceEntName;
+		$this->apiParas["produce_ent_name"] = $produceEntName;
+	}
+
+	public function getProduceEntName()
+	{
+		return $this->produceEntName;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.drugtable";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->page,"page");
+		RequestCheckUtil::checkNotNull($this->pageSize,"pageSize");
+		RequestCheckUtil::checkNotNull($this->physicName,"physicName");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 65 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetbyentidRequest.php

@@ -0,0 +1,65 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.getbyentid request
+ * 
+ * @author auto create
+ * @since 1.0, 2023.12.14
+ */
+class AlibabaAlihealthDrugMscGetbyentidRequest
+{
+	/** 
+	 * 准备要查询的企业ID(返回该企业ID的详细信息)
+	 **/
+	private $entId;
+	
+	/** 
+	 * 接口调用企业的唯一标识(接口调用者)
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setEntId($entId)
+	{
+		$this->entId = $entId;
+		$this->apiParas["ent_id"] = $entId;
+	}
+
+	public function getEntId()
+	{
+		return $this->entId;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.getbyentid";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->entId,"entId");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 65 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetbyrefentidRequest.php

@@ -0,0 +1,65 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.getbyrefentid request
+ * 
+ * @author auto create
+ * @since 1.0, 2023.12.14
+ */
+class AlibabaAlihealthDrugMscGetbyrefentidRequest
+{
+	/** 
+	 * 准备要查询的企业唯一标识(返回该唯一标识企业的详细信息)
+	 **/
+	private $destRefEntId;
+	
+	/** 
+	 * 接口调用企业的唯一标识(接口调用者)
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setDestRefEntId($destRefEntId)
+	{
+		$this->destRefEntId = $destRefEntId;
+		$this->apiParas["dest_ref_ent_id"] = $destRefEntId;
+	}
+
+	public function getDestRefEntId()
+	{
+		return $this->destRefEntId;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.getbyrefentid";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->destRefEntId,"destRefEntId");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 65 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetentinfoRequest.php

@@ -0,0 +1,65 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.getentinfo request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.09.01
+ */
+class AlibabaAlihealthDrugMscGetentinfoRequest
+{
+	/** 
+	 * 企业名称
+	 **/
+	private $entName;
+	
+	/** 
+	 * 调用者企业唯一标识
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setEntName($entName)
+	{
+		$this->entName = $entName;
+		$this->apiParas["ent_name"] = $entName;
+	}
+
+	public function getEntName()
+	{
+		return $this->entName;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.getentinfo";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->entName,"entName");
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

+ 64 - 0
lib/taobao-sdk/top/request/AlibabaAlihealthDrugMscGetentinfolistRequest.php

@@ -0,0 +1,64 @@
+<?php
+/**
+ * TOP API: alibaba.alihealth.drug.msc.getentinfolist request
+ * 
+ * @author auto create
+ * @since 1.0, 2025.09.08
+ */
+class AlibabaAlihealthDrugMscGetentinfolistRequest
+{
+	/** 
+	 * 查询企业信息参数
+	 **/
+	private $queryParam;
+	
+	/** 
+	 * refEntId
+	 **/
+	private $refEntId;
+	
+	private $apiParas = array();
+	
+	public function setQueryParam($queryParam)
+	{
+		$this->queryParam = $queryParam;
+		$this->apiParas["query_param"] = $queryParam;
+	}
+
+	public function getQueryParam()
+	{
+		return $this->queryParam;
+	}
+
+	public function setRefEntId($refEntId)
+	{
+		$this->refEntId = $refEntId;
+		$this->apiParas["ref_ent_id"] = $refEntId;
+	}
+
+	public function getRefEntId()
+	{
+		return $this->refEntId;
+	}
+
+	public function getApiMethodName()
+	{
+		return "alibaba.alihealth.drug.msc.getentinfolist";
+	}
+	
+	public function getApiParas()
+	{
+		return $this->apiParas;
+	}
+	
+	public function check()
+	{
+		
+		RequestCheckUtil::checkNotNull($this->refEntId,"refEntId");
+	}
+	
+	public function putOtherTextParam($key, $value) {
+		$this->apiParas[$key] = $value;
+		$this->$key = $value;
+	}
+}

Some files were not shown because too many files changed in this diff