zhangguidong %!s(int64=2) %!d(string=hai) anos
pai
achega
f5890263fa
Modificáronse 100 ficheiros con 7731 adicións e 1109 borrados
  1. 0 1
      application/common/model/User.php
  2. 14 2
      composer.json
  3. 8 0
      vendor/aliyuncs/oss-sdk-php/CHANGELOG.md
  4. 86 0
      vendor/aliyuncs/oss-sdk-php/samples/Bucket.php
  5. 1 1
      vendor/aliyuncs/oss-sdk-php/samples/Image.php
  6. 1 1
      vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php
  7. 211 0
      vendor/aliyuncs/oss-sdk-php/samples/Object.php
  8. 1 1
      vendor/aliyuncs/oss-sdk-php/samples/Signature.php
  9. 7 3
      vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php
  10. 15 5
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php
  11. 21 10
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php
  12. 14 3
      vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php
  13. 171 15
      vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php
  14. 1 1
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php
  15. 1 1
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php
  16. 1 1
      vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php
  17. 86 34
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php
  18. 1 1
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectRequestPaymentTest.php
  19. 4 4
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php
  20. 1 1
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php
  21. 3 3
      vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php
  22. 5 0
      vendor/autoload.php
  23. 102 11
      vendor/composer/ClassLoader.php
  24. 21 6
      vendor/composer/InstalledVersions.php
  25. 7 270
      vendor/composer/autoload_classmap.php
  26. 16 1
      vendor/composer/autoload_files.php
  27. 4 1
      vendor/composer/autoload_namespaces.php
  28. 43 3
      vendor/composer/autoload_psr4.php
  29. 11 29
      vendor/composer/autoload_real.php
  30. 275 273
      vendor/composer/autoload_static.php
  31. 3603 6
      vendor/composer/installed.json
  32. 1502 26
      vendor/composer/installed.php
  33. 2 2
      vendor/composer/platform_check.php
  34. 0 29
      vendor/qiniu/php-sdk/.travis.yml
  35. 17 0
      vendor/qiniu/php-sdk/CHANGELOG.md
  36. 4 0
      vendor/qiniu/php-sdk/autoload.php
  37. 16 5
      vendor/qiniu/php-sdk/composer.json
  38. 5 1
      vendor/qiniu/php-sdk/examples/bucket_lifecycleRule.php
  39. 7 2
      vendor/qiniu/php-sdk/examples/rs_batch_change_type.php
  40. 5 3
      vendor/qiniu/php-sdk/examples/rs_change_mime.php
  41. 5 3
      vendor/qiniu/php-sdk/examples/rs_change_status.php
  42. 6 4
      vendor/qiniu/php-sdk/examples/rs_change_type.php
  43. 5 3
      vendor/qiniu/php-sdk/examples/rs_copy.php
  44. 5 3
      vendor/qiniu/php-sdk/examples/rs_delete.php
  45. 5 3
      vendor/qiniu/php-sdk/examples/rs_delete_after_days.php
  46. 5 3
      vendor/qiniu/php-sdk/examples/rs_move.php
  47. 5 3
      vendor/qiniu/php-sdk/examples/rs_prefetch.php
  48. 1 1
      vendor/qiniu/php-sdk/examples/upload_multi_demos.php
  49. 105 39
      vendor/qiniu/php-sdk/src/Qiniu/Auth.php
  50. 7 1
      vendor/qiniu/php-sdk/src/Qiniu/Config.php
  51. 1 21
      vendor/qiniu/php-sdk/src/Qiniu/Http/Client.php
  52. 45 9
      vendor/qiniu/php-sdk/src/Qiniu/Http/Response.php
  53. 87 44
      vendor/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php
  54. 13 4
      vendor/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php
  55. 266 15
      vendor/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php
  56. 22 12
      vendor/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php
  57. 17 0
      vendor/qiniu/php-sdk/src/Qiniu/functions.php
  58. 174 0
      vendor/qiniu/php-sdk/tests/Qiniu/Tests/AuthTest.php
  59. 187 40
      vendor/qiniu/php-sdk/tests/Qiniu/Tests/BucketTest.php
  60. 14 13
      vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php
  61. 5 5
      vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php
  62. 17 0
      vendor/qiniu/php-sdk/tests/Qiniu/Tests/FormUpTest.php
  63. 256 4
      vendor/qiniu/php-sdk/tests/Qiniu/Tests/ResumeUpTest.php
  64. 13 4
      vendor/qiniu/php-sdk/tests/bootstrap.php
  65. 53 43
      vendor/zoujingli/ip2region/Ip2Region.php
  66. BIN=BIN
      vendor/zoujingli/ip2region/ip2region.db
  67. 4 3
      vendor/zoujingli/ip2region/test.php
  68. 3 4
      vendor/zoujingli/think-library/src/Controller.php
  69. 7 3
      vendor/zoujingli/think-library/src/helper/PageHelper.php
  70. 11 5
      vendor/zoujingli/think-library/src/tools/JsonRpcClient.php
  71. 40 13
      vendor/zoujingli/think-library/src/tools/JsonRpcServer.php
  72. 1 1
      vendor/zoujingli/wechat-developer/AliPay/App.php
  73. 2 2
      vendor/zoujingli/wechat-developer/AliPay/Bill.php
  74. 2 2
      vendor/zoujingli/wechat-developer/AliPay/Pos.php
  75. 2 2
      vendor/zoujingli/wechat-developer/AliPay/Scan.php
  76. 2 2
      vendor/zoujingli/wechat-developer/AliPay/Trade.php
  77. 1 1
      vendor/zoujingli/wechat-developer/AliPay/Transfer.php
  78. 1 1
      vendor/zoujingli/wechat-developer/AliPay/Wap.php
  79. 1 1
      vendor/zoujingli/wechat-developer/AliPay/Web.php
  80. 2 0
      vendor/zoujingli/wechat-developer/README.md
  81. 5 2
      vendor/zoujingli/wechat-developer/We.php
  82. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Card.php
  83. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicAliPay.php
  84. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php
  85. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php
  86. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWePay.php
  87. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeWork.php
  88. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php
  89. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/DataError.php
  90. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Contracts/Prpcrypt.php
  91. 14 10
      vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php
  92. 1 2
      vendor/zoujingli/wechat-developer/WeChat/Custom.php
  93. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php
  94. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php
  95. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidInstanceException.php
  96. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php
  97. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php
  98. 1 3
      vendor/zoujingli/wechat-developer/WeChat/Limit.php
  99. 4 4
      vendor/zoujingli/wechat-developer/WeChat/Media.php
  100. 1 1
      vendor/zoujingli/wechat-developer/WeChat/Menu.php

+ 0 - 1
application/common/model/User.php

@@ -5,7 +5,6 @@ namespace app\common\model;
 use app\common\model\Order;
 use app\common\model\Sms;
 use Firebase\JWT\JWT;
-use app\common\model\UserIntegralLog;
 use think\Model;
 use app\common\library\Common;
 use think\facade\Validate;

+ 14 - 2
composer.json

@@ -9,7 +9,7 @@
     }
   ],
   "require": {
-    "php": ">=5.6",
+    "php": ">=7.3",
     "ext-gd": "*",
     "ext-curl": "*",
     "ext-json": "*",
@@ -20,12 +20,24 @@
     "topthink/framework": "5.1.*",
     "zoujingli/ip2region": "^1.0",
     "zoujingli/think-library": "5.1.x-dev",
-    "zoujingli/weopen-developer": "dev-master"
+    "zoujingli/weopen-developer": "dev-master",
+    "hg/apidoc": "1.1.x",
+    "alibabacloud/sdk": "^1.8",
+    "firebase/php-jwt": "^5.2",
+    "overtrue/wechat": "~4.0",
+    "phpoffice/phpexcel": "^1.8",
+    "phpoffice/phpspreadsheet": "^1.23"
   },
   "repositories": {
     "packagist": {
       "type": "composer",
       "url": "https://mirrors.aliyun.com/composer"
     }
+  },
+  "config": {
+    "allow-plugins": {
+      "topthink/think-installer": true,
+      "easywechat-composer/easywechat-composer": true
+    }
   }
 }

+ 8 - 0
vendor/aliyuncs/oss-sdk-php/CHANGELOG.md

@@ -1,5 +1,13 @@
 # ChangeLog - Aliyun OSS SDK for PHP
 
+## v2.5.0 / 2022-05-13
+* Added: support bucket transfer acceleration.
+* Added: support bucket cname token.
+* Added: support listobjectsV2.
+
+## v2.4.3 / 2021-08-25
+* Fixed: integer overflow in PHP5.x.
+
 ## v2.4.2 / 2021-06-04
 * Compatible with PHP8.
 * Fixed: compatible with PHP5.4.

+ 86 - 0
vendor/aliyuncs/oss-sdk-php/samples/Bucket.php

@@ -18,6 +18,24 @@ Common::println("bucket $bucket created");
 $doesExist = $ossClient->doesBucketExist($bucket);
 Common::println("bucket $bucket exist? " . ($doesExist ? "yes" : "no"));
 
+// Get the region of bucket
+$regions = $ossClient->getBucketLocation($bucket);
+Common::println("bucket $bucket region: " .print_r($regions,true));
+
+// Get the meta of a bucket
+$metas  = $ossClient->getBucketMeta($bucket);
+Common::println("bucket $bucket meta: " .print_r($metas,true));
+
+// Get the info of bucket
+$info = $ossClient->getBucketInfo($bucket);
+Common::println("bucket name:".$info->getName()."\n");
+Common::println("bucket location:". $info->getLocation()."\n");
+Common::println("bucket creation time:".$info->getCreateDate()."\n");
+Common::println("bucket storage class:".$info->getStorageClass()."\n");
+Common::println("bucket extranet endpoint:".$info->getExtranetEndpoint()."\n");
+Common::println("bucket intranet endpoint:".$info->getIntranetEndpoint()."\n");
+
+
 // Get the bucket list
 $bucketListInfo = $ossClient->listBuckets();
 
@@ -33,6 +51,9 @@ Common::println("bucket $bucket acl get: " . $acl);
 
 createBucket($ossClient, $bucket);
 doesBucketExist($ossClient, $bucket);
+getBucketLocation($ossClient, $bucket);
+getBucketMeta($ossClient,$bucket);
+getBucketInfo($ossClient, $bucket);
 deleteBucket($ossClient, $bucket);
 putBucketAcl($ossClient, $bucket);
 getBucketAcl($ossClient, $bucket);
@@ -83,6 +104,71 @@ function doesBucketExist($ossClient, $bucket)
 }
 
 /**
+ * Get the info of bucket
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ */
+function getBucketInfo($ossClient, $bucket)
+{
+	try {
+		$info = $ossClient->getBucketInfo($bucket);
+		printf("bucket name:%s\n", $info->getName());
+		printf("bucket location:%s\n", $info->getLocation());
+		printf("bucket creation time:%s\n", $info->getCreateDate());
+		printf("bucket storage class:%s\n", $info->getStorageClass());
+		printf("bucket extranet endpoint:%s\n", $info->getExtranetEndpoint());
+		printf("bucket intranet endpoint:%s\n", $info->getIntranetEndpoint());
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+
+/**
+ * Get the meta of a bucket
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ */
+function getBucketLocation($ossClient, $bucket)
+{
+	try {
+		$regions = $ossClient->getBucketLocation($bucket);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	
+	print("bucket $bucket region: " .print_r($regions,true));
+	
+}
+
+
+/**
+ *  Get the bucket's meta
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ */
+function getBucketMeta($ossClient, $bucket)
+{
+	try {
+		$metas = $ossClient->getBucketMeta($bucket);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+	print("bucket $bucket meta: " .print_r($metas,true));
+}
+
+/**
  * Delete a bucket. If the bucket is not empty, the deletion fails.
  * A bucket which is not empty indicates that it does not contain any objects or parts that are not completely uploaded during multipart upload
  *

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/samples/Image.php

@@ -83,5 +83,5 @@ function printImage($func, $imageFile)
     Common::println("$func, image width: " . $array[0]);
     Common::println("$func, image height: " . $array[1]);
     Common::println("$func, image type: " . ($array[2] === 2 ? 'jpg' : 'png'));
-    Common::println("$func, image size: " . ceil(filesize($imageFile)));
+    Common::println("$func, image size: " . ceil(sprintf('%u',filesize($imageFile))));
 }

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/samples/MultipartUpload.php

@@ -85,7 +85,7 @@ function putObjectByRawApis($ossClient, $bucket)
      */
     $partSize = 10 * 1024 * 1024;
     $uploadFile = __FILE__;
-    $uploadFileSize = filesize($uploadFile);
+    $uploadFileSize = sprintf('%u',filesize($uploadFile));
     $pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);
     $responseUploadPart = array();
     $uploadPosition = 0;

+ 211 - 0
vendor/aliyuncs/oss-sdk-php/samples/Object.php

@@ -3,6 +3,7 @@ require_once __DIR__ . '/Common.php';
 
 use OSS\OssClient;
 use OSS\Core\OssException;
+use OSS\Model\RestoreConfig;
 
 $bucket = Common::getBucketName();
 $ossClient = Common::getOssClient();
@@ -48,6 +49,17 @@ $ossClient->getObject($bucket, "c.file", $options);
 Common::println("b.file is fetched to the local file: c.file.localcopy");
 Common::println("b.file is created");
 
+
+// Restore Object
+$day = 3;
+$tier = 'Expedited';
+$config = new RestoreConfig($day,$tier);
+$options = array(
+	OssClient::OSS_RESTORE_CONFIG => $config
+);
+$ossClient->restoreObject($bucket, 'b.file',$options);
+
+
 // Copy an object
 $result = $ossClient->copyObject($bucket, "c.file", $bucket, "c.file.copy");
 Common::println("lastModifiedTime: " . $result[0]);
@@ -75,9 +87,37 @@ foreach($result as $object)
 sleep(2);
 unlink("c.file.localcopy");
 
+// Normal upload and download speed limit
+$object= "b.file";
+$content = "hello world";
+
+// The speed limit is 100 KB/s, which is 819200 bit/s.
+$options = array(
+	OssClient::OSS_HEADERS => array(
+		OssClient::OSS_TRAFFIC_LIMIT => 819200,
+	));
+// Speed limit upload.
+$ossClient->putObject($bucket, $object, $content, $options);
+
+// Speed limit download.
+$ossClient->getObject($bucket, $object, $options);
+
+// Signed URL upload and download speed limit
+
+// Create a URL for uploading with a limited rate, and the validity period is 60s.
+$timeout = 60;
+$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
+Common::println("b.file speed limit upload url:".$signedUrl.PHP_EOL);
+
+// Create a URL for speed-limited downloads, with a validity period of 120s.
+$timeout = 120;
+$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
+Common::println("b.file speed limit download url:".$signedUrl.PHP_EOL);
+
 //******************************* For complete usage, see the following functions ****************************************************
 
 listObjects($ossClient, $bucket);
+listObjectsV2($ossClient, $bucket);
 listAllObjects($ossClient, $bucket);
 createObjectDir($ossClient, $bucket);
 putObject($ossClient, $bucket);
@@ -92,6 +132,11 @@ deleteObjects($ossClient, $bucket);
 doesObjectExist($ossClient, $bucket);
 getSymlink($ossClient, $bucket);
 putSymlink($ossClient, $bucket);
+putObjectSpeed($ossClient, $bucket);
+getObjectSpeed($ossClient, $bucket);
+signUrlSpeedUpload($ossClient, $bucket);
+signUrlSpeedDownload($ossClient, $bucket);
+restoreObject($ossClient,$bucket);
 /**
  * Create a 'virtual' folder
  *
@@ -194,6 +239,10 @@ function listObjects($ossClient, $bucket)
         print("objectList:\n");
         foreach ($objectList as $objectInfo) {
             print($objectInfo->getKey() . "\n");
+            if($objectInfo->getOwner() != null){
+                printf("owner id:".$objectInfo->getOwner()->getId() . "\n");
+                printf("owner name:".$objectInfo->getOwner()->getDisplayName() . "\n");
+            }
         }
     }
     if (!empty($prefixList)) {
@@ -205,6 +254,55 @@ function listObjects($ossClient, $bucket)
 }
 
 /**
+ * Lists all files and folders in the bucket.
+ * Note if there's more items than the max-keys specified, the caller needs to use the nextMarker returned as the value for the next call's maker paramter.
+ * Loop through all the items returned from ListObjects.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function listObjectsV2($ossClient, $bucket)
+{
+	$prefix = 'oss-php-sdk-test/';
+	$delimiter = '/';
+	$maxkeys = 1000;
+	$options = array(
+		'delimiter' => $delimiter,
+		'prefix' => $prefix,
+		'max-keys' => $maxkeys,
+		'start-after' =>'test-object',
+		'fetch-owner' =>'true',
+	);
+	try {
+		$listObjectInfo = $ossClient->listObjectsV2($bucket, $options);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+	$objectList = $listObjectInfo->getObjectList(); // object list
+	$prefixList = $listObjectInfo->getPrefixList(); // directory list
+	if (!empty($objectList)) {
+		print("objectList:\n");
+		foreach ($objectList as $objectInfo) {
+			print($objectInfo->getKey() . "\n");
+			if($objectInfo->getOwner() != null){
+				printf("owner id:".$objectInfo->getOwner()->getId() . "\n");
+				printf("owner name:".$objectInfo->getOwner()->getDisplayName() . "\n");
+			}
+		}
+	}
+	if (!empty($prefixList)) {
+		print("prefixList: \n");
+		foreach ($prefixList as $prefixInfo) {
+			print($prefixInfo->getPrefix() . "\n");
+		}
+	}
+}
+
+/**
  * Lists all folders and files under the bucket. Use nextMarker repeatedly to get all objects.
  *
  * @param OssClient $ossClient OssClient instance
@@ -516,3 +614,116 @@ function doesObjectExist($ossClient, $bucket)
     var_dump($exist);
 }
 
+/**
+ * Speed limit upload.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function putObjectSpeed($ossClient, $bucket)
+{
+	$object = "upload-test-object-name.txt";
+	$content = file_get_contents(__FILE__);
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			OssClient::OSS_TRAFFIC_LIMIT => 819200,
+		));
+	try {
+		$ossClient->putObject($bucket, $object, $content, $options);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Speed limit download.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function getObjectSpeed($ossClient, $bucket)
+{
+	$object = "upload-test-object-name.txt";
+	$options = array(
+		OssClient::OSS_HEADERS => array(
+			OssClient::OSS_TRAFFIC_LIMIT => 819200,
+		));
+	try {
+		$ossClient->getObject($bucket, $object, $options);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Speed limit download.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function signUrlSpeedUpload($ossClient, $bucket)
+{
+	$object = "upload-test-object-name.txt";
+	$timeout = 120;
+	$options = array(
+		OssClient::OSS_TRAFFIC_LIMIT => 819200,
+	);
+	$timeout = 60;
+	$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
+	print($signedUrl);
+}
+
+
+/**
+ * Speed limit download.
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function signUrlSpeedDownload($ossClient, $bucket)
+{
+	$object = "upload-test-object-name.txt";
+	$timeout = 120;
+	$options = array(
+		OssClient::OSS_TRAFFIC_LIMIT => 819200,
+	);
+	$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
+	print($signedUrl);
+	print(__FUNCTION__ . ": OK" . "\n");
+}
+
+/**
+ * Restore object
+ *
+ * @param OssClient $ossClient OssClient instance
+ * @param string $bucket bucket name
+ * @return null
+ */
+function restoreObject($ossClient, $bucket)
+{
+	$object = "oss-php-sdk-test/upload-test-object-name.txt";
+	$day = 3;
+	$tier = 'Expedited';
+	$config = new RestoreConfig($day,$tier);
+	$options = array(
+		OssClient::OSS_RESTORE_CONFIG => $config
+	);
+	try {
+		$ossClient->restoreObject($bucket, $object,$options);
+	} catch (OssException $e) {
+		printf(__FUNCTION__ . ": FAILED\n");
+		printf($e->getMessage() . "\n");
+		return;
+	}
+	print(__FUNCTION__ . ": OK" . "\n");
+}

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/samples/Signature.php

@@ -130,7 +130,7 @@ function getSignedUrlForPuttingObjectFromFile($ossClient, $bucket)
     $request->set_method('PUT');
     $request->add_header('Content-Type', 'txt');
     $request->set_read_file($file);
-    $request->set_read_stream_size(filesize($file));
+    $request->set_read_stream_size(sprintf('%u',filesize($file)));
     $request->send_request();
     $res = new ResponseCore($request->get_response_header(),
         $request->get_response_body(), $request->get_response_code());

+ 7 - 3
vendor/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php

@@ -31,7 +31,11 @@ class OssUtil
         uksort($options, 'strnatcasecmp');
         foreach ($options as $key => $value) {
             if (is_string($key) && !is_array($value)) {
-                $temp[] = rawurlencode($key) . '=' . rawurlencode($value);
+                if (strlen($value) > 0) {
+                    $temp[] = rawurlencode($key) . '=' . rawurlencode($value);
+                } else {
+                    $temp[] = rawurlencode($key);
+                }
             }
         }
         return implode('&', $temp);
@@ -237,7 +241,7 @@ class OssUtil
      */
     public static function generateFile($filename, $size)
     {
-        if (file_exists($filename) && $size == filesize($filename)) {
+        if (file_exists($filename) && $size == sprintf('%u',filesize($filename))) {
             echo $filename . " already exists, no need to create again. ";
             return;
         }
@@ -284,7 +288,7 @@ BBB;
         if (($to_pos - $from_pos) > self::OSS_MAX_PART_SIZE) {
             return $content_md5;
         }
-        $filesize = filesize($filename);
+        $filesize = sprintf('%u',filesize($filename));
         if ($from_pos >= $filesize || $to_pos >= $filesize || $from_pos < 0 || $to_pos < 0) {
             return $content_md5;
         }

+ 15 - 5
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php

@@ -1,7 +1,6 @@
 <?php
 
 namespace OSS\Model;
-
 /**
  *
  * Class ObjectInfo
@@ -23,7 +22,7 @@ class ObjectInfo
      * @param string $lastModified
      * @param string $eTag
      * @param string $type
-     * @param int $size
+     * @param string $size
      * @param string $storageClass
      */
     public function __construct($key, $lastModified, $eTag, $type, $size, $storageClass)
@@ -67,15 +66,26 @@ class ObjectInfo
     {
         return $this->type;
     }
-
+    
     /**
+     * php7 && 64bit can use it
      * @return int
      */
     public function getSize()
     {
+        return (int)$this->size;
+    }
+    
+    
+    /**
+     * php5.x or 32bit must use it
+     * @return string
+     */
+    public function getSizeStr()
+    {
         return $this->size;
     }
-
+    
     /**
      * @return string
      */
@@ -88,6 +98,6 @@ class ObjectInfo
     private $lastModified = "";
     private $eTag = "";
     private $type = "";
-    private $size = 0;
+    private $size = "0";
     private $storageClass = "";
 }

+ 21 - 10
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php

@@ -23,7 +23,7 @@ class ObjectVersionInfo
      * @param string $lastModified
      * @param string $eTag
      * @param string $type
-     * @param int $size
+     * @param string $size
      * @param string $storageClass
      * @param string $isLatest
      */
@@ -78,14 +78,25 @@ class ObjectVersionInfo
     {
         return $this->type;
     }
-
-    /**
-     * @return int
-     */
-    public function getSize()
-    {
-        return $this->size;
-    }
+	
+	/**
+	 * php7 && 64bit can use it
+	 * @return int
+	 */
+	public function getSize()
+	{
+		return (int)$this->size;
+	}
+	
+	
+	/**
+	 * php5.x or 32bit must use it
+	 * @return string
+	 */
+	public function getSizeStr()
+	{
+		return $this->size;
+	}
 
     /**
      * @return string
@@ -108,7 +119,7 @@ class ObjectVersionInfo
     private $lastModified = "";
     private $eTag = "";
     private $type = "";
-    private $size = 0;
+    private $size = "0";
     private $storageClass = "";
     private $isLatest = "";
 }

+ 14 - 3
vendor/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php

@@ -14,7 +14,7 @@ class PartInfo
      * @param int $partNumber
      * @param string $lastModified
      * @param string $eTag
-     * @param int $size
+     * @param string $size
      */
     public function __construct($partNumber, $lastModified, $eTag, $size)
     {
@@ -49,15 +49,26 @@ class PartInfo
     }
 
     /**
+	 * php7 && 64bit can use it
      * @return int
      */
     public function getSize()
     {
-        return $this->size;
+        return (int)$this->size;
     }
+	
+	
+	/**
+	 * php5.x or 32bit must use it
+	 * @return string
+	 */
+	public function getSizeStr()
+	{
+		return $this->size;
+	}
 
     private $partNumber = 0;
     private $lastModified = "";
     private $eTag = "";
-    private $size = 0;
+    private $size = "0";
 }

+ 171 - 15
vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php

@@ -12,6 +12,7 @@ use OSS\Model\LoggingConfig;
 use OSS\Model\LiveChannelConfig;
 use OSS\Model\LiveChannelInfo;
 use OSS\Model\LiveChannelListInfo;
+use OSS\Model\ObjectListInfoV2;
 use OSS\Model\StorageCapacityConfig;
 use OSS\Result\AclResult;
 use OSS\Result\BodyResult;
@@ -29,6 +30,7 @@ use OSS\Result\ListBucketsResult;
 use OSS\Result\ListMultipartUploadResult;
 use OSS\Model\ListMultipartUploadInfo;
 use OSS\Result\ListObjectsResult;
+use OSS\Result\ListObjectsV2Result;
 use OSS\Result\ListPartsResult;
 use OSS\Result\PutSetDeleteResult;
 use OSS\Result\DeleteObjectsResult;
@@ -72,6 +74,11 @@ use OSS\Result\ListObjectVersionsResult;
 use OSS\Model\DeleteObjectInfo;
 use OSS\Model\DeletedObjectInfo;
 use OSS\Result\DeleteObjectVersionsResult;
+use OSS\Model\TransferAccelerationConfig;
+use OSS\Result\GetBucketTransferAccelerationResult;
+use OSS\Model\CnameTokenInfo;
+use OSS\Result\CreateBucketCnameTokenResult;
+use OSS\Result\GetBucketCnameTokenResult;
 
 /**
  * Class OssClient
@@ -542,12 +549,12 @@ class OssClient
         $options[self::OSS_BUCKET] = $bucket;
         $options[self::OSS_METHOD] = self::OSS_HTTP_POST;
         $options[self::OSS_OBJECT] = '/';
-        $options[self::OSS_SUB_RESOURCE] = 'cname';
         $options[self::OSS_CONTENT_TYPE] = 'application/xml';
         $cnameConfig = new CnameConfig();
         $cnameConfig->addCname($cname);
         $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml();
         $options[self::OSS_COMP] = 'add';
+        $options[self::OSS_CNAME] = '';
 
         $response = $this->auth($options);
         $result = new PutSetDeleteResult($response);
@@ -568,7 +575,7 @@ class OssClient
         $options[self::OSS_BUCKET] = $bucket;
         $options[self::OSS_METHOD] = self::OSS_HTTP_GET;
         $options[self::OSS_OBJECT] = '/';
-        $options[self::OSS_SUB_RESOURCE] = 'cname';
+        $options[self::OSS_CNAME] = '';
         $response = $this->auth($options);
         $result = new GetCnameResult($response);
         return $result->getData();
@@ -589,12 +596,12 @@ class OssClient
         $options[self::OSS_BUCKET] = $bucket;
         $options[self::OSS_METHOD] = self::OSS_HTTP_POST;
         $options[self::OSS_OBJECT] = '/';
-        $options[self::OSS_SUB_RESOURCE] = 'cname';
         $options[self::OSS_CONTENT_TYPE] = 'application/xml';
         $cnameConfig = new CnameConfig();
         $cnameConfig->addCname($cname);
         $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml();
         $options[self::OSS_COMP] = 'delete';
+        $options[self::OSS_CNAME] = '';
 
         $response = $this->auth($options);
         $result = new PutSetDeleteResult($response);
@@ -602,6 +609,52 @@ class OssClient
     }
 
     /**
+     * create a cname token for a bucket
+     *
+     * @param string $bucket bucket name
+     * @param array $options
+     * @throws OssException
+     * @return CnameToken
+     */
+    public function createBucketCnameToken($bucket, $cname, $options = NULL)
+    {
+        $this->precheckCommon($bucket, NULL, $options, false);
+        $options[self::OSS_BUCKET] = $bucket;
+        $options[self::OSS_METHOD] = self::OSS_HTTP_POST;
+        $options[self::OSS_OBJECT] = '/';
+        $options[self::OSS_CONTENT_TYPE] = 'application/xml';
+        $cnameConfig = new CnameConfig();
+        $cnameConfig->addCname($cname);
+        $options[self::OSS_CONTENT] = $cnameConfig->serializeToXml();
+        $options[self::OSS_COMP] = 'token';
+        $options[self::OSS_CNAME] = '';
+        $response = $this->auth($options);
+        $result = new CreateBucketCnameTokenResult($response);
+        return $result->getData();
+    }
+
+    /**
+     * get a cname token for a bucket
+     *
+     * @param string $bucket bucket name
+     * @param array $options
+     * @throws OssException
+     * @return CnameToken
+     */
+    public function getBucketCnameToken($bucket, $cname, $options = NULL)
+    {
+        $this->precheckCommon($bucket, NULL, $options, false);
+        $options[self::OSS_BUCKET] = $bucket;
+        $options[self::OSS_METHOD] = self::OSS_HTTP_GET;
+        $options[self::OSS_OBJECT] = '/';
+        $options[self::OSS_COMP] = 'token';
+        $options[self::OSS_CNAME] = $cname;
+        $response = $this->auth($options);
+        $result = new GetBucketCnameTokenResult($response);
+        return $result->getData();
+    }
+
+    /**
      * Creates a Live Channel under a bucket
      *
      * @param string $bucket bucket name
@@ -1493,6 +1546,52 @@ class OssClient
         return $result->getData();
     }
 
+
+    /**
+     * Put Bucket TransferAcceleration
+     * @param $bucket
+     * @param $enabled boolean
+     * @param null $options
+     * @return null
+     * @throws OssException
+     */
+
+    public function putBucketTransferAcceleration($bucket,$enabled,$options = NULL)
+    {
+        $this->precheckCommon($bucket, NULL, $options, false);
+        $options[self::OSS_BUCKET] = $bucket;
+        $options[self::OSS_METHOD] = self::OSS_HTTP_PUT;
+        $options[self::OSS_OBJECT] = '/';
+        $options[self::OSS_SUB_RESOURCE] = 'transferAcceleration';
+        $options[self::OSS_CONTENT_TYPE] = 'application/xml';
+        $config = new TransferAccelerationConfig();
+        $config->setEnabled($enabled);
+        $options[self::OSS_CONTENT] = $config->serializeToXml();
+        $response = $this->auth($options);
+        $result = new HeaderResult($response);
+        return $result->getData();
+    }
+
+    /**
+     * Put Bucket TransferAcceleration
+     * @param $bucket
+     * @param null $options
+     * @return enabled boolean
+     * @throws OssException
+     */
+    public function getBucketTransferAcceleration($bucket,$options = NULL)
+    {
+        $this->precheckCommon($bucket, NULL, $options, false);
+        $options[self::OSS_BUCKET] = $bucket;
+        $options[self::OSS_METHOD] = self::OSS_HTTP_GET;
+        $options[self::OSS_OBJECT] = '/';
+        $options[self::OSS_SUB_RESOURCE] = 'transferAcceleration';
+        $options[self::OSS_CONTENT_TYPE] = 'application/xml';
+        $response = $this->auth($options);
+        $result = new GetBucketTransferAccelerationResult($response);
+        return $result->getData();
+    }
+
     /**
      * Lists the bucket's object list (in ObjectListInfo)
      *
@@ -1528,6 +1627,52 @@ class OssClient
         $result = new ListObjectsResult($response);
         return $result->getData();
     }
+    
+    
+    /**
+     * Lists the bucket's object list v2 (in ObjectListInfoV2)
+     *
+     * @param string $bucket
+     * @param array $options are defined below:
+     * $options = array(
+     *      'max-keys'    => specifies max object count to return. By default is 100 and max value could be 1000.
+     *      'prefix'      => specifies the key prefix the returned objects must have. Note that the returned keys still contain the prefix.
+     *      'delimiter'   => The delimiter of object name for grouping object. When it's specified, listObjects will differeniate the object and folder. And it will return subfolder's objects.
+     *      'start-after' => The key of returned object must be greater than the 'start-after'.
+     *      'continuation-token' => The token from which the list operation must start.
+     *)
+     * Prefix, start-after and continuation-token are for filtering and paging. Their length must be less than 256 bytes
+     * @throws OssException
+     * @return ObjectListInfoV2
+     */
+    public function listObjectsV2($bucket, $options = NULL)
+    {
+        $this->precheckCommon($bucket, NULL, $options, false);
+        $options[self::OSS_BUCKET] = $bucket;
+        $options[self::OSS_METHOD] = self::OSS_HTTP_GET;
+        $options[self::OSS_OBJECT] = '/';
+        $query = isset($options[self::OSS_QUERY_STRING]) ? $options[self::OSS_QUERY_STRING] : array();
+        $temp = array(
+            self::OSS_LIST_TYPE=>2,
+            self::OSS_ENCODING_TYPE => self::OSS_ENCODING_TYPE_URL,
+            self::OSS_DELIMITER => isset($options[self::OSS_DELIMITER]) ? $options[self::OSS_DELIMITER] : '/',
+            self::OSS_PREFIX => isset($options[self::OSS_PREFIX]) ? $options[self::OSS_PREFIX] : '',
+            self::OSS_MAX_KEYS => isset($options[self::OSS_MAX_KEYS]) ? $options[self::OSS_MAX_KEYS] : self::OSS_MAX_KEYS_VALUE,
+            self::OSS_START_AFTER => isset($options[self::OSS_START_AFTER]) ? $options[self::OSS_START_AFTER] : '',
+        );
+        if(isset($options[self::OSS_CONTINUATION_TOKEN])){
+            $temp[self::OSS_CONTINUATION_TOKEN] = $options[self::OSS_CONTINUATION_TOKEN];
+        }
+        $options[self::OSS_QUERY_STRING] = array_merge(
+            $query,$temp
+        );
+        $response = $this->auth($options);
+        $result = new ListObjectsV2Result($response);
+        return $result->getData();
+    }
+    
+    
+    
 
     /**
      * Lists the bucket's object with version information (in ObjectListInfo)
@@ -1616,8 +1761,8 @@ class OssClient
 
         $is_check_md5 = $this->isCheckMD5($options);
         if ($is_check_md5) {
-        	$content_md5 = base64_encode(md5($content, true));
-        	$options[self::OSS_CONTENT_MD5] = $content_md5;
+            $content_md5 = base64_encode(md5($content, true));
+            $options[self::OSS_CONTENT_MD5] = $content_md5;
         }
         
         if (!isset($options[self::OSS_CONTENT_TYPE])) {
@@ -1698,7 +1843,7 @@ class OssClient
             throw new OssException($file . " file does not exist");
         }
         $options[self::OSS_FILE_UPLOAD] = $file;
-        $file_size = filesize($options[self::OSS_FILE_UPLOAD]);
+        $file_size = sprintf('%u',filesize($options[self::OSS_FILE_UPLOAD]));
         $is_check_md5 = $this->isCheckMD5($options);
         if ($is_check_md5) {
             $content_md5 = base64_encode(md5_file($options[self::OSS_FILE_UPLOAD], true));
@@ -1784,8 +1929,8 @@ class OssClient
         
         $is_check_md5 = $this->isCheckMD5($options);
         if ($is_check_md5) {
-        	$content_md5 = base64_encode(md5($content, true));
-        	$options[self::OSS_CONTENT_MD5] = $content_md5;
+            $content_md5 = base64_encode(md5($content, true));
+            $options[self::OSS_CONTENT_MD5] = $content_md5;
         }
 
         if (!isset($options[self::OSS_CONTENT_TYPE])) {
@@ -1816,7 +1961,7 @@ class OssClient
             throw new OssException($file . " file does not exist");
         }
         $options[self::OSS_FILE_UPLOAD] = $file;
-        $file_size = filesize($options[self::OSS_FILE_UPLOAD]);
+        $file_size =  sprintf('%u',filesize($options[self::OSS_FILE_UPLOAD]));
         $is_check_md5 = $this->isCheckMD5($options);
         if ($is_check_md5) {
             $content_md5 = base64_encode(md5_file($options[self::OSS_FILE_UPLOAD], true));
@@ -2334,10 +2479,12 @@ class OssClient
         $options[self::OSS_OBJECT] = $object;
         $options[self::OSS_UPLOAD_ID] = $uploadId;
         $options[self::OSS_CONTENT_TYPE] = 'application/xml';
-        if (!is_array($listParts)) {
-            throw new OssException("listParts must be array type");
+        if (is_array($listParts)) {
+            $options[self::OSS_CONTENT] = OssUtil::createCompleteMultipartUploadXmlBody($listParts);
+        }  else {
+            $options[self::OSS_CONTENT] = "";
         }
-        $options[self::OSS_CONTENT] = OssUtil::createCompleteMultipartUploadXmlBody($listParts);
+
         $response = $this->auth($options);
         if (isset($options[self::OSS_CALLBACK]) && !empty($options[self::OSS_CALLBACK])) {
             $result = new CallbackResult($response);
@@ -2460,7 +2607,8 @@ class OssClient
         if (isset($options[self::OSS_CONTENT_LENGTH])) {
             $upload_file_size = (integer)$options[self::OSS_CONTENT_LENGTH];
         } else {
-            $upload_file_size = filesize($uploadFile);
+            $upload_file_size = sprintf('%u',filesize($uploadFile));
+
             if ($upload_file_size !== false) {
                 $upload_file_size -= $upload_position;  
             }
@@ -3179,6 +3327,8 @@ class OssClient
             self::OSS_WORM_ID,
             self::OSS_TRAFFIC_LIMIT,
             self::OSS_VERSION_ID,
+            self::OSS_CONTINUATION_TOKEN,
+            self::OSS_CNAME,
         );
 
         foreach ($signableList as $item) {
@@ -3410,6 +3560,9 @@ class OssClient
     const OSS_PREFIX = 'prefix';
     const OSS_DELIMITER = 'delimiter';
     const OSS_MARKER = 'marker';
+    const OSS_FETCH_OWNER = 'fetch-owner';
+    const OSS_START_AFTER = 'start-after';
+    const OSS_CONTINUATION_TOKEN = 'continuation-token';
     const OSS_ACCEPT_ENCODING = 'Accept-Encoding';
     const OSS_CONTENT_MD5 = 'Content-Md5';
     const OSS_SELF_CONTENT_MD5 = 'x-oss-meta-md5';
@@ -3462,6 +3615,7 @@ class OssClient
     const OSS_VERSION_ID_MARKER = 'version-id-marker';
     const OSS_VERSION_ID = 'versionId';
     const OSS_HEADER_VERSION_ID = 'x-oss-version-id';
+    const OSS_CNAME = 'cname';
 
     //private URLs
     const OSS_URL_ACCESS_KEY_ID = 'OSSAccessKeyId';
@@ -3494,6 +3648,8 @@ class OssClient
     const OSS_ACL_TYPE_PUBLIC_READ_WRITE = 'public-read-write';
     const OSS_ENCODING_TYPE = "encoding-type";
     const OSS_ENCODING_TYPE_URL = "url";
+    
+    const OSS_LIST_TYPE = "list-type";
 
     // Domain Types
     const OSS_HOST_TYPE_NORMAL = "normal";//http://bucket.oss-cn-hangzhou.aliyuncs.com/object
@@ -3508,8 +3664,8 @@ class OssClient
     );
     // OssClient version information
     const OSS_NAME = "aliyun-sdk-php";
-    const OSS_VERSION = "2.4.2";
-    const OSS_BUILD = "20210604";
+    const OSS_VERSION = "2.5.0";
+    const OSS_BUILD = "20220513";
     const OSS_AUTHOR = "";
     const OSS_OPTIONS_ORIGIN = 'Origin';
     const OSS_OPTIONS_REQUEST_METHOD = 'Access-Control-Request-Method';

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php

@@ -56,7 +56,7 @@ class ListObjectVersionsResult extends Result
                 $lastModified = isset($content->LastModified) ? strval($content->LastModified) : "";
                 $eTag = isset($content->ETag) ? strval($content->ETag) : "";
                 $type = isset($content->Type) ? strval($content->Type) : "";
-                $size = isset($content->Size) ? intval($content->Size) : 0;
+                $size = isset($content->Size) ? strval($content->Size) : "0";
                 $storageClass = isset($content->StorageClass) ? strval($content->StorageClass) : "";
                 $isLatest = isset($content->IsLatest) ? strval($content->IsLatest) : "";
                 $retList[] = new ObjectVersionInfo($key, $versionId, $lastModified, $eTag, $type, $size, $storageClass, $isLatest);

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php

@@ -48,7 +48,7 @@ class ListObjectsResult extends Result
                 $lastModified = isset($content->LastModified) ? strval($content->LastModified) : "";
                 $eTag = isset($content->ETag) ? strval($content->ETag) : "";
                 $type = isset($content->Type) ? strval($content->Type) : "";
-                $size = isset($content->Size) ? intval($content->Size) : 0;
+                $size = isset($content->Size) ? strval($content->Size) : "0";
                 $storageClass = isset($content->StorageClass) ? strval($content->StorageClass) : "";
                 $retList[] = new ObjectInfo($key, $lastModified, $eTag, $type, $size, $storageClass);
             }

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php

@@ -33,7 +33,7 @@ class ListPartsResult extends Result
                 $partNumber = isset($part->PartNumber) ? intval($part->PartNumber) : "";
                 $lastModified = isset($part->LastModified) ? strval($part->LastModified) : "";
                 $eTag = isset($part->ETag) ? strval($part->ETag) : "";
-                $size = isset($part->Size) ? intval($part->Size) : "";
+                $size = isset($part->Size) ? strval($part->Size) : "";
                 $partList[] = new PartInfo($partNumber, $lastModified, $eTag, $size);
             }
         }

+ 86 - 34
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientMultipartUploadTest.php

@@ -69,17 +69,12 @@ class OssClientMultipartUploadTest extends TestOssClientBase
         $object = "mpu/multipart-test.txt";
         $copiedObject = "mpu/multipart-test.txt.copied";
         $this->ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__));
-        /**
-         *  step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
-         */
         try {
             $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
         } catch (OssException $e) {
             $this->assertFalse(true);
         }
-        /*
-         * step 2. uploadPartCopy
-         */
+
         $copyId = 1;
         $eTag = $this->ossClient->uploadPartCopy($this->bucket, $copiedObject, $this->bucket, $object, $copyId, $upload_id);
         $upload_parts[] = array(
@@ -94,9 +89,6 @@ class OssClientMultipartUploadTest extends TestOssClientBase
             $this->assertTrue(false);
         }
 
-        /**
-         * step 3.
-         */
         try {
             $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts);
         } catch (OssException $e) {
@@ -113,9 +105,6 @@ class OssClientMultipartUploadTest extends TestOssClientBase
         $object = "mpu/multipart-test.txt";
         $copiedObject = "mpu/multipart-test.txt.range.copied";
         $this->ossClient->putObject($this->bucket, $copiedObject, file_get_contents(__FILE__));
-        /**
-         *  step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
-         */
         try {
             $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
         } catch (OssException $e) {
@@ -142,9 +131,6 @@ class OssClientMultipartUploadTest extends TestOssClientBase
             $this->assertTrue(false);
         }
 
-        /**
-         * step 3.
-         */
         try {
             $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, $upload_parts);
         } catch (OssException $e) {
@@ -159,20 +145,14 @@ class OssClientMultipartUploadTest extends TestOssClientBase
     public function testAbortMultipartUpload()
     {
         $object = "mpu/multipart-test.txt";
-        /**
-         *  step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
-         */
         try {
             $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
         } catch (OssException $e) {
             $this->assertFalse(true);
         }
-        /*
-         * step 2. 上传分片
-         */
         $part_size = 10 * 1024 * 1024;
         $upload_file = __FILE__;
-        $upload_filesize = filesize($upload_file);
+        $upload_filesize = sprintf('%u',filesize($upload_file));
         $pieces = $this->ossClient->generateMultiuploadParts($upload_filesize, $part_size);
         $response_upload_part = array();
         $upload_position = 0;
@@ -244,20 +224,14 @@ class OssClientMultipartUploadTest extends TestOssClientBase
     public function testPutObjectByRawApis()
     {
         $object = "mpu/multipart-test.txt";
-        /**
-         *  step 1. 初始化一个分块上传事件, 也就是初始化上传Multipart, 获取upload id
-         */
         try {
             $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
         } catch (OssException $e) {
             $this->assertFalse(true);
         }
-        /*
-         * step 2. 上传分片
-         */
         $part_size = 10 * 1024 * 1024;
         $upload_file = __FILE__;
-        $upload_filesize = filesize($upload_file);
+        $upload_filesize = sprintf('%u',filesize($upload_file));
         $pieces = $this->ossClient->generateMultiuploadParts($upload_filesize, $part_size);
         $response_upload_part = array();
         $upload_position = 0;
@@ -416,11 +390,89 @@ class OssClientMultipartUploadTest extends TestOssClientBase
             $listMultipartUploadInfo = $this->ossClient->completeMultipartUpload($this->bucket, $object, $uploadId, null);
             $this->assertTrue(false);
         } catch (OssException $e) {
-            $this->assertTrue(true);
-            if (strpos($e, "listParts must be array type") == false)
-            {
-                $this->assertTrue(false);
-            }   
+            $this->assertEquals('NoSuchUpload', $e->getErrorCode());
+        }
+    }
+
+    public function testCompleteMultipartUploadWithEmptyArray(){
+        $object = 'multipart-test-complete.txt';
+        try {
+            $uploadId = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
+            $listMultipartUploadInfo = $this->ossClient->completeMultipartUpload($this->bucket, $object, $uploadId, array());
+            var_dump($listMultipartUploadInfo);
+            $this->assertNotNull($listMultipartUploadInfo);
+        } catch (OssException $e) {
+            $this->assertFalse(true);
+        }
+
+    }
+
+
+    public function testCompleteMultipartUploadWithNull(){
+        $object = "mpu/multipart-test.txt";
+        try {
+            $upload_id = $this->ossClient->initiateMultipartUpload($this->bucket, $object);
+        } catch (OssException $e) {
+            $this->assertFalse(true);
+        }
+
+        $part_size = 5 * 1024 * 1024;
+        $upload_file = __FILE__;
+        $upload_filesize = sprintf('%u',filesize($upload_file));
+        $pieces = $this->ossClient->generateMultiuploadParts($upload_filesize, $part_size);
+        $response_upload_part = array();
+        $upload_position = 0;
+        $is_check_md5 = true;
+        foreach ($pieces as $i => $piece) {
+            $from_pos = $upload_position + (integer)$piece[OssClient::OSS_SEEK_TO];
+            $to_pos = (integer)$piece[OssClient::OSS_LENGTH] + $from_pos - 1;
+            $up_options = array(
+                OssClient::OSS_FILE_UPLOAD => $upload_file,
+                OssClient::OSS_PART_NUM => ($i + 1),
+                OssClient::OSS_SEEK_TO => $from_pos,
+                OssClient::OSS_LENGTH => $to_pos - $from_pos + 1,
+                OssClient::OSS_CHECK_MD5 => $is_check_md5,
+            );
+            if ($is_check_md5) {
+                $content_md5 = OssUtil::getMd5SumForFile($upload_file, $from_pos, $to_pos);
+                $up_options[OssClient::OSS_CONTENT_MD5] = $content_md5;
+            }
+            try {
+                $response_upload_part[] = $this->ossClient->uploadPart($this->bucket, $object, $upload_id, $up_options);
+            } catch (OssException $e) {
+                $this->assertFalse(true);
+            }
+        }
+        $upload_parts = array();
+        foreach ($response_upload_part as $i => $eTag) {
+            $upload_parts[] = array(
+                'PartNumber' => ($i + 1),
+                'ETag' => $eTag,
+            );
+        }
+
+        try {
+            $listPartsInfo = $this->ossClient->listParts($this->bucket, $object, $upload_id);
+            $this->assertNotNull($listPartsInfo);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
         }
+
+        $options['headers'] = array(
+            'x-oss-forbid-overwrite' => 'false',
+            'x-oss-complete-all'=> 'yes'
+        );
+
+        try {
+            $result = $this->ossClient->completeMultipartUpload($this->bucket, $object, $upload_id, null,$options);
+            var_dump($result);
+            $this->assertNotNull($result);
+        } catch (OssException $e) {
+            $this->assertTrue(false);
+        }
+
     }
+
+
+
 }

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectRequestPaymentTest.php

@@ -354,7 +354,7 @@ class OssClientObjectRequestPaymentTest extends TestOssClientBase
          */
         $part_size = 1 * 1024 * 1024;
         $upload_file = __FILE__;
-        $upload_filesize = filesize($upload_file);
+        $upload_filesize = sprintf('%u',filesize($upload_file));
         $pieces = $this->payerClient->generateMultiuploadParts($upload_filesize, $part_size);
         $response_upload_part = array();
         $upload_position = 0;

+ 4 - 4
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientObjectTest.php

@@ -398,9 +398,9 @@ class OssClientObjectTest extends TestOssClientBase
          */
         try {
             $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0);
-            $this->assertEquals($position, filesize(__FILE__));
+            $this->assertEquals($position, sprintf('%u',filesize(__FILE__)));
             $position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position);
-            $this->assertEquals($position, filesize(__FILE__) * 2);
+            $this->assertEquals($position, sprintf('%u',filesize(__FILE__)) * 2);
         } catch (OssException $e) {
             $this->assertFalse(true);
         }
@@ -568,9 +568,9 @@ class OssClientObjectTest extends TestOssClientBase
     	 */
     	try {
     		$position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, 0, $options);
-    		$this->assertEquals($position, filesize(__FILE__));
+    		$this->assertEquals($position, sprintf('%u',filesize(__FILE__)));
     		$position = $this->ossClient->appendFile($this->bucket, $object, __FILE__, $position, $options);
-    		$this->assertEquals($position, filesize(__FILE__) * 2);
+    		$this->assertEquals($position, sprintf('%u',filesize(__FILE__)) * 2);
     	} catch (OssException $e) {
     		$this->assertFalse(true);
     	}

+ 1 - 1
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssClientSignatureTest.php

@@ -64,7 +64,7 @@ class OssClientSignatureTest extends TestOssClientBase
             $request->set_method('PUT');
             $request->add_header('Content-Type', 'txt');
             $request->set_read_file($file);
-            $request->set_read_stream_size(filesize($file));
+            $request->set_read_stream_size(sprintf('%u',filesize($file)));
             $request->send_request();
             $res = new ResponseCore($request->get_response_header(),
                 $request->get_response_body(), $request->get_response_code());

+ 3 - 3
vendor/aliyuncs/oss-sdk-php/tests/OSS/Tests/OssUtilTest.php

@@ -154,10 +154,10 @@ BBBB;
 
     public function testGetMd5SumForFile()
     {
-        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, filesize(__FILE__) - 1), base64_encode(md5(file_get_contents(__FILE__), true)));
+        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, sprintf('%u',filesize(__FILE__)) - 1), base64_encode(md5(file_get_contents(__FILE__), true)));
         // false case
         $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, OssClient::OSS_MAX_PART_SIZE + 1), "");
-        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, filesize(__FILE__) + 1), "");
+        $this->assertEquals(OssUtil::getMd5SumForFile(__FILE__, 0, sprintf('%u',filesize(__FILE__)) + 1), "");
 
     }
 
@@ -165,7 +165,7 @@ BBBB;
     {
         $path = __DIR__ . DIRECTORY_SEPARATOR . "generatedFile.txt";
         OssUtil::generateFile($path, 1024 * 1024);
-        $this->assertEquals(filesize($path), 1024 * 1024);
+        $this->assertEquals(sprintf('%u',filesize($path)), 1024 * 1024);
         unlink($path);
     }
 

+ 5 - 0
vendor/autoload.php

@@ -2,6 +2,11 @@
 
 // autoload.php @generated by Composer
 
+if (PHP_VERSION_ID < 50600) {
+    echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
+    exit(1);
+}
+
 require_once __DIR__ . '/composer/autoload_real.php';
 
 return ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b::getLoader();

+ 102 - 11
vendor/composer/ClassLoader.php

@@ -42,30 +42,75 @@ namespace Composer\Autoload;
  */
 class ClassLoader
 {
+    /** @var ?string */
     private $vendorDir;
 
     // PSR-4
+    /**
+     * @var array[]
+     * @psalm-var array<string, array<string, int>>
+     */
     private $prefixLengthsPsr4 = array();
+    /**
+     * @var array[]
+     * @psalm-var array<string, array<int, string>>
+     */
     private $prefixDirsPsr4 = array();
+    /**
+     * @var array[]
+     * @psalm-var array<string, string>
+     */
     private $fallbackDirsPsr4 = array();
 
     // PSR-0
+    /**
+     * @var array[]
+     * @psalm-var array<string, array<string, string[]>>
+     */
     private $prefixesPsr0 = array();
+    /**
+     * @var array[]
+     * @psalm-var array<string, string>
+     */
     private $fallbackDirsPsr0 = array();
 
+    /** @var bool */
     private $useIncludePath = false;
+
+    /**
+     * @var string[]
+     * @psalm-var array<string, string>
+     */
     private $classMap = array();
+
+    /** @var bool */
     private $classMapAuthoritative = false;
+
+    /**
+     * @var bool[]
+     * @psalm-var array<string, bool>
+     */
     private $missingClasses = array();
+
+    /** @var ?string */
     private $apcuPrefix;
 
+    /**
+     * @var self[]
+     */
     private static $registeredLoaders = array();
 
+    /**
+     * @param ?string $vendorDir
+     */
     public function __construct($vendorDir = null)
     {
         $this->vendorDir = $vendorDir;
     }
 
+    /**
+     * @return string[]
+     */
     public function getPrefixes()
     {
         if (!empty($this->prefixesPsr0)) {
@@ -75,28 +120,47 @@ class ClassLoader
         return array();
     }
 
+    /**
+     * @return array[]
+     * @psalm-return array<string, array<int, string>>
+     */
     public function getPrefixesPsr4()
     {
         return $this->prefixDirsPsr4;
     }
 
+    /**
+     * @return array[]
+     * @psalm-return array<string, string>
+     */
     public function getFallbackDirs()
     {
         return $this->fallbackDirsPsr0;
     }
 
+    /**
+     * @return array[]
+     * @psalm-return array<string, string>
+     */
     public function getFallbackDirsPsr4()
     {
         return $this->fallbackDirsPsr4;
     }
 
+    /**
+     * @return string[] Array of classname => path
+     * @psalm-return array<string, string>
+     */
     public function getClassMap()
     {
         return $this->classMap;
     }
 
     /**
-     * @param array $classMap Class to filename map
+     * @param string[] $classMap Class to filename map
+     * @psalm-param array<string, string> $classMap
+     *
+     * @return void
      */
     public function addClassMap(array $classMap)
     {
@@ -111,9 +175,11 @@ class ClassLoader
      * Registers a set of PSR-0 directories for a given prefix, either
      * appending or prepending to the ones previously set for this prefix.
      *
-     * @param string       $prefix  The prefix
-     * @param array|string $paths   The PSR-0 root directories
-     * @param bool         $prepend Whether to prepend the directories
+     * @param string          $prefix  The prefix
+     * @param string[]|string $paths   The PSR-0 root directories
+     * @param bool            $prepend Whether to prepend the directories
+     *
+     * @return void
      */
     public function add($prefix, $paths, $prepend = false)
     {
@@ -156,11 +222,13 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace, either
      * appending or prepending to the ones previously set for this namespace.
      *
-     * @param string       $prefix  The prefix/namespace, with trailing '\\'
-     * @param array|string $paths   The PSR-4 base directories
-     * @param bool         $prepend Whether to prepend the directories
+     * @param string          $prefix  The prefix/namespace, with trailing '\\'
+     * @param string[]|string $paths   The PSR-4 base directories
+     * @param bool            $prepend Whether to prepend the directories
      *
      * @throws \InvalidArgumentException
+     *
+     * @return void
      */
     public function addPsr4($prefix, $paths, $prepend = false)
     {
@@ -204,8 +272,10 @@ class ClassLoader
      * Registers a set of PSR-0 directories for a given prefix,
      * replacing any others previously set for this prefix.
      *
-     * @param string       $prefix The prefix
-     * @param array|string $paths  The PSR-0 base directories
+     * @param string          $prefix The prefix
+     * @param string[]|string $paths  The PSR-0 base directories
+     *
+     * @return void
      */
     public function set($prefix, $paths)
     {
@@ -220,10 +290,12 @@ class ClassLoader
      * Registers a set of PSR-4 directories for a given namespace,
      * replacing any others previously set for this namespace.
      *
-     * @param string       $prefix The prefix/namespace, with trailing '\\'
-     * @param array|string $paths  The PSR-4 base directories
+     * @param string          $prefix The prefix/namespace, with trailing '\\'
+     * @param string[]|string $paths  The PSR-4 base directories
      *
      * @throws \InvalidArgumentException
+     *
+     * @return void
      */
     public function setPsr4($prefix, $paths)
     {
@@ -243,6 +315,8 @@ class ClassLoader
      * Turns on searching the include path for class files.
      *
      * @param bool $useIncludePath
+     *
+     * @return void
      */
     public function setUseIncludePath($useIncludePath)
     {
@@ -265,6 +339,8 @@ class ClassLoader
      * that have not been registered with the class map.
      *
      * @param bool $classMapAuthoritative
+     *
+     * @return void
      */
     public function setClassMapAuthoritative($classMapAuthoritative)
     {
@@ -285,6 +361,8 @@ class ClassLoader
      * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
      *
      * @param string|null $apcuPrefix
+     *
+     * @return void
      */
     public function setApcuPrefix($apcuPrefix)
     {
@@ -305,6 +383,8 @@ class ClassLoader
      * Registers this instance as an autoloader.
      *
      * @param bool $prepend Whether to prepend the autoloader or not
+     *
+     * @return void
      */
     public function register($prepend = false)
     {
@@ -324,6 +404,8 @@ class ClassLoader
 
     /**
      * Unregisters this instance as an autoloader.
+     *
+     * @return void
      */
     public function unregister()
     {
@@ -403,6 +485,11 @@ class ClassLoader
         return self::$registeredLoaders;
     }
 
+    /**
+     * @param  string       $class
+     * @param  string       $ext
+     * @return string|false
+     */
     private function findFileWithExtension($class, $ext)
     {
         // PSR-4 lookup
@@ -474,6 +561,10 @@ class ClassLoader
  * Scope isolated include.
  *
  * Prevents access to $this/self from included files.
+ *
+ * @param  string $file
+ * @return void
+ * @private
  */
 function includeFile($file)
 {

+ 21 - 6
vendor/composer/InstalledVersions.php

@@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
  *
  * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
  *
- * To require it's presence, you can require `composer-runtime-api ^2.0`
+ * To require its presence, you can require `composer-runtime-api ^2.0`
+ *
+ * @final
  */
 class InstalledVersions
 {
+    /**
+     * @var mixed[]|null
+     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
+     */
     private static $installed;
+
+    /**
+     * @var bool|null
+     */
     private static $canGetVendors;
+
+    /**
+     * @var array[]
+     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
+     */
     private static $installedByVendor = array();
 
     /**
@@ -228,7 +243,7 @@ class InstalledVersions
 
     /**
      * @return array
-     * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
+     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
      */
     public static function getRootPackage()
     {
@@ -242,7 +257,7 @@ class InstalledVersions
      *
      * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
      * @return array[]
-     * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
+     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
      */
     public static function getRawData()
     {
@@ -265,7 +280,7 @@ class InstalledVersions
      * Returns the raw data of all installed.php which are currently loaded for custom implementations
      *
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
+     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
      */
     public static function getAllRawData()
     {
@@ -288,7 +303,7 @@ class InstalledVersions
      * @param  array[] $data A vendor/composer/installed.php data set
      * @return void
      *
-     * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
+     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
      */
     public static function reload($data)
     {
@@ -298,7 +313,7 @@ class InstalledVersions
 
     /**
      * @return array[]
-     * @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
+     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
      */
     private static function getInstalled()
     {

+ 7 - 270
vendor/composer/autoload_classmap.php

@@ -2,280 +2,17 @@
 
 // autoload_classmap.php @generated by Composer
 
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
 $baseDir = dirname($vendorDir);
 
 return array(
-    'AliPay\\App' => $vendorDir . '/zoujingli/wechat-developer/AliPay/App.php',
-    'AliPay\\Bill' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Bill.php',
-    'AliPay\\Pos' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Pos.php',
-    'AliPay\\Scan' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Scan.php',
-    'AliPay\\Trade' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Trade.php',
-    'AliPay\\Transfer' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Transfer.php',
-    'AliPay\\Wap' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Wap.php',
-    'AliPay\\Web' => $vendorDir . '/zoujingli/wechat-developer/AliPay/Web.php',
+    'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
     'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
-    'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => $vendorDir . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php',
-    'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php',
-    'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => $vendorDir . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php',
-    'Endroid\\QrCode\\Bundle\\EndroidQrCodeBundle' => $vendorDir . '/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php',
-    'Endroid\\QrCode\\Bundle\\Twig\\Extension\\QrCodeExtension' => $vendorDir . '/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php',
-    'Endroid\\QrCode\\Exceptions\\DataDoesntExistsException' => $vendorDir . '/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php',
-    'Endroid\\QrCode\\Exceptions\\FreeTypeLibraryMissingException' => $vendorDir . '/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php',
-    'Endroid\\QrCode\\Exceptions\\ImageFunctionFailedException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php',
-    'Endroid\\QrCode\\Exceptions\\ImageFunctionUnknownException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php',
-    'Endroid\\QrCode\\Exceptions\\ImageSizeTooLargeException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php',
-    'Endroid\\QrCode\\Exceptions\\ImageTypeInvalidException' => $vendorDir . '/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php',
-    'Endroid\\QrCode\\Exceptions\\VersionTooLargeException' => $vendorDir . '/endroid/qr-code/src/Exceptions/VersionTooLargeException.php',
-    'Endroid\\QrCode\\Factory\\QrCodeFactory' => $vendorDir . '/endroid/qr-code/src/Factory/QrCodeFactory.php',
-    'Endroid\\QrCode\\QrCode' => $vendorDir . '/endroid/qr-code/src/QrCode.php',
     'Ip2Region' => $vendorDir . '/zoujingli/ip2region/Ip2Region.php',
-    'OSS\\Core\\MimeTypes' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php',
-    'OSS\\Core\\OssException' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php',
-    'OSS\\Core\\OssUtil' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php',
-    'OSS\\Http\\RequestCore' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php',
-    'OSS\\Http\\RequestCore_Exception' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php',
-    'OSS\\Http\\ResponseCore' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php',
-    'OSS\\Model\\BucketInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php',
-    'OSS\\Model\\BucketListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php',
-    'OSS\\Model\\BucketStat' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketStat.php',
-    'OSS\\Model\\CnameConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php',
-    'OSS\\Model\\CorsConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php',
-    'OSS\\Model\\CorsRule' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php',
-    'OSS\\Model\\DeleteMarkerInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteMarkerInfo.php',
-    'OSS\\Model\\DeleteObjectInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteObjectInfo.php',
-    'OSS\\Model\\DeletedObjectInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/DeletedObjectInfo.php',
-    'OSS\\Model\\ExtendWormConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ExtendWormConfig.php',
-    'OSS\\Model\\GetLiveChannelHistory' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php',
-    'OSS\\Model\\GetLiveChannelInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php',
-    'OSS\\Model\\GetLiveChannelStatus' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php',
-    'OSS\\Model\\InitiateWormConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/InitiateWormConfig.php',
-    'OSS\\Model\\LifecycleAction' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php',
-    'OSS\\Model\\LifecycleConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php',
-    'OSS\\Model\\LifecycleRule' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php',
-    'OSS\\Model\\ListMultipartUploadInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php',
-    'OSS\\Model\\ListPartsInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php',
-    'OSS\\Model\\LiveChannelConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php',
-    'OSS\\Model\\LiveChannelHistory' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php',
-    'OSS\\Model\\LiveChannelInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php',
-    'OSS\\Model\\LiveChannelListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php',
-    'OSS\\Model\\LoggingConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php',
-    'OSS\\Model\\ObjectInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php',
-    'OSS\\Model\\ObjectListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php',
-    'OSS\\Model\\ObjectVersionInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php',
-    'OSS\\Model\\ObjectVersionListInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionListInfo.php',
-    'OSS\\Model\\PartInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php',
-    'OSS\\Model\\PrefixInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php',
-    'OSS\\Model\\RefererConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php',
-    'OSS\\Model\\RequestPaymentConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/RequestPaymentConfig.php',
-    'OSS\\Model\\RestoreConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/RestoreConfig.php',
-    'OSS\\Model\\ServerSideEncryptionConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/ServerSideEncryptionConfig.php',
-    'OSS\\Model\\StorageCapacityConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php',
-    'OSS\\Model\\Tag' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/Tag.php',
-    'OSS\\Model\\TaggingConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/TaggingConfig.php',
-    'OSS\\Model\\UploadInfo' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php',
-    'OSS\\Model\\VersioningConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/VersioningConfig.php',
-    'OSS\\Model\\WebsiteConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php',
-    'OSS\\Model\\WormConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/WormConfig.php',
-    'OSS\\Model\\XmlConfig' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php',
-    'OSS\\OssClient' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/OssClient.php',
-    'OSS\\Result\\AclResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php',
-    'OSS\\Result\\AppendResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php',
-    'OSS\\Result\\BodyResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php',
-    'OSS\\Result\\CallbackResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php',
-    'OSS\\Result\\CopyObjectResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php',
-    'OSS\\Result\\DeleteObjectVersionsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectVersionsResult.php',
-    'OSS\\Result\\DeleteObjectsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php',
-    'OSS\\Result\\ExistResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php',
-    'OSS\\Result\\GetBucketEncryptionResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketEncryptionResult.php',
-    'OSS\\Result\\GetBucketInfoResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketInfoResult.php',
-    'OSS\\Result\\GetBucketRequestPaymentResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketRequestPaymentResult.php',
-    'OSS\\Result\\GetBucketStatResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketStatResult.php',
-    'OSS\\Result\\GetBucketTagsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTagsResult.php',
-    'OSS\\Result\\GetBucketVersioningResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketVersioningResult.php',
-    'OSS\\Result\\GetBucketWormResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketWormResult.php',
-    'OSS\\Result\\GetCnameResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php',
-    'OSS\\Result\\GetCorsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php',
-    'OSS\\Result\\GetLifecycleResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php',
-    'OSS\\Result\\GetLiveChannelHistoryResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php',
-    'OSS\\Result\\GetLiveChannelInfoResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php',
-    'OSS\\Result\\GetLiveChannelStatusResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php',
-    'OSS\\Result\\GetLocationResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php',
-    'OSS\\Result\\GetLoggingResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php',
-    'OSS\\Result\\GetRefererResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php',
-    'OSS\\Result\\GetStorageCapacityResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php',
-    'OSS\\Result\\GetWebsiteResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php',
-    'OSS\\Result\\HeaderResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php',
-    'OSS\\Result\\InitiateBucketWormResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateBucketWormResult.php',
-    'OSS\\Result\\InitiateMultipartUploadResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php',
-    'OSS\\Result\\ListBucketsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php',
-    'OSS\\Result\\ListLiveChannelResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php',
-    'OSS\\Result\\ListMultipartUploadResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php',
-    'OSS\\Result\\ListObjectVersionsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php',
-    'OSS\\Result\\ListObjectsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php',
-    'OSS\\Result\\ListPartsResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php',
-    'OSS\\Result\\PutLiveChannelResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php',
-    'OSS\\Result\\PutSetDeleteResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php',
-    'OSS\\Result\\Result' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php',
-    'OSS\\Result\\SymlinkResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php',
-    'OSS\\Result\\UploadPartResult' => $vendorDir . '/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php',
-    'Qiniu\\Auth' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Auth.php',
-    'Qiniu\\Cdn\\CdnManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php',
-    'Qiniu\\Config' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Config.php',
-    'Qiniu\\Etag' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Etag.php',
-    'Qiniu\\Http\\Client' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Client.php',
-    'Qiniu\\Http\\Error' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Error.php',
-    'Qiniu\\Http\\Request' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Request.php',
-    'Qiniu\\Http\\Response' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Http/Response.php',
-    'Qiniu\\Processing\\ImageUrlBuilder' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php',
-    'Qiniu\\Processing\\Operation' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Processing/Operation.php',
-    'Qiniu\\Processing\\PersistentFop' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php',
-    'Qiniu\\Region' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Region.php',
-    'Qiniu\\Rtc\\AppClient' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Rtc/AppClient.php',
-    'Qiniu\\Sms\\Sms' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Sms/Sms.php',
-    'Qiniu\\Storage\\ArgusManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/ArgusManager.php',
-    'Qiniu\\Storage\\BucketManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php',
-    'Qiniu\\Storage\\FormUploader' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php',
-    'Qiniu\\Storage\\ResumeUploader' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php',
-    'Qiniu\\Storage\\UploadManager' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php',
-    'Qiniu\\Zone' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/Zone.php',
-    'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => $vendorDir . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidArgumentException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidOptionsException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/MissingOptionsException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => $vendorDir . '/symfony/options-resolver/Exception/NoConfigurationException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php',
-    'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php',
-    'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php',
-    'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php',
+    'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
+    'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
+    'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
+    'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
+    'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
     'We' => $vendorDir . '/zoujingli/wechat-developer/We.php',
-    'WeChat\\Bind' => $vendorDir . '/zoujingli/weopen-developer/WeChat/Bind.php',
-    'WeChat\\Card' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Card.php',
-    'WeChat\\Contracts\\BasicAliPay' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicAliPay.php',
-    'WeChat\\Contracts\\BasicPushEvent' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php',
-    'WeChat\\Contracts\\BasicWeChat' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php',
-    'WeChat\\Contracts\\BasicWePay' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWePay.php',
-    'WeChat\\Contracts\\BasicWeWork' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWeWork.php',
-    'WeChat\\Contracts\\DataArray' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php',
-    'WeChat\\Contracts\\DataError' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/DataError.php',
-    'WeChat\\Contracts\\MyCurlFile' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/MyCurlFile.php',
-    'WeChat\\Contracts\\Tools' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Contracts/Tools.php',
-    'WeChat\\Custom' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Custom.php',
-    'WeChat\\Exceptions\\InvalidArgumentException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php',
-    'WeChat\\Exceptions\\InvalidDecryptException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php',
-    'WeChat\\Exceptions\\InvalidInstanceException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidInstanceException.php',
-    'WeChat\\Exceptions\\InvalidResponseException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php',
-    'WeChat\\Exceptions\\LocalCacheException' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php',
-    'WeChat\\Limit' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Limit.php',
-    'WeChat\\Media' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Media.php',
-    'WeChat\\Menu' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Menu.php',
-    'WeChat\\Mini' => $vendorDir . '/zoujingli/weopen-developer/WeChat/Mini.php',
-    'WeChat\\Oauth' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Oauth.php',
-    'WeChat\\Pay' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Pay.php',
-    'WeChat\\Product' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Product.php',
-    'WeChat\\Qrcode' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Qrcode.php',
-    'WeChat\\Receive' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Receive.php',
-    'WeChat\\Scan' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Scan.php',
-    'WeChat\\Script' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Script.php',
-    'WeChat\\Shake' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Shake.php',
-    'WeChat\\Tags' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Tags.php',
-    'WeChat\\Template' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Template.php',
-    'WeChat\\User' => $vendorDir . '/zoujingli/wechat-developer/WeChat/User.php',
-    'WeChat\\Wifi' => $vendorDir . '/zoujingli/wechat-developer/WeChat/Wifi.php',
-    'WeMini\\Account' => $vendorDir . '/zoujingli/weopen-developer/WeMini/Account.php',
-    'WeMini\\Basic' => $vendorDir . '/zoujingli/weopen-developer/WeMini/Basic.php',
-    'WeMini\\Code' => $vendorDir . '/zoujingli/weopen-developer/WeMini/Code.php',
-    'WeMini\\Crypt' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Crypt.php',
-    'WeMini\\Delivery' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Delivery.php',
-    'WeMini\\Domain' => $vendorDir . '/zoujingli/weopen-developer/WeMini/Domain.php',
-    'WeMini\\Guide' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Guide.php',
-    'WeMini\\Image' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Image.php',
-    'WeMini\\Live' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Live.php',
-    'WeMini\\Logistics' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Logistics.php',
-    'WeMini\\Message' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Message.php',
-    'WeMini\\Newtmpl' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Newtmpl.php',
-    'WeMini\\Ocr' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Ocr.php',
-    'WeMini\\Operation' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Operation.php',
-    'WeMini\\Plugs' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Plugs.php',
-    'WeMini\\Poi' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Poi.php',
-    'WeMini\\Qrcode' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Qrcode.php',
-    'WeMini\\Search' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Search.php',
-    'WeMini\\Security' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Security.php',
-    'WeMini\\Soter' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Soter.php',
-    'WeMini\\Template' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Template.php',
-    'WeMini\\Tester' => $vendorDir . '/zoujingli/weopen-developer/WeMini/Tester.php',
-    'WeMini\\Total' => $vendorDir . '/zoujingli/wechat-developer/WeMini/Total.php',
-    'WeMini\\User' => $vendorDir . '/zoujingli/weopen-developer/WeMini/User.php',
-    'WeOpen\\Login' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Login.php',
-    'WeOpen\\MiniApp' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/MiniApp.php',
-    'WeOpen\\Service' => $vendorDir . '/zoujingli/weopen-developer/WeOpen/Service.php',
-    'WePayV3\\Cert' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Cert.php',
-    'WePayV3\\Contracts\\BasicWePay' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Contracts/BasicWePay.php',
-    'WePayV3\\Contracts\\DecryptAes' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Contracts/DecryptAes.php',
-    'WePayV3\\Order' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Order.php',
-    'WePayV3\\Refund' => $vendorDir . '/zoujingli/wechat-developer/WePayV3/Refund.php',
-    'WePay\\Bill' => $vendorDir . '/zoujingli/wechat-developer/WePay/Bill.php',
-    'WePay\\Coupon' => $vendorDir . '/zoujingli/wechat-developer/WePay/Coupon.php',
-    'WePay\\Custom' => $vendorDir . '/zoujingli/wechat-developer/WePay/Custom.php',
-    'WePay\\Order' => $vendorDir . '/zoujingli/wechat-developer/WePay/Order.php',
-    'WePay\\Redpack' => $vendorDir . '/zoujingli/wechat-developer/WePay/Redpack.php',
-    'WePay\\Refund' => $vendorDir . '/zoujingli/wechat-developer/WePay/Refund.php',
-    'WePay\\Transfers' => $vendorDir . '/zoujingli/wechat-developer/WePay/Transfers.php',
-    'WePay\\TransfersBank' => $vendorDir . '/zoujingli/wechat-developer/WePay/TransfersBank.php',
-    'library\\Controller' => $vendorDir . '/zoujingli/think-library/src/Controller.php',
-    'library\\File' => $vendorDir . '/zoujingli/think-library/src/File.php',
-    'library\\Helper' => $vendorDir . '/zoujingli/think-library/src/Helper.php',
-    'library\\Service' => $vendorDir . '/zoujingli/think-library/src/Service.php',
-    'library\\command\\Sess' => $vendorDir . '/zoujingli/think-library/src/command/Sess.php',
-    'library\\command\\Sync' => $vendorDir . '/zoujingli/think-library/src/command/Sync.php',
-    'library\\command\\Task' => $vendorDir . '/zoujingli/think-library/src/command/Task.php',
-    'library\\command\\sync\\Admin' => $vendorDir . '/zoujingli/think-library/src/command/sync/Admin.php',
-    'library\\command\\sync\\Config' => $vendorDir . '/zoujingli/think-library/src/command/sync/Config.php',
-    'library\\command\\sync\\Plugs' => $vendorDir . '/zoujingli/think-library/src/command/sync/Plugs.php',
-    'library\\command\\sync\\Service' => $vendorDir . '/zoujingli/think-library/src/command/sync/Service.php',
-    'library\\command\\sync\\Wechat' => $vendorDir . '/zoujingli/think-library/src/command/sync/Wechat.php',
-    'library\\driver\\Local' => $vendorDir . '/zoujingli/think-library/src/driver/Local.php',
-    'library\\driver\\Oss' => $vendorDir . '/zoujingli/think-library/src/driver/Oss.php',
-    'library\\driver\\Qiniu' => $vendorDir . '/zoujingli/think-library/src/driver/Qiniu.php',
-    'library\\helper\\DeleteHelper' => $vendorDir . '/zoujingli/think-library/src/helper/DeleteHelper.php',
-    'library\\helper\\FormHelper' => $vendorDir . '/zoujingli/think-library/src/helper/FormHelper.php',
-    'library\\helper\\InputHelper' => $vendorDir . '/zoujingli/think-library/src/helper/InputHelper.php',
-    'library\\helper\\PageHelper' => $vendorDir . '/zoujingli/think-library/src/helper/PageHelper.php',
-    'library\\helper\\QueryHelper' => $vendorDir . '/zoujingli/think-library/src/helper/QueryHelper.php',
-    'library\\helper\\SaveHelper' => $vendorDir . '/zoujingli/think-library/src/helper/SaveHelper.php',
-    'library\\helper\\TokenHelper' => $vendorDir . '/zoujingli/think-library/src/helper/TokenHelper.php',
-    'library\\helper\\ValidateHelper' => $vendorDir . '/zoujingli/think-library/src/helper/ValidateHelper.php',
-    'library\\queue\\ListenQueue' => $vendorDir . '/zoujingli/think-library/src/queue/ListenQueue.php',
-    'library\\queue\\QueryQueue' => $vendorDir . '/zoujingli/think-library/src/queue/QueryQueue.php',
-    'library\\queue\\StartQueue' => $vendorDir . '/zoujingli/think-library/src/queue/StartQueue.php',
-    'library\\queue\\StateQueue' => $vendorDir . '/zoujingli/think-library/src/queue/StateQueue.php',
-    'library\\queue\\StopQueue' => $vendorDir . '/zoujingli/think-library/src/queue/StopQueue.php',
-    'library\\queue\\WorkQueue' => $vendorDir . '/zoujingli/think-library/src/queue/WorkQueue.php',
-    'library\\service\\AdminService' => $vendorDir . '/zoujingli/think-library/src/service/AdminService.php',
-    'library\\service\\CaptchaService' => $vendorDir . '/zoujingli/think-library/src/service/CaptchaService.php',
-    'library\\service\\MenuService' => $vendorDir . '/zoujingli/think-library/src/service/MenuService.php',
-    'library\\service\\NodeService' => $vendorDir . '/zoujingli/think-library/src/service/NodeService.php',
-    'library\\service\\ProcessService' => $vendorDir . '/zoujingli/think-library/src/service/ProcessService.php',
-    'library\\service\\SystemService' => $vendorDir . '/zoujingli/think-library/src/service/SystemService.php',
-    'library\\service\\TokenService' => $vendorDir . '/zoujingli/think-library/src/service/TokenService.php',
-    'library\\tools\\Crypt' => $vendorDir . '/zoujingli/think-library/src/tools/Crypt.php',
-    'library\\tools\\Csrf' => $vendorDir . '/zoujingli/think-library/src/tools/Csrf.php',
-    'library\\tools\\Csv' => $vendorDir . '/zoujingli/think-library/src/tools/Csv.php',
-    'library\\tools\\Data' => $vendorDir . '/zoujingli/think-library/src/tools/Data.php',
-    'library\\tools\\Emoji' => $vendorDir . '/zoujingli/think-library/src/tools/Emoji.php',
-    'library\\tools\\Express' => $vendorDir . '/zoujingli/think-library/src/tools/Express.php',
-    'library\\tools\\Http' => $vendorDir . '/zoujingli/think-library/src/tools/Http.php',
-    'library\\tools\\JsonRpcClient' => $vendorDir . '/zoujingli/think-library/src/tools/JsonRpcClient.php',
-    'library\\tools\\JsonRpcServer' => $vendorDir . '/zoujingli/think-library/src/tools/JsonRpcServer.php',
-    'library\\tools\\Node' => $vendorDir . '/zoujingli/think-library/src/tools/Node.php',
-    'library\\tools\\Options' => $vendorDir . '/zoujingli/think-library/src/tools/Options.php',
-    'think\\composer\\LibraryInstaller' => $vendorDir . '/topthink/think-installer/src/LibraryInstaller.php',
-    'think\\composer\\Plugin' => $vendorDir . '/topthink/think-installer/src/Plugin.php',
-    'think\\composer\\Promise' => $vendorDir . '/topthink/think-installer/src/Promise.php',
-    'think\\composer\\ThinkExtend' => $vendorDir . '/topthink/think-installer/src/ThinkExtend.php',
-    'think\\composer\\ThinkFramework' => $vendorDir . '/topthink/think-installer/src/ThinkFramework.php',
-    'think\\composer\\ThinkTesting' => $vendorDir . '/topthink/think-installer/src/ThinkTesting.php',
 );

+ 16 - 1
vendor/composer/autoload_files.php

@@ -2,10 +2,25 @@
 
 // autoload_files.php @generated by Composer
 
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
 $baseDir = dirname($vendorDir);
 
 return array(
+    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
+    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
+    'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
+    '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
+    'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
+    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
+    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
+    'd767e4fc2dc52fe66584ab8c6684783e' => $vendorDir . '/adbario/php-dot-notation/src/helpers.php',
+    '65fec9ebcfbb3cbb4fd0d519687aea01' => $vendorDir . '/danielstjules/stringy/src/Create.php',
+    'b067bc7112e384b61c701452d53a14a8' => $vendorDir . '/mtdowling/jmespath.php/src/JmesPath.php',
+    '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
+    '66453932bc1be9fb2f910a27947d11b6' => $vendorDir . '/alibabacloud/client/src/Functions.php',
+    '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
     '841780ea2e1d6545ea3a253239d59c05' => $vendorDir . '/qiniu/php-sdk/src/Qiniu/functions.php',
+    'f0e7e63bbb278a92db02393536748c5f' => $vendorDir . '/overtrue/wechat/src/Kernel/Support/Helpers.php',
+    '6747f579ad6817f318cc3a7e7a0abb93' => $vendorDir . '/overtrue/wechat/src/Kernel/Helpers.php',
     '8dafcc6956460bc297e00381fed53e11' => $vendorDir . '/zoujingli/think-library/src/common.php',
 );

+ 4 - 1
vendor/composer/autoload_namespaces.php

@@ -2,8 +2,11 @@
 
 // autoload_namespaces.php @generated by Composer
 
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
 $baseDir = dirname($vendorDir);
 
 return array(
+    'Pimple' => array($vendorDir . '/pimple/pimple/src'),
+    'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),
+    'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
 );

+ 43 - 3
vendor/composer/autoload_psr4.php

@@ -2,20 +2,60 @@
 
 // autoload_psr4.php @generated by Composer
 
-$vendorDir = dirname(dirname(__FILE__));
+$vendorDir = dirname(__DIR__);
 $baseDir = dirname($vendorDir);
 
 return array(
     'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
     'library\\' => array($vendorDir . '/zoujingli/think-library/src'),
+    'hg\\apidoc\\' => array($vendorDir . '/hg/apidoc/src'),
+    'clagiordano\\weblibs\\configmanager\\' => array($vendorDir . '/clagiordano/weblibs-configmanager/src'),
+    'ZipStream\\' => array($vendorDir . '/maennchen/zipstream-php/src'),
     'WePay\\' => array($vendorDir . '/zoujingli/wechat-developer/WePay'),
     'WePayV3\\' => array($vendorDir . '/zoujingli/wechat-developer/WePayV3'),
     'WeOpen\\' => array($vendorDir . '/zoujingli/weopen-developer/WeOpen'),
-    'WeMini\\' => array($vendorDir . '/zoujingli/wechat-developer/WeMini', $vendorDir . '/zoujingli/weopen-developer/WeMini'),
-    'WeChat\\' => array($vendorDir . '/zoujingli/wechat-developer/WeChat', $vendorDir . '/zoujingli/weopen-developer/WeChat'),
+    'WeMini\\' => array($vendorDir . '/zoujingli/weopen-developer/WeMini', $vendorDir . '/zoujingli/wechat-developer/WeMini'),
+    'WeChat\\' => array($vendorDir . '/zoujingli/weopen-developer/WeChat', $vendorDir . '/zoujingli/wechat-developer/WeChat'),
+    'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
+    'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
+    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
+    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
+    'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
+    'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
+    'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
+    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
+    'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
     'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'),
+    'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
+    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
+    'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'),
+    'Symfony\\Bridge\\PsrHttpMessage\\' => array($vendorDir . '/symfony/psr-http-message-bridge'),
+    'Stringy\\' => array($vendorDir . '/danielstjules/stringy/src'),
     'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu'),
+    'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
+    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
+    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
+    'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
+    'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'),
+    'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
+    'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
+    'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
+    'Overtrue\\Socialite\\' => array($vendorDir . '/overtrue/socialite/src'),
     'OSS\\' => array($vendorDir . '/aliyuncs/oss-sdk-php/src/OSS'),
+    'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'),
+    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
+    'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
+    'JmesPath\\' => array($vendorDir . '/mtdowling/jmespath.php/src'),
+    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
+    'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
+    'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
+    'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
     'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'),
+    'EasyWeChat\\' => array($vendorDir . '/overtrue/wechat/src'),
+    'EasyWeChatComposer\\' => array($vendorDir . '/easywechat-composer/easywechat-composer/src'),
+    'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'),
+    'AlibabaCloud\\Client\\' => array($vendorDir . '/alibabacloud/client/src'),
+    'AlibabaCloud\\' => array($vendorDir . '/alibabacloud/sdk/src'),
     'AliPay\\' => array($vendorDir . '/zoujingli/wechat-developer/AliPay'),
+    'Adbar\\' => array($vendorDir . '/adbario/php-dot-notation/src'),
 );

+ 11 - 29
vendor/composer/autoload_real.php

@@ -25,38 +25,15 @@ class ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b
         require __DIR__ . '/platform_check.php';
 
         spl_autoload_register(array('ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b', 'loadClassLoader'), true, true);
-        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
+        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
         spl_autoload_unregister(array('ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b', 'loadClassLoader'));
 
-        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
-        if ($useStaticLoader) {
-            require __DIR__ . '/autoload_static.php';
-
-            call_user_func(\Composer\Autoload\ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::getInitializer($loader));
-        } else {
-            $map = require __DIR__ . '/autoload_namespaces.php';
-            foreach ($map as $namespace => $path) {
-                $loader->set($namespace, $path);
-            }
-
-            $map = require __DIR__ . '/autoload_psr4.php';
-            foreach ($map as $namespace => $path) {
-                $loader->setPsr4($namespace, $path);
-            }
-
-            $classMap = require __DIR__ . '/autoload_classmap.php';
-            if ($classMap) {
-                $loader->addClassMap($classMap);
-            }
-        }
+        require __DIR__ . '/autoload_static.php';
+        call_user_func(\Composer\Autoload\ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::getInitializer($loader));
 
         $loader->register(true);
 
-        if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::$files;
-        } else {
-            $includeFiles = require __DIR__ . '/autoload_files.php';
-        }
+        $includeFiles = \Composer\Autoload\ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::$files;
         foreach ($includeFiles as $fileIdentifier => $file) {
             composerRequire4d241e9f8bb10d006cd7432f945fdb5b($fileIdentifier, $file);
         }
@@ -65,11 +42,16 @@ class ComposerAutoloaderInit4d241e9f8bb10d006cd7432f945fdb5b
     }
 }
 
+/**
+ * @param string $fileIdentifier
+ * @param string $file
+ * @return void
+ */
 function composerRequire4d241e9f8bb10d006cd7432f945fdb5b($fileIdentifier, $file)
 {
     if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
-        require $file;
-
         $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+        require $file;
     }
 }

+ 275 - 273
vendor/composer/autoload_static.php

@@ -7,7 +7,22 @@ namespace Composer\Autoload;
 class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
 {
     public static $files = array (
+        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
+        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
+        'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
+        '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
+        'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
+        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
+        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
+        'd767e4fc2dc52fe66584ab8c6684783e' => __DIR__ . '/..' . '/adbario/php-dot-notation/src/helpers.php',
+        '65fec9ebcfbb3cbb4fd0d519687aea01' => __DIR__ . '/..' . '/danielstjules/stringy/src/Create.php',
+        'b067bc7112e384b61c701452d53a14a8' => __DIR__ . '/..' . '/mtdowling/jmespath.php/src/JmesPath.php',
+        '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
+        '66453932bc1be9fb2f910a27947d11b6' => __DIR__ . '/..' . '/alibabacloud/client/src/Functions.php',
+        '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
         '841780ea2e1d6545ea3a253239d59c05' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/functions.php',
+        'f0e7e63bbb278a92db02393536748c5f' => __DIR__ . '/..' . '/overtrue/wechat/src/Kernel/Support/Helpers.php',
+        '6747f579ad6817f318cc3a7e7a0abb93' => __DIR__ . '/..' . '/overtrue/wechat/src/Kernel/Helpers.php',
         '8dafcc6956460bc297e00381fed53e11' => __DIR__ . '/..' . '/zoujingli/think-library/src/common.php',
     );
 
@@ -20,6 +35,18 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
         array (
             'library\\' => 8,
         ),
+        'h' => 
+        array (
+            'hg\\apidoc\\' => 10,
+        ),
+        'c' => 
+        array (
+            'clagiordano\\weblibs\\configmanager\\' => 34,
+        ),
+        'Z' => 
+        array (
+            'ZipStream\\' => 10,
+        ),
         'W' => 
         array (
             'WePay\\' => 6,
@@ -30,23 +57,78 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
         ),
         'S' => 
         array (
+            'Symfony\\Polyfill\\Php80\\' => 23,
+            'Symfony\\Polyfill\\Php73\\' => 23,
+            'Symfony\\Polyfill\\Mbstring\\' => 26,
+            'Symfony\\Polyfill\\Ctype\\' => 23,
+            'Symfony\\Contracts\\Service\\' => 26,
+            'Symfony\\Contracts\\EventDispatcher\\' => 34,
+            'Symfony\\Contracts\\Cache\\' => 24,
+            'Symfony\\Component\\Yaml\\' => 23,
+            'Symfony\\Component\\VarExporter\\' => 30,
             'Symfony\\Component\\OptionsResolver\\' => 34,
+            'Symfony\\Component\\HttpFoundation\\' => 33,
+            'Symfony\\Component\\EventDispatcher\\' => 34,
+            'Symfony\\Component\\Cache\\' => 24,
+            'Symfony\\Bridge\\PsrHttpMessage\\' => 30,
+            'Stringy\\' => 8,
         ),
         'Q' => 
         array (
             'Qiniu\\' => 6,
         ),
+        'P' => 
+        array (
+            'Psr\\SimpleCache\\' => 16,
+            'Psr\\Log\\' => 8,
+            'Psr\\Http\\Message\\' => 17,
+            'Psr\\Http\\Client\\' => 16,
+            'Psr\\EventDispatcher\\' => 20,
+            'Psr\\Container\\' => 14,
+            'Psr\\Cache\\' => 10,
+            'PhpOffice\\PhpSpreadsheet\\' => 25,
+        ),
         'O' => 
         array (
+            'Overtrue\\Socialite\\' => 19,
             'OSS\\' => 4,
         ),
+        'M' => 
+        array (
+            'MyCLabs\\Enum\\' => 13,
+            'Monolog\\' => 8,
+            'Matrix\\' => 7,
+        ),
+        'J' => 
+        array (
+            'JmesPath\\' => 9,
+        ),
+        'G' => 
+        array (
+            'GuzzleHttp\\Psr7\\' => 16,
+            'GuzzleHttp\\Promise\\' => 19,
+            'GuzzleHttp\\' => 11,
+        ),
+        'F' => 
+        array (
+            'Firebase\\JWT\\' => 13,
+        ),
         'E' => 
         array (
             'Endroid\\QrCode\\' => 15,
+            'EasyWeChat\\' => 11,
+            'EasyWeChatComposer\\' => 19,
+        ),
+        'C' => 
+        array (
+            'Complex\\' => 8,
         ),
         'A' => 
         array (
+            'AlibabaCloud\\Client\\' => 20,
+            'AlibabaCloud\\' => 13,
             'AliPay\\' => 7,
+            'Adbar\\' => 6,
         ),
     );
 
@@ -59,6 +141,18 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
         array (
             0 => __DIR__ . '/..' . '/zoujingli/think-library/src',
         ),
+        'hg\\apidoc\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/hg/apidoc/src',
+        ),
+        'clagiordano\\weblibs\\configmanager\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/clagiordano/weblibs-configmanager/src',
+        ),
+        'ZipStream\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/maennchen/zipstream-php/src',
+        ),
         'WePay\\' => 
         array (
             0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay',
@@ -73,309 +167,216 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
         ),
         'WeMini\\' => 
         array (
-            0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini',
-            1 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini',
+            0 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini',
+            1 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini',
         ),
         'WeChat\\' => 
         array (
-            0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat',
-            1 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeChat',
+            0 => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeChat',
+            1 => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat',
+        ),
+        'Symfony\\Polyfill\\Php80\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
+        ),
+        'Symfony\\Polyfill\\Php73\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-php73',
+        ),
+        'Symfony\\Polyfill\\Mbstring\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
+        ),
+        'Symfony\\Polyfill\\Ctype\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
+        ),
+        'Symfony\\Contracts\\Service\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/service-contracts',
+        ),
+        'Symfony\\Contracts\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts',
+        ),
+        'Symfony\\Contracts\\Cache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/cache-contracts',
+        ),
+        'Symfony\\Component\\Yaml\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/yaml',
+        ),
+        'Symfony\\Component\\VarExporter\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/var-exporter',
         ),
         'Symfony\\Component\\OptionsResolver\\' => 
         array (
             0 => __DIR__ . '/..' . '/symfony/options-resolver',
         ),
+        'Symfony\\Component\\HttpFoundation\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/http-foundation',
+        ),
+        'Symfony\\Component\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
+        ),
+        'Symfony\\Component\\Cache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/cache',
+        ),
+        'Symfony\\Bridge\\PsrHttpMessage\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/psr-http-message-bridge',
+        ),
+        'Stringy\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/danielstjules/stringy/src',
+        ),
         'Qiniu\\' => 
         array (
             0 => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu',
         ),
+        'Psr\\SimpleCache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/simple-cache/src',
+        ),
+        'Psr\\Log\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
+        ),
+        'Psr\\Http\\Message\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/http-message/src',
+            1 => __DIR__ . '/..' . '/psr/http-factory/src',
+        ),
+        'Psr\\Http\\Client\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/http-client/src',
+        ),
+        'Psr\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/event-dispatcher/src',
+        ),
+        'Psr\\Container\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/container/src',
+        ),
+        'Psr\\Cache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/cache/src',
+        ),
+        'PhpOffice\\PhpSpreadsheet\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet',
+        ),
+        'Overtrue\\Socialite\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/overtrue/socialite/src',
+        ),
         'OSS\\' => 
         array (
             0 => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS',
         ),
+        'MyCLabs\\Enum\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/myclabs/php-enum/src',
+        ),
+        'Monolog\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
+        ),
+        'Matrix\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/markbaker/matrix/classes/src',
+        ),
+        'JmesPath\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/mtdowling/jmespath.php/src',
+        ),
+        'GuzzleHttp\\Psr7\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
+        ),
+        'GuzzleHttp\\Promise\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',
+        ),
+        'GuzzleHttp\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
+        ),
+        'Firebase\\JWT\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
+        ),
         'Endroid\\QrCode\\' => 
         array (
             0 => __DIR__ . '/..' . '/endroid/qr-code/src',
         ),
+        'EasyWeChat\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/overtrue/wechat/src',
+        ),
+        'EasyWeChatComposer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/easywechat-composer/easywechat-composer/src',
+        ),
+        'Complex\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/markbaker/complex/classes/src',
+        ),
+        'AlibabaCloud\\Client\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/alibabacloud/client/src',
+        ),
+        'AlibabaCloud\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/alibabacloud/sdk/src',
+        ),
         'AliPay\\' => 
         array (
             0 => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay',
         ),
+        'Adbar\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/adbario/php-dot-notation/src',
+        ),
+    );
+
+    public static $prefixesPsr0 = array (
+        'P' => 
+        array (
+            'Pimple' => 
+            array (
+                0 => __DIR__ . '/..' . '/pimple/pimple/src',
+            ),
+            'PHPExcel' => 
+            array (
+                0 => __DIR__ . '/..' . '/phpoffice/phpexcel/Classes',
+            ),
+        ),
+        'H' => 
+        array (
+            'HTMLPurifier' => 
+            array (
+                0 => __DIR__ . '/..' . '/ezyang/htmlpurifier/library',
+            ),
+        ),
     );
 
     public static $classMap = array (
-        'AliPay\\App' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/App.php',
-        'AliPay\\Bill' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Bill.php',
-        'AliPay\\Pos' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Pos.php',
-        'AliPay\\Scan' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Scan.php',
-        'AliPay\\Trade' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Trade.php',
-        'AliPay\\Transfer' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Transfer.php',
-        'AliPay\\Wap' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Wap.php',
-        'AliPay\\Web' => __DIR__ . '/..' . '/zoujingli/wechat-developer/AliPay/Web.php',
+        'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
         'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
-        'Endroid\\QrCode\\Bundle\\Controller\\QrCodeController' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/Controller/QrCodeController.php',
-        'Endroid\\QrCode\\Bundle\\DependencyInjection\\Configuration' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/Configuration.php',
-        'Endroid\\QrCode\\Bundle\\DependencyInjection\\EndroidQrCodeExtension' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/DependencyInjection/EndroidQrCodeExtension.php',
-        'Endroid\\QrCode\\Bundle\\EndroidQrCodeBundle' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/EndroidQrCodeBundle.php',
-        'Endroid\\QrCode\\Bundle\\Twig\\Extension\\QrCodeExtension' => __DIR__ . '/..' . '/endroid/qr-code/src/Bundle/Twig/Extension/QrCodeExtension.php',
-        'Endroid\\QrCode\\Exceptions\\DataDoesntExistsException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/DataDoesntExistsException.php',
-        'Endroid\\QrCode\\Exceptions\\FreeTypeLibraryMissingException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/FreeTypeLibraryMissingException.php',
-        'Endroid\\QrCode\\Exceptions\\ImageFunctionFailedException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageFunctionFailedException.php',
-        'Endroid\\QrCode\\Exceptions\\ImageFunctionUnknownException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageFunctionUnknownException.php',
-        'Endroid\\QrCode\\Exceptions\\ImageSizeTooLargeException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageSizeTooLargeException.php',
-        'Endroid\\QrCode\\Exceptions\\ImageTypeInvalidException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/ImageTypeInvalidException.php',
-        'Endroid\\QrCode\\Exceptions\\VersionTooLargeException' => __DIR__ . '/..' . '/endroid/qr-code/src/Exceptions/VersionTooLargeException.php',
-        'Endroid\\QrCode\\Factory\\QrCodeFactory' => __DIR__ . '/..' . '/endroid/qr-code/src/Factory/QrCodeFactory.php',
-        'Endroid\\QrCode\\QrCode' => __DIR__ . '/..' . '/endroid/qr-code/src/QrCode.php',
         'Ip2Region' => __DIR__ . '/..' . '/zoujingli/ip2region/Ip2Region.php',
-        'OSS\\Core\\MimeTypes' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php',
-        'OSS\\Core\\OssException' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssException.php',
-        'OSS\\Core\\OssUtil' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Core/OssUtil.php',
-        'OSS\\Http\\RequestCore' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore.php',
-        'OSS\\Http\\RequestCore_Exception' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Http/RequestCore_Exception.php',
-        'OSS\\Http\\ResponseCore' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Http/ResponseCore.php',
-        'OSS\\Model\\BucketInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketInfo.php',
-        'OSS\\Model\\BucketListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketListInfo.php',
-        'OSS\\Model\\BucketStat' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/BucketStat.php',
-        'OSS\\Model\\CnameConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/CnameConfig.php',
-        'OSS\\Model\\CorsConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsConfig.php',
-        'OSS\\Model\\CorsRule' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/CorsRule.php',
-        'OSS\\Model\\DeleteMarkerInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteMarkerInfo.php',
-        'OSS\\Model\\DeleteObjectInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/DeleteObjectInfo.php',
-        'OSS\\Model\\DeletedObjectInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/DeletedObjectInfo.php',
-        'OSS\\Model\\ExtendWormConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ExtendWormConfig.php',
-        'OSS\\Model\\GetLiveChannelHistory' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelHistory.php',
-        'OSS\\Model\\GetLiveChannelInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelInfo.php',
-        'OSS\\Model\\GetLiveChannelStatus' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/GetLiveChannelStatus.php',
-        'OSS\\Model\\InitiateWormConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/InitiateWormConfig.php',
-        'OSS\\Model\\LifecycleAction' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleAction.php',
-        'OSS\\Model\\LifecycleConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleConfig.php',
-        'OSS\\Model\\LifecycleRule' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LifecycleRule.php',
-        'OSS\\Model\\ListMultipartUploadInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListMultipartUploadInfo.php',
-        'OSS\\Model\\ListPartsInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ListPartsInfo.php',
-        'OSS\\Model\\LiveChannelConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelConfig.php',
-        'OSS\\Model\\LiveChannelHistory' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelHistory.php',
-        'OSS\\Model\\LiveChannelInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelInfo.php',
-        'OSS\\Model\\LiveChannelListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LiveChannelListInfo.php',
-        'OSS\\Model\\LoggingConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/LoggingConfig.php',
-        'OSS\\Model\\ObjectInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectInfo.php',
-        'OSS\\Model\\ObjectListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectListInfo.php',
-        'OSS\\Model\\ObjectVersionInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionInfo.php',
-        'OSS\\Model\\ObjectVersionListInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ObjectVersionListInfo.php',
-        'OSS\\Model\\PartInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/PartInfo.php',
-        'OSS\\Model\\PrefixInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/PrefixInfo.php',
-        'OSS\\Model\\RefererConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/RefererConfig.php',
-        'OSS\\Model\\RequestPaymentConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/RequestPaymentConfig.php',
-        'OSS\\Model\\RestoreConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/RestoreConfig.php',
-        'OSS\\Model\\ServerSideEncryptionConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/ServerSideEncryptionConfig.php',
-        'OSS\\Model\\StorageCapacityConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/StorageCapacityConfig.php',
-        'OSS\\Model\\Tag' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/Tag.php',
-        'OSS\\Model\\TaggingConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/TaggingConfig.php',
-        'OSS\\Model\\UploadInfo' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/UploadInfo.php',
-        'OSS\\Model\\VersioningConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/VersioningConfig.php',
-        'OSS\\Model\\WebsiteConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/WebsiteConfig.php',
-        'OSS\\Model\\WormConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/WormConfig.php',
-        'OSS\\Model\\XmlConfig' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Model/XmlConfig.php',
-        'OSS\\OssClient' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/OssClient.php',
-        'OSS\\Result\\AclResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/AclResult.php',
-        'OSS\\Result\\AppendResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/AppendResult.php',
-        'OSS\\Result\\BodyResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/BodyResult.php',
-        'OSS\\Result\\CallbackResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/CallbackResult.php',
-        'OSS\\Result\\CopyObjectResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/CopyObjectResult.php',
-        'OSS\\Result\\DeleteObjectVersionsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectVersionsResult.php',
-        'OSS\\Result\\DeleteObjectsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/DeleteObjectsResult.php',
-        'OSS\\Result\\ExistResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ExistResult.php',
-        'OSS\\Result\\GetBucketEncryptionResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketEncryptionResult.php',
-        'OSS\\Result\\GetBucketInfoResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketInfoResult.php',
-        'OSS\\Result\\GetBucketRequestPaymentResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketRequestPaymentResult.php',
-        'OSS\\Result\\GetBucketStatResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketStatResult.php',
-        'OSS\\Result\\GetBucketTagsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketTagsResult.php',
-        'OSS\\Result\\GetBucketVersioningResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketVersioningResult.php',
-        'OSS\\Result\\GetBucketWormResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetBucketWormResult.php',
-        'OSS\\Result\\GetCnameResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCnameResult.php',
-        'OSS\\Result\\GetCorsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetCorsResult.php',
-        'OSS\\Result\\GetLifecycleResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLifecycleResult.php',
-        'OSS\\Result\\GetLiveChannelHistoryResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelHistoryResult.php',
-        'OSS\\Result\\GetLiveChannelInfoResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelInfoResult.php',
-        'OSS\\Result\\GetLiveChannelStatusResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLiveChannelStatusResult.php',
-        'OSS\\Result\\GetLocationResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLocationResult.php',
-        'OSS\\Result\\GetLoggingResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetLoggingResult.php',
-        'OSS\\Result\\GetRefererResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetRefererResult.php',
-        'OSS\\Result\\GetStorageCapacityResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetStorageCapacityResult.php',
-        'OSS\\Result\\GetWebsiteResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/GetWebsiteResult.php',
-        'OSS\\Result\\HeaderResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/HeaderResult.php',
-        'OSS\\Result\\InitiateBucketWormResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateBucketWormResult.php',
-        'OSS\\Result\\InitiateMultipartUploadResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/InitiateMultipartUploadResult.php',
-        'OSS\\Result\\ListBucketsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListBucketsResult.php',
-        'OSS\\Result\\ListLiveChannelResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListLiveChannelResult.php',
-        'OSS\\Result\\ListMultipartUploadResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListMultipartUploadResult.php',
-        'OSS\\Result\\ListObjectVersionsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectVersionsResult.php',
-        'OSS\\Result\\ListObjectsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListObjectsResult.php',
-        'OSS\\Result\\ListPartsResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/ListPartsResult.php',
-        'OSS\\Result\\PutLiveChannelResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutLiveChannelResult.php',
-        'OSS\\Result\\PutSetDeleteResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/PutSetDeleteResult.php',
-        'OSS\\Result\\Result' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php',
-        'OSS\\Result\\SymlinkResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/SymlinkResult.php',
-        'OSS\\Result\\UploadPartResult' => __DIR__ . '/..' . '/aliyuncs/oss-sdk-php/src/OSS/Result/UploadPartResult.php',
-        'Qiniu\\Auth' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Auth.php',
-        'Qiniu\\Cdn\\CdnManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Cdn/CdnManager.php',
-        'Qiniu\\Config' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Config.php',
-        'Qiniu\\Etag' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Etag.php',
-        'Qiniu\\Http\\Client' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Client.php',
-        'Qiniu\\Http\\Error' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Error.php',
-        'Qiniu\\Http\\Request' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Request.php',
-        'Qiniu\\Http\\Response' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Http/Response.php',
-        'Qiniu\\Processing\\ImageUrlBuilder' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Processing/ImageUrlBuilder.php',
-        'Qiniu\\Processing\\Operation' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Processing/Operation.php',
-        'Qiniu\\Processing\\PersistentFop' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Processing/PersistentFop.php',
-        'Qiniu\\Region' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Region.php',
-        'Qiniu\\Rtc\\AppClient' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Rtc/AppClient.php',
-        'Qiniu\\Sms\\Sms' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Sms/Sms.php',
-        'Qiniu\\Storage\\ArgusManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/ArgusManager.php',
-        'Qiniu\\Storage\\BucketManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php',
-        'Qiniu\\Storage\\FormUploader' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php',
-        'Qiniu\\Storage\\ResumeUploader' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php',
-        'Qiniu\\Storage\\UploadManager' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php',
-        'Qiniu\\Zone' => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/Zone.php',
-        'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => __DIR__ . '/..' . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidArgumentException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidOptionsException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/MissingOptionsException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoConfigurationException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php',
-        'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php',
-        'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php',
-        'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php',
+        'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
+        'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
+        'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
+        'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
+        'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
         'We' => __DIR__ . '/..' . '/zoujingli/wechat-developer/We.php',
-        'WeChat\\Bind' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeChat/Bind.php',
-        'WeChat\\Card' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Card.php',
-        'WeChat\\Contracts\\BasicAliPay' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicAliPay.php',
-        'WeChat\\Contracts\\BasicPushEvent' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php',
-        'WeChat\\Contracts\\BasicWeChat' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php',
-        'WeChat\\Contracts\\BasicWePay' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWePay.php',
-        'WeChat\\Contracts\\BasicWeWork' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/BasicWeWork.php',
-        'WeChat\\Contracts\\DataArray' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php',
-        'WeChat\\Contracts\\DataError' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/DataError.php',
-        'WeChat\\Contracts\\MyCurlFile' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/MyCurlFile.php',
-        'WeChat\\Contracts\\Tools' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Contracts/Tools.php',
-        'WeChat\\Custom' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Custom.php',
-        'WeChat\\Exceptions\\InvalidArgumentException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php',
-        'WeChat\\Exceptions\\InvalidDecryptException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php',
-        'WeChat\\Exceptions\\InvalidInstanceException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidInstanceException.php',
-        'WeChat\\Exceptions\\InvalidResponseException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php',
-        'WeChat\\Exceptions\\LocalCacheException' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php',
-        'WeChat\\Limit' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Limit.php',
-        'WeChat\\Media' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Media.php',
-        'WeChat\\Menu' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Menu.php',
-        'WeChat\\Mini' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeChat/Mini.php',
-        'WeChat\\Oauth' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Oauth.php',
-        'WeChat\\Pay' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Pay.php',
-        'WeChat\\Product' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Product.php',
-        'WeChat\\Qrcode' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Qrcode.php',
-        'WeChat\\Receive' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Receive.php',
-        'WeChat\\Scan' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Scan.php',
-        'WeChat\\Script' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Script.php',
-        'WeChat\\Shake' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Shake.php',
-        'WeChat\\Tags' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Tags.php',
-        'WeChat\\Template' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Template.php',
-        'WeChat\\User' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/User.php',
-        'WeChat\\Wifi' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeChat/Wifi.php',
-        'WeMini\\Account' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini/Account.php',
-        'WeMini\\Basic' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini/Basic.php',
-        'WeMini\\Code' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini/Code.php',
-        'WeMini\\Crypt' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Crypt.php',
-        'WeMini\\Delivery' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Delivery.php',
-        'WeMini\\Domain' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini/Domain.php',
-        'WeMini\\Guide' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Guide.php',
-        'WeMini\\Image' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Image.php',
-        'WeMini\\Live' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Live.php',
-        'WeMini\\Logistics' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Logistics.php',
-        'WeMini\\Message' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Message.php',
-        'WeMini\\Newtmpl' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Newtmpl.php',
-        'WeMini\\Ocr' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Ocr.php',
-        'WeMini\\Operation' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Operation.php',
-        'WeMini\\Plugs' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Plugs.php',
-        'WeMini\\Poi' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Poi.php',
-        'WeMini\\Qrcode' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Qrcode.php',
-        'WeMini\\Search' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Search.php',
-        'WeMini\\Security' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Security.php',
-        'WeMini\\Soter' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Soter.php',
-        'WeMini\\Template' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Template.php',
-        'WeMini\\Tester' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini/Tester.php',
-        'WeMini\\Total' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WeMini/Total.php',
-        'WeMini\\User' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeMini/User.php',
-        'WeOpen\\Login' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Login.php',
-        'WeOpen\\MiniApp' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/MiniApp.php',
-        'WeOpen\\Service' => __DIR__ . '/..' . '/zoujingli/weopen-developer/WeOpen/Service.php',
-        'WePayV3\\Cert' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Cert.php',
-        'WePayV3\\Contracts\\BasicWePay' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Contracts/BasicWePay.php',
-        'WePayV3\\Contracts\\DecryptAes' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Contracts/DecryptAes.php',
-        'WePayV3\\Order' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Order.php',
-        'WePayV3\\Refund' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePayV3/Refund.php',
-        'WePay\\Bill' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Bill.php',
-        'WePay\\Coupon' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Coupon.php',
-        'WePay\\Custom' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Custom.php',
-        'WePay\\Order' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Order.php',
-        'WePay\\Redpack' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Redpack.php',
-        'WePay\\Refund' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Refund.php',
-        'WePay\\Transfers' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/Transfers.php',
-        'WePay\\TransfersBank' => __DIR__ . '/..' . '/zoujingli/wechat-developer/WePay/TransfersBank.php',
-        'library\\Controller' => __DIR__ . '/..' . '/zoujingli/think-library/src/Controller.php',
-        'library\\File' => __DIR__ . '/..' . '/zoujingli/think-library/src/File.php',
-        'library\\Helper' => __DIR__ . '/..' . '/zoujingli/think-library/src/Helper.php',
-        'library\\Service' => __DIR__ . '/..' . '/zoujingli/think-library/src/Service.php',
-        'library\\command\\Sess' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/Sess.php',
-        'library\\command\\Sync' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/Sync.php',
-        'library\\command\\Task' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/Task.php',
-        'library\\command\\sync\\Admin' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/sync/Admin.php',
-        'library\\command\\sync\\Config' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/sync/Config.php',
-        'library\\command\\sync\\Plugs' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/sync/Plugs.php',
-        'library\\command\\sync\\Service' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/sync/Service.php',
-        'library\\command\\sync\\Wechat' => __DIR__ . '/..' . '/zoujingli/think-library/src/command/sync/Wechat.php',
-        'library\\driver\\Local' => __DIR__ . '/..' . '/zoujingli/think-library/src/driver/Local.php',
-        'library\\driver\\Oss' => __DIR__ . '/..' . '/zoujingli/think-library/src/driver/Oss.php',
-        'library\\driver\\Qiniu' => __DIR__ . '/..' . '/zoujingli/think-library/src/driver/Qiniu.php',
-        'library\\helper\\DeleteHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/DeleteHelper.php',
-        'library\\helper\\FormHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/FormHelper.php',
-        'library\\helper\\InputHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/InputHelper.php',
-        'library\\helper\\PageHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/PageHelper.php',
-        'library\\helper\\QueryHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/QueryHelper.php',
-        'library\\helper\\SaveHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/SaveHelper.php',
-        'library\\helper\\TokenHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/TokenHelper.php',
-        'library\\helper\\ValidateHelper' => __DIR__ . '/..' . '/zoujingli/think-library/src/helper/ValidateHelper.php',
-        'library\\queue\\ListenQueue' => __DIR__ . '/..' . '/zoujingli/think-library/src/queue/ListenQueue.php',
-        'library\\queue\\QueryQueue' => __DIR__ . '/..' . '/zoujingli/think-library/src/queue/QueryQueue.php',
-        'library\\queue\\StartQueue' => __DIR__ . '/..' . '/zoujingli/think-library/src/queue/StartQueue.php',
-        'library\\queue\\StateQueue' => __DIR__ . '/..' . '/zoujingli/think-library/src/queue/StateQueue.php',
-        'library\\queue\\StopQueue' => __DIR__ . '/..' . '/zoujingli/think-library/src/queue/StopQueue.php',
-        'library\\queue\\WorkQueue' => __DIR__ . '/..' . '/zoujingli/think-library/src/queue/WorkQueue.php',
-        'library\\service\\AdminService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/AdminService.php',
-        'library\\service\\CaptchaService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/CaptchaService.php',
-        'library\\service\\MenuService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/MenuService.php',
-        'library\\service\\NodeService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/NodeService.php',
-        'library\\service\\ProcessService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/ProcessService.php',
-        'library\\service\\SystemService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/SystemService.php',
-        'library\\service\\TokenService' => __DIR__ . '/..' . '/zoujingli/think-library/src/service/TokenService.php',
-        'library\\tools\\Crypt' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Crypt.php',
-        'library\\tools\\Csrf' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Csrf.php',
-        'library\\tools\\Csv' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Csv.php',
-        'library\\tools\\Data' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Data.php',
-        'library\\tools\\Emoji' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Emoji.php',
-        'library\\tools\\Express' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Express.php',
-        'library\\tools\\Http' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Http.php',
-        'library\\tools\\JsonRpcClient' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/JsonRpcClient.php',
-        'library\\tools\\JsonRpcServer' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/JsonRpcServer.php',
-        'library\\tools\\Node' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Node.php',
-        'library\\tools\\Options' => __DIR__ . '/..' . '/zoujingli/think-library/src/tools/Options.php',
-        'think\\composer\\LibraryInstaller' => __DIR__ . '/..' . '/topthink/think-installer/src/LibraryInstaller.php',
-        'think\\composer\\Plugin' => __DIR__ . '/..' . '/topthink/think-installer/src/Plugin.php',
-        'think\\composer\\Promise' => __DIR__ . '/..' . '/topthink/think-installer/src/Promise.php',
-        'think\\composer\\ThinkExtend' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkExtend.php',
-        'think\\composer\\ThinkFramework' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkFramework.php',
-        'think\\composer\\ThinkTesting' => __DIR__ . '/..' . '/topthink/think-installer/src/ThinkTesting.php',
     );
 
     public static function getInitializer(ClassLoader $loader)
@@ -383,6 +384,7 @@ class ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b
         return \Closure::bind(function () use ($loader) {
             $loader->prefixLengthsPsr4 = ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::$prefixLengthsPsr4;
             $loader->prefixDirsPsr4 = ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::$prefixesPsr0;
             $loader->classMap = ComposerStaticInit4d241e9f8bb10d006cd7432f945fdb5b::$classMap;
 
         }, null, ClassLoader::class);

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3603 - 6
vendor/composer/installed.json


+ 1502 - 26
vendor/composer/installed.php

@@ -1,114 +1,1590 @@
 <?php return array(
     'root' => array(
-        'pretty_version' => '5.x-dev',
-        'version' => '5.9999999.9999999.9999999-dev',
+        'name' => 'zoujingli/thinkadmin',
+        'pretty_version' => 'dev-master',
+        'version' => 'dev-master',
+        'reference' => 'c8bcb596365ade594918da49da0dff559de8f6c5',
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
-        'reference' => '6e2a989be5a020078f58c5f6fa4db0c577ffbb8f',
-        'name' => 'zoujingli/thinkadmin',
-        'dev' => false,
+        'dev' => true,
     ),
     'versions' => array(
+        'adbario/php-dot-notation' => array(
+            'pretty_version' => '2.3.0',
+            'version' => '2.3.0.0',
+            'reference' => '39ece8d385ce2f5e03718c693932d83ab0cb5972',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../adbario/php-dot-notation',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'alibabacloud/aas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/actiontrail' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/adb' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/aegis' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/afs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/airec' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/alidns' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/alikafka' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/alimt' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/aliprobe' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/aliyuncvc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/appmallsservice' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/arms' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/arms4finance' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/baas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/batchcompute' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/bss' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/bssopenapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cbn' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ccc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ccs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cdn' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cds' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cf' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/chatbot' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/client' => array(
+            'pretty_version' => '1.5.31',
+            'version' => '1.5.31.0',
+            'reference' => '19224d92fe27ab8ef501d77d4891e7660bc023c1',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../alibabacloud/client',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'alibabacloud/cloudapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cloudauth' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cloudesl' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cloudmarketing' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cloudphoto' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cloudwf' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cms' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/commondriver' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/companyreg' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cr' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/crm' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/csb' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/cusanalyticsconline' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dataworkspublic' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dbs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dcdn' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dds' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/democenter' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dm' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dmsenterprise' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/domain' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/domainintl' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/drcloud' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/drds' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dts' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dybaseapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dyplsapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dypnsapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dysmsapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/dyvmsapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/eci' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ecs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ecsinc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/edas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ehpc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/elasticsearch' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/emr' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ess' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/facebody' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/fnf' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/foas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ft' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/goodstech' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/gpdb' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/green' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/hbase' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/hiknoengine' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/hpc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/hsm' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/httpdns' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/idst' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/imageaudit' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/imageenhan' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/imagerecog' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/imagesearch' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/imageseg' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/imm' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/industrybrain' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/iot' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/iqa' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/itaas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ivision' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ivpd' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/jaq' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/jarvis' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/jarvispublic' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/kms' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/linkedmall' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/linkface' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/linkwan' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/live' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/lubancloud' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/lubanruler' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/market' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/mopen' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/mpserverless' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/mts' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/multimediaai' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/nas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/netana' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/nlp' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/nlpautoml' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/nlscloudmeta' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/nlsfiletrans' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/objectdet' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ocr' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ocs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/oms' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ons' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/onsmqtt' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/oos' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/openanalytics' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ossadmin' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ots' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/outboundbot' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/petadata' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/polardb' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/productcatalog' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/pts' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/push' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/pvtz' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/qualitycheck' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ram' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/rds' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/reid' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/retailcloud' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/rkvstore' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ros' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/rtc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/saf' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/sas' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/sasapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/scdn' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/schedulerx2' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/sdk' => array(
+            'pretty_version' => '1.8.1392',
+            'version' => '1.8.1392.0',
+            'reference' => '90b26b8276d325e6930afd9ba4df0dedffcab8ff',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../alibabacloud/sdk',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'alibabacloud/skyeye' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/slb' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/smartag' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/smc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/sms' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/smsintl' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/snsuapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/sts' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/taginner' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/tesladam' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/teslamaxcompute' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/teslastream' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ubsms' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/ubsmsinner' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/uis' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/unimkt' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/visionai' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/vod' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/voicenavigator' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/vpc' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/vs' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/wafopenapi' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/welfareinner' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/xspace' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/xtrace' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/yqbridge' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
+        'alibabacloud/yundun' => array(
+            'dev_requirement' => false,
+            'replaced' => array(
+                0 => '1.8.1392',
+            ),
+        ),
         'aliyuncs/oss-sdk-php' => array(
-            'pretty_version' => 'v2.4.2',
-            'version' => '2.4.2.0',
+            'pretty_version' => 'v2.5.0',
+            'version' => '2.5.0.0',
+            'reference' => 'f0413667d765855eb0aaa728b596801464ffdb06',
             'type' => 'library',
             'install_path' => __DIR__ . '/../aliyuncs/oss-sdk-php',
             'aliases' => array(),
-            'reference' => '0c9d902c33847c07efc66c4cdf823deaea8fc2b6',
+            'dev_requirement' => false,
+        ),
+        'clagiordano/weblibs-configmanager' => array(
+            'pretty_version' => 'v1.5.0',
+            'version' => '1.5.0.0',
+            'reference' => '8802c7396d61a923c9a73e37ead062b24bb1b273',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../clagiordano/weblibs-configmanager',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'danielstjules/stringy' => array(
+            'pretty_version' => '3.1.0',
+            'version' => '3.1.0.0',
+            'reference' => 'df24ab62d2d8213bbbe88cc36fc35a4503b4bd7e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../danielstjules/stringy',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'easywechat-composer/easywechat-composer' => array(
+            'pretty_version' => '1.4.1',
+            'version' => '1.4.1.0',
+            'reference' => '3fc6a7ab6d3853c0f4e2922539b56cc37ef361cd',
+            'type' => 'composer-plugin',
+            'install_path' => __DIR__ . '/../easywechat-composer/easywechat-composer',
+            'aliases' => array(),
             'dev_requirement' => false,
         ),
         'endroid/qr-code' => array(
             'pretty_version' => '1.9.3',
             'version' => '1.9.3.0',
+            'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93',
             'type' => 'library',
             'install_path' => __DIR__ . '/../endroid/qr-code',
             'aliases' => array(),
-            'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93',
             'dev_requirement' => false,
         ),
+        'ezyang/htmlpurifier' => array(
+            'pretty_version' => 'v4.14.0',
+            'version' => '4.14.0.0',
+            'reference' => '12ab42bd6e742c70c0a52f7b82477fcd44e64b75',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'firebase/php-jwt' => array(
+            'pretty_version' => 'v5.5.1',
+            'version' => '5.5.1.0',
+            'reference' => '83b609028194aa042ea33b5af2d41a7427de80e6',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../firebase/php-jwt',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'guzzlehttp/guzzle' => array(
+            'pretty_version' => '7.4.5',
+            'version' => '7.4.5.0',
+            'reference' => '1dd98b0564cb3f6bd16ce683cb755f94c10fbd82',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../guzzlehttp/guzzle',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'guzzlehttp/promises' => array(
+            'pretty_version' => '1.5.1',
+            'version' => '1.5.1.0',
+            'reference' => 'fe752aedc9fd8fcca3fe7ad05d419d32998a06da',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../guzzlehttp/promises',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'guzzlehttp/psr7' => array(
+            'pretty_version' => '2.4.0',
+            'version' => '2.4.0.0',
+            'reference' => '13388f00956b1503577598873fffb5ae994b5737',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../guzzlehttp/psr7',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'hg/apidoc' => array(
+            'pretty_version' => 'v1.1.2',
+            'version' => '1.1.2.0',
+            'reference' => '4925ddf39c22f48acca702843d53bbb70a4687a4',
+            'type' => 'think-extend',
+            'install_path' => __DIR__ . '/../hg/apidoc',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'maennchen/zipstream-php' => array(
+            'pretty_version' => '2.1.0',
+            'version' => '2.1.0.0',
+            'reference' => 'c4c5803cc1f93df3d2448478ef79394a5981cc58',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../maennchen/zipstream-php',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'markbaker/complex' => array(
+            'pretty_version' => '3.0.1',
+            'version' => '3.0.1.0',
+            'reference' => 'ab8bc271e404909db09ff2d5ffa1e538085c0f22',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../markbaker/complex',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'markbaker/matrix' => array(
+            'pretty_version' => '3.0.0',
+            'version' => '3.0.0.0',
+            'reference' => 'c66aefcafb4f6c269510e9ac46b82619a904c576',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../markbaker/matrix',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'monolog/monolog' => array(
+            'pretty_version' => '2.8.0',
+            'version' => '2.8.0.0',
+            'reference' => '720488632c590286b88b80e62aa3d3d551ad4a50',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../monolog/monolog',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'mtdowling/jmespath.php' => array(
+            'pretty_version' => '2.6.1',
+            'version' => '2.6.1.0',
+            'reference' => '9b87907a81b87bc76d19a7fb2d61e61486ee9edb',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../mtdowling/jmespath.php',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'myclabs/php-enum' => array(
+            'pretty_version' => '1.6.6',
+            'version' => '1.6.6.0',
+            'reference' => '32c4202886c51fbe5cc3a7c34ec5c9a4a790345e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../myclabs/php-enum',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'overtrue/socialite' => array(
+            'pretty_version' => '2.0.24',
+            'version' => '2.0.24.0',
+            'reference' => 'ee7e7b000ec7d64f2b8aba1f6a2eec5cdf3f8bec',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../overtrue/socialite',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'overtrue/wechat' => array(
+            'pretty_version' => '4.5.0',
+            'version' => '4.5.0.0',
+            'reference' => '04a940f97d6812a67bb8d5f2dbaebf9ad78ae776',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../overtrue/wechat',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'phpoffice/phpexcel' => array(
+            'pretty_version' => '1.8.2',
+            'version' => '1.8.2.0',
+            'reference' => '1441011fb7ecdd8cc689878f54f8b58a6805f870',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../phpoffice/phpexcel',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'phpoffice/phpspreadsheet' => array(
+            'pretty_version' => '1.24.0',
+            'version' => '1.24.0.0',
+            'reference' => 'ebe8745c92a7cac4514d040758393b5399633b83',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../phpoffice/phpspreadsheet',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'pimple/pimple' => array(
+            'pretty_version' => 'v3.5.0',
+            'version' => '3.5.0.0',
+            'reference' => 'a94b3a4db7fb774b3d78dad2315ddc07629e1bed',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../pimple/pimple',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/cache' => array(
+            'pretty_version' => '1.0.1',
+            'version' => '1.0.1.0',
+            'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/cache',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/cache-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0|2.0',
+            ),
+        ),
+        'psr/container' => array(
+            'pretty_version' => '2.0.1',
+            'version' => '2.0.1.0',
+            'reference' => '2ae37329ee82f91efadc282cc2d527fd6065a5ef',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/container',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/event-dispatcher' => array(
+            'pretty_version' => '1.0.0',
+            'version' => '1.0.0.0',
+            'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/event-dispatcher',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/event-dispatcher-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/http-client' => array(
+            'pretty_version' => '1.0.1',
+            'version' => '1.0.1.0',
+            'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/http-client',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/http-client-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/http-factory' => array(
+            'pretty_version' => '1.0.1',
+            'version' => '1.0.1.0',
+            'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/http-factory',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/http-factory-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/http-message' => array(
+            'pretty_version' => '1.0.1',
+            'version' => '1.0.1.0',
+            'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/http-message',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/http-message-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/log' => array(
+            'pretty_version' => '1.1.4',
+            'version' => '1.1.4.0',
+            'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/log',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/log-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0.0 || 2.0.0 || 3.0.0',
+            ),
+        ),
+        'psr/simple-cache' => array(
+            'pretty_version' => '1.0.1',
+            'version' => '1.0.1.0',
+            'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/simple-cache',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/simple-cache-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0|2.0',
+            ),
+        ),
         'qiniu/php-sdk' => array(
-            'pretty_version' => 'v7.3.0',
-            'version' => '7.3.0.0',
+            'pretty_version' => 'v7.6.0',
+            'version' => '7.6.0.0',
+            'reference' => '57033fab64c92f8c7ae165222dd958553741e711',
             'type' => 'library',
             'install_path' => __DIR__ . '/../qiniu/php-sdk',
             'aliases' => array(),
-            'reference' => '0a461e13b09545b23df361843c6a65fdd3a26426',
+            'dev_requirement' => false,
+        ),
+        'ralouphie/getallheaders' => array(
+            'pretty_version' => '3.0.3',
+            'version' => '3.0.3.0',
+            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../ralouphie/getallheaders',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/cache' => array(
+            'pretty_version' => 'v5.4.11',
+            'version' => '5.4.11.0',
+            'reference' => '5a0fff46df349f0db3fe242263451fddf5277362',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/cache',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/cache-contracts' => array(
+            'pretty_version' => 'v2.5.2',
+            'version' => '2.5.2.0',
+            'reference' => '64be4a7acb83b6f2bf6de9a02cee6dad41277ebc',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/cache-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/cache-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0|2.0',
+            ),
+        ),
+        'symfony/deprecation-contracts' => array(
+            'pretty_version' => 'v2.5.2',
+            'version' => '2.5.2.0',
+            'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/event-dispatcher' => array(
+            'pretty_version' => 'v5.4.9',
+            'version' => '5.4.9.0',
+            'reference' => '8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/event-dispatcher',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/event-dispatcher-contracts' => array(
+            'pretty_version' => 'v2.5.2',
+            'version' => '2.5.2.0',
+            'reference' => 'f98b54df6ad059855739db6fcbc2d36995283fe1',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/event-dispatcher-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '2.0',
+            ),
+        ),
+        'symfony/http-foundation' => array(
+            'pretty_version' => 'v5.4.11',
+            'version' => '5.4.11.0',
+            'reference' => '0a5868e0999e9d47859ba3d918548ff6943e6389',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/http-foundation',
+            'aliases' => array(),
             'dev_requirement' => false,
         ),
         'symfony/options-resolver' => array(
             'pretty_version' => 'v3.4.47',
             'version' => '3.4.47.0',
+            'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/options-resolver',
             'aliases' => array(),
-            'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744',
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-ctype' => array(
+            'pretty_version' => 'v1.26.0',
+            'version' => '1.26.0.0',
+            'reference' => '6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-mbstring' => array(
+            'pretty_version' => 'v1.26.0',
+            'version' => '1.26.0.0',
+            'reference' => '9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-php73' => array(
+            'pretty_version' => 'v1.26.0',
+            'version' => '1.26.0.0',
+            'reference' => 'e440d35fa0286f77fb45b79a03fedbeda9307e85',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-php73',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-php80' => array(
+            'pretty_version' => 'v1.26.0',
+            'version' => '1.26.0.0',
+            'reference' => 'cfa0ae98841b9e461207c13ab093d76b0fa7bace',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-php80',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/psr-http-message-bridge' => array(
+            'pretty_version' => 'v2.1.2',
+            'version' => '2.1.2.0',
+            'reference' => '22b37c8a3f6b5d94e9cdbd88e1270d96e2f97b34',
+            'type' => 'symfony-bridge',
+            'install_path' => __DIR__ . '/../symfony/psr-http-message-bridge',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/service-contracts' => array(
+            'pretty_version' => 'v1.1.2',
+            'version' => '1.1.2.0',
+            'reference' => '191afdcb5804db960d26d8566b7e9a2843cab3a0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/service-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/var-exporter' => array(
+            'pretty_version' => 'v5.4.10',
+            'version' => '5.4.10.0',
+            'reference' => '8fc03ee75eeece3d9be1ef47d26d79bea1afb340',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/var-exporter',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/yaml' => array(
+            'pretty_version' => 'v2.8.52',
+            'version' => '2.8.52.0',
+            'reference' => '02c1859112aa779d9ab394ae4f3381911d84052b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/yaml',
+            'aliases' => array(),
             'dev_requirement' => false,
         ),
         'topthink/framework' => array(
             'pretty_version' => 'v5.1.41',
             'version' => '5.1.41.0',
+            'reference' => '7137741a323a4a60cfca334507cd1812fac91bb2',
             'type' => 'think-framework',
             'install_path' => __DIR__ . '/../../thinkphp',
             'aliases' => array(),
-            'reference' => '7137741a323a4a60cfca334507cd1812fac91bb2',
             'dev_requirement' => false,
         ),
         'topthink/think-installer' => array(
             'pretty_version' => 'v2.0.5',
             'version' => '2.0.5.0',
+            'reference' => '38ba647706e35d6704b5d370c06f8a160b635f88',
             'type' => 'composer-plugin',
             'install_path' => __DIR__ . '/../topthink/think-installer',
             'aliases' => array(),
-            'reference' => '38ba647706e35d6704b5d370c06f8a160b635f88',
             'dev_requirement' => false,
         ),
         'zoujingli/ip2region' => array(
-            'pretty_version' => 'v1.0.10',
-            'version' => '1.0.10.0',
+            'pretty_version' => 'v1.0.12',
+            'version' => '1.0.12.0',
+            'reference' => '82cebc7a6be46524797454e98d3b165521065c26',
             'type' => 'library',
             'install_path' => __DIR__ . '/../zoujingli/ip2region',
             'aliases' => array(),
-            'reference' => '453480d0ab5b6fdbdf4aa400b7598a10ff2dc5c0',
             'dev_requirement' => false,
         ),
         'zoujingli/think-library' => array(
             'pretty_version' => 'v5.1.x-dev',
             'version' => '5.1.9999999.9999999-dev',
+            'reference' => '6a5c8b7ad40d19664494522dcf9388a48df43447',
             'type' => 'library',
             'install_path' => __DIR__ . '/../zoujingli/think-library',
             'aliases' => array(),
-            'reference' => '38c150e2a61280f1f16d16a08aeabdc18b551151',
             'dev_requirement' => false,
         ),
         'zoujingli/thinkadmin' => array(
-            'pretty_version' => '5.x-dev',
-            'version' => '5.9999999.9999999.9999999-dev',
+            'pretty_version' => 'dev-master',
+            'version' => 'dev-master',
+            'reference' => 'c8bcb596365ade594918da49da0dff559de8f6c5',
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
-            'reference' => '6e2a989be5a020078f58c5f6fa4db0c577ffbb8f',
             'dev_requirement' => false,
         ),
         'zoujingli/wechat-developer' => array(
-            'pretty_version' => 'v1.2.31',
-            'version' => '1.2.31.0',
+            'pretty_version' => 'v1.2.35',
+            'version' => '1.2.35.0',
+            'reference' => 'cfe3e83798d3c7b78855ae214acb6b14321de45d',
             'type' => 'library',
             'install_path' => __DIR__ . '/../zoujingli/wechat-developer',
             'aliases' => array(),
-            'reference' => '0cf699c725f69d66657a50e60d22f71c9e5a5e16',
             'dev_requirement' => false,
         ),
         'zoujingli/weopen-developer' => array(
             'pretty_version' => 'dev-master',
             'version' => 'dev-master',
+            'reference' => '4d0d3c064e54556621453845fc65ba52de58a880',
             'type' => 'library',
             'install_path' => __DIR__ . '/../zoujingli/weopen-developer',
             'aliases' => array(
                 0 => '9999999-dev',
             ),
-            'reference' => '4d0d3c064e54556621453845fc65ba52de58a880',
             'dev_requirement' => false,
         ),
     ),

+ 2 - 2
vendor/composer/platform_check.php

@@ -4,8 +4,8 @@
 
 $issues = array();
 
-if (!(PHP_VERSION_ID >= 50600)) {
-    $issues[] = 'Your Composer dependencies require a PHP version ">= 5.6.0". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 70300)) {
+    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.';
 }
 
 if ($issues) {

+ 0 - 29
vendor/qiniu/php-sdk/.travis.yml

@@ -1,29 +0,0 @@
-language: php
-
-php:
-  - 5.4
-  - 5.5
-  - 5.6
-  - 7.0
-
-dist: trusty
-os: linux
-
-before_script:
-  - export QINIU_TEST_ENV="travis"
-  - travis_retry composer self-update
-  - travis_retry composer install --no-interaction --prefer-source --dev
-
-script:
-  - ./vendor/bin/phpcs --standard=PSR2 src
-  - ./vendor/bin/phpcs --standard=PSR2 examples
-  - ./vendor/bin/phpcs --standard=PSR2 tests
-  - ./vendor/bin/phpunit --coverage-clover=coverage.xml
-
-env:
-  global:
-    - QINIU_ACCESS_KEY=vHg2e7nOh7Jsucv2Azr5FH6omPgX22zoJRWa0FN5
-    - secure: "V9BsntXQZwvO9EOD6itzaae2uq+GemzyTUTxMTJx1/jFoUNpCU2O2UAgjA2XSEr5sgci0KWDV4Krbzv3EBB4uplOFLMI3w32256UHbT9E0x3YjhfPJZk68MH1iS1be7X81LDHON7yveavK8987s3qzjeUcbfLSPgccT+cvf7+dc="
-
-after_success:
-  - bash <(curl -s https://codecov.io/bash)

+ 17 - 0
vendor/qiniu/php-sdk/CHANGELOG.md

@@ -1,5 +1,22 @@
 # Changelog
 
+## 7.6.0 (2022-06-08)
+* 对象存储,管理类 API 发送请求时增加 [X-Qiniu-Date](https://developer.qiniu.com/kodo/3924/common-request-headers) (生成请求的时间) header
+## 7.5.0 (2022-04-18)
+* 对象存储,新增支持 [深度归档存储类型](https://developer.qiniu.com/kodo/3956/kodo-category#deep_archive)
+
+## 7.4.3 (2022-04-01)
+* 优化签名算法逻辑
+
+## 7.4.2(2022-03-01)
+* 修复已知关于请求 Header 处理不当问题,比如没有处理为大小写不敏感等问题
+
+## 7.4.1(2021-09-24)
+* 修复了 分片上传 v2 已知问题,明确给出了参数不合理情况下对应的错误提示信息
+
+## 7.4.0 (2021-07-19)
+* 【对象存储】支持 [分片上传 v2](https://developer.qiniu.com/kodo/7458/multipartupload) 和 断点续传,使用方式见 [开发者文档](https://developer.qiniu.com/kodo/1241/php#resume-upload-file)
+
 ## 7.3.0 (2020-09-24)
 ### 新增
 * 【对象存储】增加异步抓取方法与demo

+ 4 - 0
vendor/qiniu/php-sdk/autoload.php

@@ -1,5 +1,9 @@
 <?php
 
+if ( file_exists(dirname(__FILE__).'/vendor/autoload.php') ) {
+    require_once dirname(__FILE__).'/vendor/autoload.php';
+}
+
 function classLoader($class)
 {
     $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);

+ 16 - 5
vendor/qiniu/php-sdk/composer.json

@@ -2,7 +2,12 @@
     "name": "qiniu/php-sdk",
     "type": "library",
     "description": "Qiniu Resource (Cloud) Storage SDK for PHP",
-    "keywords": ["qiniu", "storage", "sdk", "cloud"],
+    "keywords": [
+        "qiniu",
+        "storage",
+        "sdk",
+        "cloud"
+    ],
     "homepage": "http://developer.qiniu.com/",
     "license": "MIT",
     "authors": [
@@ -13,14 +18,20 @@
         }
     ],
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.3",
+        "myclabs/php-enum": "1.6.6"
     },
     "require-dev": {
+        "paragonie/random_compat": ">=2",
         "phpunit/phpunit": "~4.0",
-        "squizlabs/php_codesniffer": "~2.3"
+        "squizlabs/php_codesniffer": "~3.6"
     },
     "autoload": {
-        "psr-4": {"Qiniu\\": "src/Qiniu"},
-        "files": ["src/Qiniu/functions.php"]
+        "psr-4": {
+            "Qiniu\\": "src/Qiniu"
+        },
+        "files": [
+            "src/Qiniu/functions.php"
+        ]
     }
 }

+ 5 - 1
vendor/qiniu/php-sdk/examples/bucket_lifecycleRule.php

@@ -21,13 +21,17 @@ $name = 'demo';   // 生命周期规则名称
 $prefix = 'test'; // 规则策略中的前缀
 $delete_after_days = 80; // 用户新创建的文件将在该设定时间之后自动删除
 $to_line_after_days = 70; // 用户新创建的文件将在该设定的时间之后自动转为低频存储
+$to_archive_after_days = 72; // 用户新创建的文件将在该设定的时间之后自动转为归档存储
+$to_deep_archive_after_days = 74; // 用户新创建的文件将在该设定的时间之后自动转为深度归档存储
 
 list($ret, $err) = $bucketManager->bucketLifecycleRule(
     $bucket,
     $name,
     $prefix,
     $delete_after_days,
-    $to_line_after_days
+    $to_line_after_days,
+    $to_archive_after_days,
+    $to_deep_archive_after_days
 );
 if ($err != null) {
     var_dump($err);

+ 7 - 2
vendor/qiniu/php-sdk/examples/rs_batch_change_type.php

@@ -25,12 +25,17 @@ $keys = array(
 
 $keyTypePairs = array();
 
-// type=0表示普通存储,type=1表示低频存储
+// key 是文件
+// value 是存储类型(fileType)
+// 0 表示普通存储
+// 1 表示低频存储
+// 2 表示归档存储
+// 3 表示深度归档存储
 foreach ($keys as $key) {
     $keyTypePairs[$key] = 1;
 }
 
-$ops = $bucketManager->buildBatchChangeType($bucket, $keyTypePairs);
+$ops = BucketManager::buildBatchChangeType($bucket, $keyTypePairs);
 list($ret, $err) = $bucketManager->batch($ops);
 if ($err != null) {
     var_dump($err);

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_change_mime.php

@@ -21,7 +21,9 @@ $bucketManager = new BucketManager($auth, $config);
 $key = 'qiniu.mp4';
 $newMime = 'video/x-mp4';
 
-$err = $bucketManager->changeMime($bucket, $key, $newMime);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->changeMime($bucket, $key, $newMime);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_change_status.php

@@ -21,7 +21,9 @@ $status = 1;// 启用:0,禁用:1
 
 $key = "qiniu.jpg";
 
-$err = $bucketManager->changeStatus($bucket, $key, $status);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->changeStatus($bucket, $key, $status);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 6 - 4
vendor/qiniu/php-sdk/examples/rs_change_type.php

@@ -21,9 +21,11 @@ $bucketManager = new BucketManager($auth, $config);
 // 参考文档:https://developer.qiniu.com/kodo/api/3710/chtype
 
 $key = "qiniu.mp4";
-$fileType = 1; // 0 表示标准存储;1 表示低频存储;2 表示归档存储
+$fileType = 1; // 0 表示标准存储;1 表示低频存储;2 表示归档存储;3 表示深度归档存储
 
-$err = $bucketManager->changeType($bucket, $key, $fileType);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->changeType($bucket, $key, $fileType);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_copy.php

@@ -25,7 +25,9 @@ $destBucket = $bucket;
 $srcKey = $key;
 $destKey = $key . "_copy";
 
-$err = $bucketManager->copy($srcBucket, $srcKey, $destBucket, $destKey, true);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->copy($srcBucket, $srcKey, $destBucket, $destKey, true);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_delete.php

@@ -19,7 +19,9 @@ $bucketManager = new BucketManager($auth, $config);
 
 $key = "qiniu.mp4_copy";
 
-$err = $bucketManager->delete($bucket, $key);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->delete($bucket, $key);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_delete_after_days.php

@@ -18,7 +18,9 @@ $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
 $key = 'qiniu.mp4';
 $days = 10; // 设置为 0 表示取消生命周期
 
-$err = $bucketManager->deleteAfterDays($bucket, $key, $days);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->deleteAfterDays($bucket, $key, $days);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_move.php

@@ -21,7 +21,9 @@ $destKey = $key . "_move";
 // 资源移动或者重命名
 // 参考文档:https://developer.qiniu.com/kodo/api/1288/move
 
-$err = $bucketManager->move($srcBucket, $srcKey, $destBucket, $destKey, true);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->move($srcBucket, $srcKey, $destBucket, $destKey, true);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 5 - 3
vendor/qiniu/php-sdk/examples/rs_prefetch.php

@@ -17,7 +17,9 @@ $bucketManager = new \Qiniu\Storage\BucketManager($auth, $config);
 // 镜像资源更新
 // 参考文档:https://developer.qiniu.com/kodo/api/1293/prefetch
 
-$err = $bucketManager->prefetch($bucket, $key);
-if ($err) {
-    print_r($err);
+list($ret, $err) = $bucketManager->prefetch($bucket, $key);
+if ($err != null) {
+    var_dump($err);
+} else {
+    var_dump($ret);
 }

+ 1 - 1
vendor/qiniu/php-sdk/examples/upload_multi_demos.php

@@ -49,7 +49,7 @@ if ($err !== null) {
 $policy = array(
     'callbackUrl' => 'http://172.30.251.210/upload_verify_callback.php',
     'callbackBody' => 'filename=$(fname)&filesize=$(fsize)'
-//  'callbackBodyType' => 'application/json',                       
+//  'callbackBodyType' => 'application/json',
 //  'callbackBody' => '{"filename":$(fname), "filesize": $(fsize)}'  //设置application/json格式回调
 );
 $token = $auth->uploadToken($bucket, null, 3600, $policy);

+ 105 - 39
vendor/qiniu/php-sdk/src/Qiniu/Auth.php

@@ -1,17 +1,26 @@
 <?php
 namespace Qiniu;
 
+use Qiniu\Http\Header;
 use Qiniu\Zone;
 
 final class Auth
 {
     private $accessKey;
     private $secretKey;
+    public $options;
 
-    public function __construct($accessKey, $secretKey)
+    public function __construct($accessKey, $secretKey, $options = null)
     {
         $this->accessKey = $accessKey;
         $this->secretKey = $secretKey;
+        $defaultOptions = array(
+            'disableQiniuTimestampSignature' => null
+        );
+        if ($options == null) {
+            $options = $defaultOptions;
+        }
+        $this->options = array_merge($defaultOptions, $options);
     }
 
     public function getAccessKey()
@@ -49,6 +58,80 @@ final class Auth
         return $this->sign($data);
     }
 
+    /**
+     * @param string $urlString
+     * @param string $method
+     * @param string $body
+     * @param null|Header $headers
+     */
+    public function signQiniuAuthorization($urlString, $method = "GET", $body = "", $headers = null)
+    {
+        $url = parse_url($urlString);
+        if (!$url) {
+            return array(null, new \Exception("parse_url error"));
+        }
+
+        // append method, path and query
+        if ($method === "") {
+            $data = "GET ";
+        } else {
+            $data = $method . " ";
+        }
+        if (isset($url["path"])) {
+            $data .= $url["path"];
+        }
+        if (isset($url["query"])) {
+            $data .= "?" . $url["query"];
+        }
+
+        // append Host
+        $data .= "\n";
+        $data .= "Host: ";
+        if (isset($url["host"])) {
+            $data .= $url["host"];
+        }
+        if (isset($url["port"]) && $url["port"] > 0) {
+            $data .= ":" . $url["port"];
+        }
+
+        // try append content type
+        if ($headers != null && isset($headers["Content-Type"])) {
+            // append content type
+            $data .= "\n";
+            $data .= "Content-Type: " . $headers["Content-Type"];
+        }
+
+        // try append xQiniuHeaders
+        if ($headers != null) {
+            $headerLines = array();
+            $keyPrefix = "X-Qiniu-";
+            foreach ($headers as $k => $v) {
+                if (strlen($k) > strlen($keyPrefix) && strpos($k, $keyPrefix) === 0) {
+                    array_push(
+                        $headerLines,
+                        $k . ": " . $v
+                    );
+                }
+            }
+            if (count($headerLines) > 0) {
+                $data .= "\n";
+                sort($headerLines);
+                $data .= implode("\n", $headerLines);
+            }
+        }
+
+        // append body
+        $data .= "\n\n";
+        if (strlen($body) > 0
+            && isset($headers["Content-Type"])
+            && $headers["Content-Type"] != "application/octet-stream"
+        ) {
+            $data .= $body;
+        }
+
+        return array($this->sign(utf8_encode($data)), null);
+    }
+
     public function verifyCallback($contentType, $originAuthorization, $url, $body)
     {
         $authorization = 'QBox ' . $this->signRequest($url, $body, $contentType);
@@ -141,48 +224,31 @@ final class Auth
 
     public function authorizationV2($url, $method, $body = null, $contentType = null)
     {
-        $urlItems = parse_url($url);
-        $host = $urlItems['host'];
-
-        if (isset($urlItems['port'])) {
-            $port = $urlItems['port'];
-        } else {
-            $port = '';
+        $headers = new Header();
+        $result = array();
+        if ($contentType != null) {
+            $headers['Content-Type'] = $contentType;
+            $result['Content-Type'] = $contentType;
         }
 
-        $path = $urlItems['path'];
-        if (isset($urlItems['query'])) {
-            $query = $urlItems['query'];
+        $signDate = gmdate('Ymd\THis\Z', time());
+        if ($this->options['disableQiniuTimestampSignature'] !== null) {
+            if (!$this->options['disableQiniuTimestampSignature']) {
+                $headers['X-Qiniu-Date'] = $signDate;
+                $result['X-Qiniu-Date'] = $signDate;
+            }
+        } elseif (getenv("DISABLE_QINIU_TIMESTAMP_SIGNATURE")) {
+            if (strtolower(getenv("DISABLE_QINIU_TIMESTAMP_SIGNATURE")) !== "true") {
+                $headers['X-Qiniu-Date'] = $signDate;
+                $result['X-Qiniu-Date'] = $signDate;
+            }
         } else {
-            $query = '';
-        }
-
-        //write request uri
-        $toSignStr = $method . ' ' . $path;
-        if (!empty($query)) {
-            $toSignStr .= '?' . $query;
-        }
-
-        //write host and port
-        $toSignStr .= "\nHost: " . $host;
-        if (!empty($port)) {
-            $toSignStr .= ":" . $port;
-        }
-
-        //write content type
-        if (!empty($contentType)) {
-            $toSignStr .= "\nContent-Type: " . $contentType;
-        }
-
-        $toSignStr .= "\n\n";
-
-        //write body
-        if (!empty($body)) {
-            $toSignStr .= $body;
+            $headers['X-Qiniu-Date'] = $signDate;
+            $result['X-Qiniu-Date'] = $signDate;
         }
 
-        $sign = $this->sign($toSignStr);
-        $auth = 'Qiniu ' . $sign;
-        return array('Authorization' => $auth);
+        list($sign) = $this->signQiniuAuthorization($url, $method, $body, $headers);
+        $result['Authorization'] = 'Qiniu ' . $sign;
+        return $result;
     }
 }

+ 7 - 1
vendor/qiniu/php-sdk/src/Qiniu/Config.php

@@ -3,7 +3,7 @@ namespace Qiniu;
 
 final class Config
 {
-    const SDK_VER = '7.3.0';
+    const SDK_VER = '7.6.0';
 
     const BLOCK_SIZE = 4194304; //4*1024*1024 分块上传块大小,该参数为接口规格,不能修改
 
@@ -133,6 +133,12 @@ final class Config
             $this->regionCache[$cacheId] = $region;
         } else {
             $region = Zone::queryZone($accessKey, $bucket);
+            if (is_array($region)) {
+                list($region, $err) = $region;
+                if ($err != null) {
+                    throw new \Exception($err->message());
+                }
+            }
             $this->regionCache[$cacheId] = $region;
         }
         return $region;

+ 1 - 21
vendor/qiniu/php-sdk/src/Qiniu/Http/Client.php

@@ -125,36 +125,16 @@ final class Client
         }
         $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
         $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
-        $headers = self::parseHeaders(substr($result, 0, $header_size));
+        $headers = Header::parseRawText(substr($result, 0, $header_size));
         $body = substr($result, $header_size);
         curl_close($ch);
         return new Response($code, $duration, $headers, $body, null);
     }
 
-    private static function parseHeaders($raw)
-    {
-        $headers = array();
-        $headerLines = explode("\r\n", $raw);
-        foreach ($headerLines as $line) {
-            $headerLine = trim($line);
-            $kv = explode(':', $headerLine);
-            if (count($kv) > 1) {
-                $kv[0] =self::ucwordsHyphen($kv[0]);
-                $headers[$kv[0]] = trim($kv[1]);
-            }
-        }
-        return $headers;
-    }
-
     private static function escapeQuotes($str)
     {
         $find = array("\\", "\"");
         $replace = array("\\\\", "\\\"");
         return str_replace($find, $replace, $str);
     }
-    
-    private static function ucwordsHyphen($str)
-    {
-        return str_replace('- ', '-', ucwords(str_replace('-', '- ', $str)));
-    }
 }

+ 45 - 9
vendor/qiniu/php-sdk/src/Qiniu/Http/Response.php

@@ -8,7 +8,21 @@ namespace Qiniu\Http;
 final class Response
 {
     public $statusCode;
+    /**
+     * deprecated because of field names case-sensitive.
+     * use $normalizedHeaders instead which field names are case-insensitive.
+     * but be careful not to use $normalizedHeaders with `array_*` functions,
+     * such as `array_key_exists`, `array_keys`, `array_values`.
+     *
+     * use `isset` instead of `array_key_exists`,
+     * and should never use `array_key_exists` at http header.
+     *
+     * use `foreach` instead of `array_keys`, `array_values`.
+     *
+     * @deprecated
+     */
     public $headers;
+    public $normalizedHeaders;
     public $body;
     public $error;
     private $jsonData;
@@ -87,21 +101,31 @@ final class Response
     {
         $this->statusCode = $code;
         $this->duration = $duration;
-        $this->headers = $headers;
+        $this->headers = array();
         $this->body = $body;
         $this->error = $error;
         $this->jsonData = null;
+
         if ($error !== null) {
             return;
         }
 
+        foreach ($headers as $k => $vs) {
+            if (is_array($vs)) {
+                $this->headers[$k] = $vs[count($vs) - 1];
+            } else {
+                $this->headers[$k] = $vs;
+            }
+        }
+        $this->normalizedHeaders = new Header($headers);
+
         if ($body === null) {
             if ($code >= 400) {
                 $this->error = self::$statusTexts[$code];
             }
             return;
         }
-        if (self::isJson($headers)) {
+        if (self::isJson($this->normalizedHeaders)) {
             try {
                 $jsonData = self::bodyJson($body);
                 if ($code >= 400) {
@@ -128,6 +152,19 @@ final class Response
         return $this->jsonData;
     }
 
+    public function headers($normalized = false)
+    {
+        if ($normalized) {
+            return $this->normalizedHeaders;
+        }
+        return $this->headers;
+    }
+
+    public function body()
+    {
+        return $this->body;
+    }
+
     private static function bodyJson($body)
     {
         return \Qiniu\json_decode((string) $body, true, 512);
@@ -135,24 +172,24 @@ final class Response
 
     public function xVia()
     {
-        $via = $this->headers['X-Via'];
+        $via = $this->normalizedHeaders['X-Via'];
         if ($via === null) {
-            $via = $this->headers['X-Px'];
+            $via = $this->normalizedHeaders['X-Px'];
         }
         if ($via === null) {
-            $via = $this->headers['Fw-Via'];
+            $via = $this->normalizedHeaders['Fw-Via'];
         }
         return $via;
     }
 
     public function xLog()
     {
-        return $this->headers['X-Log'];
+        return $this->normalizedHeaders['X-Log'];
     }
 
     public function xReqId()
     {
-        return $this->headers['X-Reqid'];
+        return $this->normalizedHeaders['X-Reqid'];
     }
 
     public function ok()
@@ -170,7 +207,6 @@ final class Response
 
     private static function isJson($headers)
     {
-        return array_key_exists('content-type', $headers) || array_key_exists('Content-Type', $headers) &&
-        strpos($headers['Content-Type'], 'application/json') === 0;
+        return isset($headers['Content-Type']) && strpos($headers['Content-Type'], 'application/json') === 0;
     }
 }

+ 87 - 44
vendor/qiniu/php-sdk/src/Qiniu/Storage/BucketManager.php

@@ -150,7 +150,7 @@ final class BucketManager
         \Qiniu\setWithoutEmpty($query, 'limit', $limit);
         \Qiniu\setWithoutEmpty($query, 'delimiter', $delimiter);
         $url = $this->getRsfHost() . '/list?' . http_build_query($query);
-        return $this->get($url);
+        return $this->getV2($url);
     }
 
     /**
@@ -182,7 +182,7 @@ final class BucketManager
         \Qiniu\setWithoutEmpty($query, 'skipconfirm', $skipconfirm);
         $path = '/v2/list?' . http_build_query($query);
         $url = $this->getRsfHost() . $path;
-        $headers = $this->auth->authorization($url, null, 'application/x-www-form-urlencoded');
+        $headers = $this->auth->authorizationV2($url, 'POST', null, 'application/x-www-form-urlencoded');
         $ret = Client::post($url, null, $headers);
         if (!$ret->ok()) {
             return array(null, new Error($url, $ret));
@@ -203,14 +203,20 @@ final class BucketManager
      * 大于0表示多少天后删除,需大于 to_line_after_days
      * @param int $to_line_after_days 指定文件上传多少天后转低频存储。指定为0表示
      * 不转低频存储,小于0表示上传的文件立即变低频存储
+     * @param int $to_archive_after_days 指定文件上传多少天后转归档存储。指定为0表示
+     * 不转归档存储,小于0表示上传的文件立即变归档存储
+     * @param int $to_deep_archive_after_days 指定文件上传多少天后转深度归档存储。指定为0表示
+     * 不转深度归档存储,小于0表示上传的文件立即变深度归档存储
      * @return array
      */
     public function bucketLifecycleRule(
         $bucket,
         $name,
         $prefix,
-        $delete_after_days,
-        $to_line_after_days
+        $delete_after_days = null,
+        $to_line_after_days = null,
+        $to_archive_after_days = null,
+        $to_deep_archive_after_days = null
     ) {
         $path = '/rules/add';
         $params = array();
@@ -229,6 +235,12 @@ final class BucketManager
         if ($to_line_after_days) {
             $params['to_line_after_days'] = $to_line_after_days;
         }
+        if ($to_archive_after_days) {
+            $params['to_archive_after_days'] = $to_archive_after_days;
+        }
+        if ($to_deep_archive_after_days) {
+            $params['to_deep_archive_after_days'] = $to_deep_archive_after_days;
+        }
         $data = http_build_query($params);
         $info = $this->ucPost($path, $data);
         return $info;
@@ -245,14 +257,20 @@ final class BucketManager
      * 大于0表示多少天后删除,需大于 to_line_after_days
      * @param int $to_line_after_days 指定文件上传多少天后转低频存储。指定为0表示不
      * 转低频存储,小于0表示上传的文件立即变低频存储
+     * @param int $to_archive_after_days 指定文件上传多少天后转归档存储。指定为0表示
+     * 不转归档存储,小于0表示上传的文件立即变归档存储
+     * @param int $to_deep_archive_after_days 指定文件上传多少天后转深度归档存储。指定为0表示
+     * 不转深度归档存储,小于0表示上传的文件立即变深度归档存储
      * @return array
      */
     public function updateBucketLifecycleRule(
         $bucket,
         $name,
         $prefix,
-        $delete_after_days,
-        $to_line_after_days
+        $delete_after_days = null,
+        $to_line_after_days = null,
+        $to_archive_after_days = null,
+        $to_deep_archive_after_days = null
     ) {
         $path = '/rules/update';
         $params = array();
@@ -271,6 +289,12 @@ final class BucketManager
         if ($to_line_after_days) {
             $params['to_line_after_days'] = $to_line_after_days;
         }
+        if ($to_archive_after_days) {
+            $params['to_archive_after_days'] = $to_archive_after_days;
+        }
+        if ($to_deep_archive_after_days) {
+            $params['to_deep_archive_after_days'] = $to_deep_archive_after_days;
+        }
         $data = http_build_query($params);
         return $this->ucPost($path, $data);
     }
@@ -675,7 +699,7 @@ final class BucketManager
      *
      * @param string $bucket 待操作资源所在空间
      * @param string $key 待操作资源文件名
-     * @param int $fileType 0 表示标准存储;1 表示低频存储;2 表示归档存储
+     * @param int $fileType 0 表示标准存储;1 表示低频存储;2 表示归档存储;3 表示深度归档存储
      *
      * @return array
      * @link  https://developer.qiniu.com/kodo/api/3710/chtype
@@ -688,6 +712,23 @@ final class BucketManager
     }
 
     /**
+     * 解冻指定资源的存储类型
+     *
+     * @param string $bucket 待操作资源所在空间
+     * @param string $key 待操作资源文件名
+     * @param int $freezeAfterDays 解冻有效时长,取值范围 1~7
+     *
+     * @return array
+     * @link  https://developer.qiniu.com/kodo/api/6380/restore-archive
+     */
+    public function restoreAr($bucket, $key, $freezeAfterDays)
+    {
+        $resource = \Qiniu\entry($bucket, $key);
+        $path = '/restoreAr/' . $resource . '/freezeAfterDays/' . $freezeAfterDays;
+        return $this->rsPost($path);
+    }
+
+    /**
      * 修改文件的存储状态,即禁用状态和启用状态间的的互相转换
      *
      * @param string $bucket 待操作资源所在空间
@@ -722,10 +763,14 @@ final class BucketManager
         $path = '/fetch/' . $resource . '/to/' . $to;
 
         $ak = $this->auth->getAccessKey();
-        $ioHost = $this->config->getIovipHost($ak, $bucket);
+        try {
+            $ioHost = $this->config->getIovipHost($ak, $bucket);
+        } catch (\Exception $err) {
+            return array(null, $err);
+        }
 
         $url = $ioHost . $path;
-        return $this->post($url, null);
+        return $this->postV2($url, null);
     }
 
     /**
@@ -776,7 +821,11 @@ final class BucketManager
         $data = json_encode($params);
 
         $ak = $this->auth->getAccessKey();
-        $apiHost = $this->config->getApiHost($ak, $bucket);
+        try {
+            $apiHost = $this->config->getApiHost($ak, $bucket);
+        } catch (\Exception $err) {
+            return array(null, $err);
+        }
         $url = $apiHost . $path;
 
         return $this->postV2($url, $data);
@@ -801,13 +850,12 @@ final class BucketManager
 
         $url = $scheme . "api-" . $zone . ".qiniu.com/sisyphus/fetch?id=" . $id;
 
-        $response = $this->getV2($url);
+        list($ret, $err) = $this->getV2($url);
 
-        if (!$response->ok()) {
-            print("statusCode: " . $response->statusCode);
-            return array(null, new Error($url, $response));
+        if ($err != null) {
+            return array(null, $err);
         }
-        return array($response->json(), null);
+        return array($ret, null);
     }
 
 
@@ -826,10 +874,14 @@ final class BucketManager
         $path = '/prefetch/' . $resource;
 
         $ak = $this->auth->getAccessKey();
-        $ioHost = $this->config->getIovipHost($ak, $bucket);
+        try {
+            $ioHost = $this->config->getIovipHost($ak, $bucket);
+        } catch (\Exception $err) {
+            return array(null, $err);
+        }
 
         $url = $ioHost . $path;
-        return $this->post($url, null);
+        return $this->postV2($url, null);
     }
 
     /**
@@ -910,42 +962,42 @@ final class BucketManager
     private function rsPost($path, $body = null)
     {
         $url = $this->getRsHost() . $path;
-        return $this->post($url, $body);
+        return $this->postV2($url, $body);
     }
 
     private function apiPost($path, $body = null)
     {
         $url = $this->getApiHost() . $path;
-        return $this->post($url, $body);
+        return $this->postV2($url, $body);
     }
 
     private function ucPost($path, $body = null)
     {
         $url = $this->getUcHost() . $path;
-        return $this->post($url, $body);
+        return $this->postV2($url, $body);
     }
 
     private function ucGet($path)
     {
         $url = $this->getUcHost() . $path;
-        return $this->get($url);
+        return $this->getV2($url);
     }
 
     private function apiGet($path)
     {
         $url = $this->getApiHost() . $path;
-        return $this->get($url);
+        return $this->getV2($url);
     }
 
     private function rsGet($path)
     {
         $url = $this->getRsHost() . $path;
-        return $this->get($url);
+        return $this->getV2($url);
     }
 
-    private function get($url)
+    private function getV2($url)
     {
-        $headers = $this->auth->authorization($url);
+        $headers = $this->auth->authorizationV2($url, 'GET', null, 'application/x-www-form-urlencoded');
         $ret = Client::get($url, $headers);
         if (!$ret->ok()) {
             return array(null, new Error($url, $ret));
@@ -953,27 +1005,9 @@ final class BucketManager
         return array($ret->json(), null);
     }
 
-    private function getV2($url)
-    {
-        $headers = $this->auth->authorizationV2($url, 'GET');
-        return Client::get($url, $headers);
-    }
-
-    private function post($url, $body)
-    {
-        $headers = $this->auth->authorization($url, $body, 'application/x-www-form-urlencoded');
-        $ret = Client::post($url, $body, $headers);
-        if (!$ret->ok()) {
-            return array(null, new Error($url, $ret));
-        }
-        $r = ($ret->body === null) ? array() : $ret->json();
-        return array($r, null);
-    }
-
     private function postV2($url, $body)
     {
-        $headers = $this->auth->authorizationV2($url, 'POST', $body, 'application/json');
-        $headers["Content-Type"] = 'application/json';
+        $headers = $this->auth->authorizationV2($url, 'POST', $body, 'application/x-www-form-urlencoded');
         $ret = Client::post($url, $body, $headers);
         if (!$ret->ok()) {
             return array(null, new Error($url, $ret));
@@ -1038,6 +1072,15 @@ final class BucketManager
         return $data;
     }
 
+    public static function buildBatchRestoreAr($bucket, $key_restore_days_pairs)
+    {
+        $data = array();
+        foreach ($key_restore_days_pairs as $key => $restore_days) {
+            array_push($data, '/restoreAr/' . \Qiniu\entry($bucket, $key) . '/freezeAfterDays/' . $restore_days);
+        }
+        return $data;
+    }
+
     private static function oneKeyBatch($operation, $bucket, $keys)
     {
         $data = array();

+ 13 - 4
vendor/qiniu/php-sdk/src/Qiniu/Storage/FormUploader.php

@@ -2,6 +2,7 @@
 
 namespace Qiniu\Storage;
 
+use Qiniu\Config;
 use Qiniu\Http\Error;
 use Qiniu\Http\Client;
 
@@ -14,7 +15,7 @@ final class FormUploader
      * @param string $upToken 上传凭证
      * @param string $key 上传文件名
      * @param string $data 上传二进制流
-     * @param string $config 上传配置
+     * @param Config $config 上传配置
      * @param string $params 自定义变量,规格参考
      *                    https://developer.qiniu.com/kodo/manual/1235/vars#xvar
      * @param string $mime 上传数据的mimeType
@@ -56,7 +57,11 @@ final class FormUploader
             return array(null, $err);
         }
 
-        $upHost = $config->getUpHost($accessKey, $bucket);
+        try {
+            $upHost = $config->getUpHost($accessKey, $bucket);
+        } catch (\Exception $err) {
+            return array(null, $err);
+        }
 
         $response = Client::multipartPost($upHost, $fields, 'file', $fname, $data, $mime);
         if (!$response->ok()) {
@@ -71,7 +76,7 @@ final class FormUploader
      * @param string $upToken 上传凭证
      * @param string $key 上传文件名
      * @param string $filePath 上传文件的路径
-     * @param string $config 上传配置
+     * @param Config $config 上传配置
      * @param string $params 自定义变量,规格参考
      *                    https://developer.qiniu.com/kodo/manual/1235/vars#xvar
      * @param string $mime 上传数据的mimeType
@@ -112,7 +117,11 @@ final class FormUploader
             return array(null, $err);
         }
 
-        $upHost = $config->getUpHost($accessKey, $bucket);
+        try {
+            $upHost = $config->getUpHost($accessKey, $bucket);
+        } catch (\Exception $err) {
+            return array(null, $err);
+        }
 
         $response = Client::post($upHost, $fields, $headers);
         if (!$response->ok()) {

+ 266 - 15
vendor/qiniu/php-sdk/src/Qiniu/Storage/ResumeUploader.php

@@ -5,6 +5,7 @@ namespace Qiniu\Storage;
 use Qiniu\Config;
 use Qiniu\Http\Client;
 use Qiniu\Http\Error;
+use Qiniu\Enum\SplitUploadVersion;
 
 /**
  * 断点续上传类, 该类主要实现了断点续上传中的分块上传,
@@ -22,9 +23,14 @@ final class ResumeUploader
     private $params;
     private $mime;
     private $contexts;
+    private $finishedEtags;
     private $host;
+    private $bucket;
     private $currentUrl;
     private $config;
+    private $resumeRecordFile;
+    private $version;
+    private $partSize;
 
     /**
      * 上传二进制流到七牛
@@ -35,7 +41,10 @@ final class ResumeUploader
      * @param string $size 上传流的大小
      * @param string $params 自定义变量
      * @param string $mime 上传数据的mimeType
-     * @param string $config
+     * @param Config $config
+     * @param string $resumeRecordFile 断点续传的已上传的部分信息记录文件
+     * @param string $version 分片上传版本 目前支持v1/v2版本 默认v1
+     * @param string $partSize 分片上传v2字段 默认大小为4MB 分片大小范围为1 MB - 1 GB
      *
      * @link http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
      */
@@ -46,7 +55,10 @@ final class ResumeUploader
         $size,
         $params,
         $mime,
-        $config
+        $config,
+        $resumeRecordFile = null,
+        $version = 'v1',
+        $partSize = config::BLOCK_SIZE
     ) {
 
         $this->upToken = $upToken;
@@ -56,9 +68,19 @@ final class ResumeUploader
         $this->params = $params;
         $this->mime = $mime;
         $this->contexts = array();
+        $this->finishedEtags = array("etags"=>array(), "uploadId"=>"", "expiredAt"=>0, "uploaded"=>0);
         $this->config = $config;
+        $this->resumeRecordFile = $resumeRecordFile ? $resumeRecordFile : null;
+        $this->partSize = $partSize ? $partSize : config::BLOCK_SIZE;
+
+        try {
+            $this->version = SplitUploadVersion::from($version ? $version : 'v1');
+        } catch (\Exception $e) {
+            throw new \Exception("only support v1/v2 now!", 0, $e);
+        }
 
         list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken);
+        $this->bucket = $bucket;
         if ($err != null) {
             return array(null, $err);
         }
@@ -76,14 +98,96 @@ final class ResumeUploader
     public function upload($fname)
     {
         $uploaded = 0;
+        if ($this->version == SplitUploadVersion::V2) {
+            $partNumber = 1;
+            $encodedObjectName = $this->key? \Qiniu\base64_urlSafeEncode($this->key) : '~';
+        };
+        // get upload record from resumeRecordFile
+        if ($this->resumeRecordFile != null) {
+            $blkputRets = null;
+            if (file_exists($this->resumeRecordFile)) {
+                $stream = fopen($this->resumeRecordFile, 'r');
+                if ($stream) {
+                    $streamLen = filesize($this->resumeRecordFile);
+                    if ($streamLen > 0) {
+                        $contents = fread($stream, $streamLen);
+                        fclose($stream);
+                        if ($contents) {
+                            $blkputRets = json_decode($contents, true);
+                            if ($blkputRets === null) {
+                                error_log("resumeFile contents decode error");
+                            }
+                        } else {
+                            error_log("read resumeFile failed");
+                        }
+                    } else {
+                        error_log("resumeFile is empty");
+                    }
+                } else {
+                    error_log("resumeFile open failed");
+                }
+            } else {
+                error_log("resumeFile not exists");
+            }
+
+            if ($blkputRets) {
+                if ($this->version == SplitUploadVersion::V1) {
+                    if (isset($blkputRets['contexts']) && isset($blkputRets['uploaded']) &&
+                        is_array($blkputRets['contexts']) && is_int($blkputRets['uploaded'])) {
+                        $this->contexts = $blkputRets['contexts'];
+                        $uploaded = $blkputRets['uploaded'];
+                    }
+                } elseif ($this->version == SplitUploadVersion::V2) {
+                    if (isset($blkputRets["etags"]) && isset($blkputRets["uploadId"]) &&
+                        isset($blkputRets["expiredAt"]) && $blkputRets["expiredAt"] > time()
+                        && $blkputRets["uploaded"] > 0 && is_array($blkputRets["etags"]) &&
+                        is_string($blkputRets["uploadId"]) && is_int($blkputRets["expiredAt"])) {
+                        $this->finishedEtags['etags'] = $blkputRets["etags"];
+                        $this->finishedEtags["uploadId"] = $blkputRets["uploadId"];
+                        $this->finishedEtags["expiredAt"] = $blkputRets["expiredAt"];
+                        $this->finishedEtags["uploaded"] = $blkputRets["uploaded"];
+                        $uploaded = $blkputRets["uploaded"];
+                        $partNumber = count($this->finishedEtags["etags"]) + 1;
+                    } else {
+                        $this->makeInitReq($encodedObjectName);
+                    }
+                } else {
+                    throw new \Exception("only support v1/v2 now!");
+                }
+            } else {
+                if ($this->version == SplitUploadVersion::V2) {
+                    $this->makeInitReq($encodedObjectName);
+                }
+            }
+        } else {
+            // init a Multipart Upload task if choose v2
+            if ($this->version == SplitUploadVersion::V2) {
+                $this->makeInitReq($encodedObjectName);
+            }
+        }
+
         while ($uploaded < $this->size) {
             $blockSize = $this->blockSize($uploaded);
             $data = fread($this->inputStream, $blockSize);
             if ($data === false) {
                 throw new \Exception("file read failed", 1);
             }
-            $crc = \Qiniu\crc32_data($data);
-            $response = $this->makeBlock($data, $blockSize);
+            if ($this->version == SplitUploadVersion::V1) {
+                $crc = \Qiniu\crc32_data($data);
+                $response = $this->makeBlock($data, $blockSize);
+            } elseif ($this->version == SplitUploadVersion::V2) {
+                $md5 = md5($data);
+                $response = $this->uploadPart(
+                    $data,
+                    $partNumber,
+                    $this->finishedEtags["uploadId"],
+                    $encodedObjectName,
+                    $md5
+                );
+            } else {
+                throw new \Exception("only support v1/v2 now!");
+            }
+
             $ret = null;
             if ($response->ok() && $response->json() != null) {
                 $ret = $response->json();
@@ -93,22 +197,76 @@ final class ResumeUploader
                 if ($err != null) {
                     return array(null, $err);
                 }
-
                 $upHostBackup = $this->config->getUpBackupHost($accessKey, $bucket);
                 $this->host = $upHostBackup;
             }
-            if ($response->needRetry() || !isset($ret['crc32']) || $crc != $ret['crc32']) {
-                $response = $this->makeBlock($data, $blockSize);
-                $ret = $response->json();
-            }
 
-            if (!$response->ok() || !isset($ret['crc32']) || $crc != $ret['crc32']) {
-                return array(null, new Error($this->currentUrl, $response));
+            if ($this->version == SplitUploadVersion::V1) {
+                if ($response->needRetry() || !isset($ret['crc32']) || $crc != $ret['crc32']) {
+                    $response = $this->makeBlock($data, $blockSize);
+                    $ret = $response->json();
+                }
+
+                if (!$response->ok() || !isset($ret['crc32']) || $crc != $ret['crc32']) {
+                    return array(null, new Error($this->currentUrl, $response));
+                }
+                array_push($this->contexts, $ret['ctx']);
+            } elseif ($this->version == SplitUploadVersion::V2) {
+                if ($response->needRetry() || !isset($ret['md5']) || $md5 != $ret['md5']) {
+                    $response = $this->uploadPart(
+                        $data,
+                        $partNumber,
+                        $this->finishedEtags["uploadId"],
+                        $encodedObjectName,
+                        $md5
+                    );
+                    $ret = $response->json();
+                }
+
+                if (!$response->ok() || !isset($ret['md5']) || $md5 != $ret['md5']) {
+                    return array(null, new Error($this->currentUrl, $response));
+                }
+                $blockStatus = array('etag' => $ret['etag'], 'partNumber' => $partNumber);
+                array_push($this->finishedEtags['etags'], $blockStatus);
+                $partNumber += 1;
+            } else {
+                throw new \Exception("only support v1/v2 now!");
             }
-            array_push($this->contexts, $ret['ctx']);
+
             $uploaded += $blockSize;
+            if ($this->version == SplitUploadVersion::V2) {
+                $this->finishedEtags['uploaded'] = $uploaded;
+            }
+
+            if ($this->resumeRecordFile !== null) {
+                if ($this->version == SplitUploadVersion::V1) {
+                    $recordData = array(
+                        'contexts' => $this->contexts,
+                        'uploaded' => $uploaded
+                    );
+                    $recordData = json_encode($recordData);
+                } elseif ($this->version == SplitUploadVersion::V2) {
+                    $recordData = json_encode($this->finishedEtags);
+                } else {
+                    throw new \Exception("only support v1/v2 now!");
+                }
+                if ($recordData) {
+                    $isWritten = file_put_contents($this->resumeRecordFile, $recordData);
+                    if ($isWritten === false) {
+                        error_log("write resumeRecordFile failed");
+                    }
+                } else {
+                    error_log('resumeRecordData encode failed');
+                }
+            }
+        }
+        if ($this->version == SplitUploadVersion::V1) {
+            return $this->makeFile($fname);
+        } elseif ($this->version == SplitUploadVersion::V2) {
+            return $this->completeParts($fname, $this->finishedEtags['uploadId'], $encodedObjectName);
+        } else {
+            throw new \Exception("only support v1/v2 now!");
         }
-        return $this->makeFile($fname);
     }
 
     /**
@@ -163,9 +321,102 @@ final class ResumeUploader
 
     private function blockSize($uploaded)
     {
-        if ($this->size < $uploaded + Config::BLOCK_SIZE) {
+        if ($this->size < $uploaded + $this->partSize) {
             return $this->size - $uploaded;
         }
-        return Config::BLOCK_SIZE;
+        return $this->partSize;
+    }
+
+    private function makeInitReq($encodedObjectName)
+    {
+        $res = $this->initReq($encodedObjectName);
+        $this->finishedEtags["uploadId"] = $res['uploadId'];
+        $this->finishedEtags["expiredAt"] = $res['expireAt'];
+    }
+
+    /**
+     * 初始化上传任务
+     */
+    private function initReq($encodedObjectName)
+    {
+        $url = $this->host.'/buckets/'.$this->bucket.'/objects/'.$encodedObjectName.'/uploads';
+        $headers = array(
+            'Authorization' => 'UpToken ' . $this->upToken,
+            'Content-Type' => 'application/json'
+        );
+        $response = $this->postWithHeaders($url, null, $headers);
+        return $response->json();
+    }
+
+    /**
+     * 分块上传v2
+     */
+    private function uploadPart($block, $partNumber, $uploadId, $encodedObjectName, $md5)
+    {
+        $headers = array(
+            'Authorization' => 'UpToken ' . $this->upToken,
+            'Content-Type' => 'application/octet-stream',
+            'Content-MD5' => $md5
+        );
+        $url = $this->host.'/buckets/'.$this->bucket.'/objects/'.$encodedObjectName.
+            '/uploads/'.$uploadId.'/'.$partNumber;
+        $response = $this->put($url, $block, $headers);
+        return $response;
+    }
+
+    private function completeParts($fname, $uploadId, $encodedObjectName)
+    {
+        $headers = array(
+            'Authorization' => 'UpToken '.$this->upToken,
+            'Content-Type' => 'application/json'
+        );
+        $etags = $this->finishedEtags['etags'];
+        $sortedEtags = \Qiniu\arraySort($etags, 'partNumber');
+        $metadata = array();
+        $customVars = array();
+        if ($this->params) {
+            foreach ($this->params as $k => $v) {
+                if (strpos($k, 'x:') === 0) {
+                    $customVars[$k] = $v;
+                } elseif (strpos($k, 'x-qn-meta-') === 0) {
+                    $metadata[$k] = $v;
+                }
+            }
+        }
+        if (empty($metadata)) {
+            $metadata = null;
+        }
+        if (empty($customVars)) {
+            $customVars = null;
+        }
+        $body = array(
+            'fname' => $fname,
+            'mimeType' => $this->mime,
+            'metadata' => $metadata,
+            'customVars' => $customVars,
+            'parts' => $sortedEtags
+        );
+        $jsonBody = json_encode($body);
+        $url = $this->host.'/buckets/'.$this->bucket.'/objects/'.$encodedObjectName.'/uploads/'.$uploadId;
+        $response = $this->postWithHeaders($url, $jsonBody, $headers);
+        if ($response->needRetry()) {
+            $response = $this->postWithHeaders($url, $jsonBody, $headers);
+        }
+        if (!$response->ok()) {
+            return array(null, new Error($this->currentUrl, $response));
+        }
+        return array($response->json(), null);
+    }
+
+    private function put($url, $data, $headers)
+    {
+        $this->currentUrl = $url;
+        return Client::put($url, $data, $headers);
+    }
+
+    private function postWithHeaders($url, $data, $headers)
+    {
+        $this->currentUrl = $url;
+        return Client::post($url, $data, $headers);
     }
 }

+ 22 - 12
vendor/qiniu/php-sdk/src/Qiniu/Storage/UploadManager.php

@@ -48,7 +48,7 @@ final class UploadManager
         $mime = 'application/octet-stream',
         $fname = "default_filename"
     ) {
-    
+
         $params = self::trimParams($params);
         return FormUploader::put(
             $upToken,
@@ -65,19 +65,23 @@ final class UploadManager
     /**
      * 上传文件到七牛
      *
-     * @param $upToken    上传凭证
-     * @param $key        上传文件名
-     * @param $filePath   上传文件的路径
-     * @param $params     自定义变量,规格参考
-     *                    http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
-     * @param $mime       上传数据的mimeType
-     * @param $checkCrc   是否校验crc32
+     * @param string $upToken 上传凭证
+     * @param string $key 上传文件名
+     * @param string $filePath 上传文件的路径
+     * @param array<string, mixed> $params 定义变量,规格参考
+     *                                     http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html#xvar
+     * @param boolean $mime 上传数据的mimeType
+     * @param string $checkCrc 是否校验crc32
+     * @param string $resumeRecordFile 断点续传文件路径 默认为null
+     * @param string $version 分片上传版本 目前支持v1/v2版本 默认v1
+     * @param int $partSize 分片上传v2字段 默认大小为4MB 分片大小范围为1 MB - 1 GB
      *
-     * @return array    包含已上传文件的信息,类似:
+     * @return array<string, mixed> 包含已上传文件的信息,类似:
      *                                              [
      *                                                  "hash" => "<Hash string>",
      *                                                  "key" => "<Key string>"
      *                                              ]
+     * @throws \Exception
      */
     public function putFile(
         $upToken,
@@ -85,9 +89,12 @@ final class UploadManager
         $filePath,
         $params = null,
         $mime = 'application/octet-stream',
-        $checkCrc = false
+        $checkCrc = false,
+        $resumeRecordFile = null,
+        $version = 'v1',
+        $partSize = config::BLOCK_SIZE
     ) {
-    
+
         $file = fopen($filePath, 'rb');
         if ($file === false) {
             throw new \Exception("file can not open", 1);
@@ -119,7 +126,10 @@ final class UploadManager
             $size,
             $params,
             $mime,
-            $this->config
+            $this->config,
+            $resumeRecordFile,
+            $version,
+            $partSize
         );
         $ret = $up->upload(basename($filePath));
         fclose($file);

+ 17 - 0
vendor/qiniu/php-sdk/src/Qiniu/functions.php

@@ -65,6 +65,23 @@ if (!defined('QINIU_FUNCTIONS_VERSION')) {
     }
 
     /**
+     * 二维数组根据某个字段排序
+     * @param array $array 要排序的数组
+     * @param string $key 要排序的键
+     * @param string $sort  排序类型 SORT_ASC SORT_DESC
+     * return array 排序后的数组
+     */
+    function arraySort($array, $key, $sort = SORT_ASC)
+    {
+        $keysValue = array();
+        foreach ($array as $k => $v) {
+            $keysValue[$k] = $v[$key];
+        }
+        array_multisort($keysValue, $sort, $array);
+        return $array;
+    }
+
+    /**
      * Wrapper for JSON decode that implements error detection with helpful
      * error messages.
      *

+ 174 - 0
vendor/qiniu/php-sdk/tests/Qiniu/Tests/AuthTest.php

@@ -12,6 +12,7 @@ namespace Qiniu {
 
 namespace Qiniu\Tests {
     use Qiniu\Auth;
+    use Qiniu\Http\Header;
 
     // @codingStandardsIgnoreEnd
 
@@ -67,5 +68,178 @@ namespace Qiniu\Tests {
         public function testVerifyCallback()
         {
         }
+
+        public function testSignQiniuAuthorization()
+        {
+            $auth = new Auth("ak", "sk");
+
+            // ---
+            $url = "";
+            $method = "";
+            $headers = new Header(array(
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+            ));
+            $body = "{\"name\": \"test\"}";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:0i1vKClRDWFyNkcTFzwcE7PzX74=", $sign);
+
+            // ---
+            $url = "";
+            $method = "";
+            $headers = new Header(array(
+                "Content-Type" => array("application/json"),
+            ));
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:K1DI0goT05yhGizDFE5FiPJxAj4=", $sign);
+
+            // ---
+            $url = "";
+            $method = "GET";
+            $headers = new Header(array(
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+            ));
+            $body = "{\"name\": \"test\"}";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:0i1vKClRDWFyNkcTFzwcE7PzX74=", $sign);
+
+            // ---
+            $url = "";
+            $method = "POST";
+            $headers = new Header(array(
+                "Content-Type" => array("application/json"),
+                "X-Qiniu" => array("b"),
+            ));
+            $body = "{\"name\": \"test\"}";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:0ujEjW_vLRZxebsveBgqa3JyQ-w=", $sign);
+
+            // ---
+            $url = "http://upload.qiniup.com";
+            $method = "";
+            $headers = new Header(array(
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+            ));
+            $body = "{\"name\": \"test\"}";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:GShw5NitGmd5TLoo38nDkGUofRw=", $sign);
+
+            // ---
+            $url = "http://upload.qiniup.com";
+            $method = "";
+            $headers = new Header(array(
+                "Content-Type" => array("application/json"),
+                "X-Qiniu-Bbb" => array("BBB", "AAA"),
+                "X-Qiniu-Aaa" => array("DDD", "CCC"),
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+            ));
+            $body = "{\"name\": \"test\"}";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:DhNA1UCaBqSHCsQjMOLRfVn63GQ=", $sign);
+
+            // ---
+            $url = "http://upload.qiniup.com";
+            $method = "";
+            $headers = new Header(array(
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+                "X-Qiniu-Bbb" => array("BBB", "AAA"),
+                "X-Qiniu-Aaa" => array("DDD", "CCC"),
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+            ));
+            $body = "name=test&language=go";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:KUAhrYh32P9bv0COD8ugZjDCmII=", $sign);
+
+            // ---
+            $url = "http://upload.qiniup.com";
+            $method = "";
+            $headers = new Header(array(
+                "Content-Type" => array("application/x-www"),
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+                "X-Qiniu-Bbb" => array("BBB", "AAA"),
+                "X-Qiniu-Aaa" => array("DDD", "CCC"),
+            ));
+            $body = "name=test&language=go";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:KUAhrYh32P9bv0COD8ugZjDCmII=", $sign);
+
+            // ---
+            $url = "http://upload.qiniup.com/mkfile/sdf.jpg";
+            $method = "";
+            $headers = new Header(array(
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+                "X-Qiniu-Bbb" => array("BBB", "AAA"),
+                "X-Qiniu-Aaa" => array("DDD", "CCC"),
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+            ));
+            $body = "name=test&language=go";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:fkRck5_LeyfwdkyyLk-hyNwGKac=", $sign);
+
+            $url = "http://upload.qiniup.com/mkfile/sdf.jpg?s=er3&df";
+            $method = "";
+            $headers = new Header(array(
+                "Content-Type" => array("application/x-www-form-urlencoded"),
+                "X-Qiniu-Bbb" => array("BBB", "AAA"),
+                "X-Qiniu-Aaa" => array("DDD", "CCC"),
+                "X-Qiniu-" => array("a"),
+                "X-Qiniu" => array("b"),
+            ));
+            $body = "name=test&language=go";
+            list($sign, $err) = $auth->signQiniuAuthorization($url, $method, $body, $headers);
+            $this->assertNull($err);
+            $this->assertEquals("ak:PUFPWsEUIpk_dzUvvxTTmwhp3p4=", $sign);
+        }
+
+        public function testDisableQiniuTimestampSignatureDefault()
+        {
+            $auth = new Auth("ak", "sk");
+            $authedHeaders = $auth->authorizationV2("https://example.com", "GET");
+            $this->assertArrayHasKey("X-Qiniu-Date", $authedHeaders);
+        }
+
+        public function testDisableQiniuTimestampSignature()
+        {
+            $auth = new Auth("ak", "sk", array(
+                "disableQiniuTimestampSignature" => true
+            ));
+            $authedHeaders = $auth->authorizationV2("https://example.com", "GET");
+            $this->assertArrayNotHasKey("X-Qiniu-Date", $authedHeaders);
+        }
+        public function testDisableQiniuTimestampSignatureEnv()
+        {
+            putenv("DISABLE_QINIU_TIMESTAMP_SIGNATURE=true");
+            $auth = new Auth("ak", "sk");
+            $authedHeaders = $auth->authorizationV2("https://example.com", "GET");
+            $this->assertArrayNotHasKey("X-Qiniu-Date", $authedHeaders);
+            putenv('DISABLE_QINIU_TIMESTAMP_SIGNATURE');
+        }
+        public function testDisableQiniuTimestampSignatureEnvBeIgnored()
+        {
+            putenv("DISABLE_QINIU_TIMESTAMP_SIGNATURE=true");
+            $auth = new Auth("ak", "sk", array(
+                "disableQiniuTimestampSignature" => false
+            ));
+            $authedHeaders = $auth->authorizationV2("https://example.com", "GET");
+            $this->assertArrayHasKey("X-Qiniu-Date", $authedHeaders);
+            putenv('DISABLE_QINIU_TIMESTAMP_SIGNATURE');
+        }
     }
 }

+ 187 - 40
vendor/qiniu/php-sdk/tests/Qiniu/Tests/BucketTest.php

@@ -38,105 +38,144 @@ class BucketTest extends \PHPUnit_Framework_TestCase
     {
 
         list($list, $error) = $this->bucketManager->buckets();
-        $this->assertTrue(in_array($this->bucketName, $list));
         $this->assertNull($error);
+        $this->assertTrue(in_array($this->bucketName, $list));
 
         list($list2, $error) = $this->dummyBucketManager->buckets();
         $this->assertEquals(401, $error->code());
-        $this->assertNull($list2);
         $this->assertNotNull($error->message());
         $this->assertNotNull($error->getResponse());
+        $this->assertNull($list2);
     }
 
     public function testListbuckets()
     {
         list($ret, $error) = $this->bucketManager->listbuckets('z0');
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testCreateBucket()
     {
         list($ret, $error) = $this->bucketManager->createBucket('phpsdk-ci-test');
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testDeleteBucket()
     {
         list($ret, $error) = $this->bucketManager->deleteBucket('phpsdk-ci-test');
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testDomains()
     {
         list($ret, $error) = $this->bucketManager->domains($this->bucketName);
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testBucketInfo()
     {
         list($ret, $error) = $this->bucketManager->bucketInfo($this->bucketName);
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testBucketInfos()
     {
         list($ret, $error) = $this->bucketManager->bucketInfos('z0');
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testList()
     {
         list($ret, $error) = $this->bucketManager->listFiles($this->bucketName, null, null, 10);
+        $this->assertNull($error);
         $this->assertNotNull($ret['items'][0]);
         $this->assertNotNull($ret['marker']);
-        $this->assertNull($error);
     }
 
     public function testListFilesv2()
     {
         list($ret, $error) = $this->bucketManager->listFilesv2($this->bucketName, null, null, 10);
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testBucketLifecycleRule()
     {
-        list($ret, $error) = $this->bucketManager->bucketLifecycleRule($this->bucketName, 'demo', 'test', 80, 70);
-        $this->assertNotNull($ret);
+        // delete
+        $this->bucketManager->deleteBucketLifecycleRule($this->bucketName, 'demo');
+
+        // add
+        list($ret, $error) = $this->bucketManager->bucketLifecycleRule(
+            $this->bucketName,
+            'demo',
+            'test',
+            80,
+            70,
+            72,
+            74
+        );
         $this->assertNull($error);
-    }
+        $this->assertNotNull($ret);
 
-    public function testGetbucketLifecycleRule()
-    {
+        // get
         list($ret, $error) = $this->bucketManager->getBucketLifecycleRules($this->bucketName);
-        $this->assertNotNull($ret);
         $this->assertNull($error);
-    }
-
-    public function testUpdatebucketLifecycleRule()
-    {
+        $this->assertNotNull($ret);
+        $rule = null;
+        foreach ($ret as $r) {
+            if ($r["name"] === "demo") {
+                $rule = $r;
+                break;
+            }
+        }
+        $this->assertNotNull($rule);
+        $this->assertEquals("test", $rule["prefix"]);
+        $this->assertEquals(80, $rule["delete_after_days"]);
+        $this->assertEquals(70, $rule["to_line_after_days"]);
+        $this->assertEquals(72, $rule["to_archive_after_days"]);
+        $this->assertEquals(74, $rule["to_deep_archive_after_days"]);
+
+        // update
         list($ret, $error) = $this->bucketManager->updateBucketLifecycleRule(
             $this->bucketName,
             'demo',
             'testupdate',
+            90,
+            75,
             80,
-            70
+            85
         );
-        $this->assertNotNull($ret);
         $this->assertNull($error);
-    }
+        $this->assertNotNull($ret);
 
-    public function testDeleteBucketLifecycleRule()
-    {
-        list($ret, $error) = $this->bucketManager->deleteBucketLifecycleRule($this->bucketName, 'demo');
+        // get
+        list($ret, $error) = $this->bucketManager->getBucketLifecycleRules($this->bucketName);
+        $this->assertNull($error);
         $this->assertNotNull($ret);
+        $rule = null;
+        foreach ($ret as $r) {
+            if ($r["name"] === "demo") {
+                $rule = $r;
+                break;
+            }
+        }
+        $this->assertNotNull($rule);
+        $this->assertEquals("testupdate", $rule["prefix"]);
+        $this->assertEquals(90, $rule["delete_after_days"]);
+        $this->assertEquals(75, $rule["to_line_after_days"]);
+        $this->assertEquals(80, $rule["to_archive_after_days"]);
+        $this->assertEquals(85, $rule["to_deep_archive_after_days"]);
+
+        // delete
+        list($ret, $error) = $this->bucketManager->deleteBucketLifecycleRule($this->bucketName, 'demo');
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testPutBucketEvent()
@@ -149,8 +188,8 @@ class BucketTest extends \PHPUnit_Framework_TestCase
             array('copy'),
             $this->customCallbackURL
         );
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testUpdateBucketEvent()
@@ -163,47 +202,47 @@ class BucketTest extends \PHPUnit_Framework_TestCase
             array('copy'),
             $this->customCallbackURL
         );
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testGetBucketEvent()
     {
         list($ret, $error) = $this->bucketManager->getBucketEvents($this->bucketName);
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testDeleteBucketEvent()
     {
         list($ret, $error) = $this->bucketManager->deleteBucketEvent($this->bucketName, 'bucketevent');
-        $this->assertNotNull($ret);
         $this->assertNull($error);
+        $this->assertNotNull($ret);
     }
 
     public function testStat()
     {
         list($stat, $error) = $this->bucketManager->stat($this->bucketName, $this->key);
-        $this->assertNotNull($stat);
         $this->assertNull($error);
+        $this->assertNotNull($stat);
         $this->assertNotNull($stat['hash']);
 
         list($stat, $error) = $this->bucketManager->stat($this->bucketName, 'nofile');
-        $this->assertNull($stat);
         $this->assertEquals(612, $error->code());
         $this->assertNotNull($error->message());
+        $this->assertNull($stat);
 
         list($stat, $error) = $this->bucketManager->stat('nobucket', 'nofile');
-        $this->assertNull($stat);
         $this->assertEquals(631, $error->code());
         $this->assertNotNull($error->message());
+        $this->assertNull($stat);
     }
 
     public function testDelete()
     {
         list($ret, $error) = $this->bucketManager->delete($this->bucketName, 'del');
-        $this->assertNull($ret);
         $this->assertNotNull($error);
+        $this->assertNull($ret);
     }
 
 
@@ -271,6 +310,16 @@ class BucketTest extends \PHPUnit_Framework_TestCase
         $this->assertNull($error);
     }
 
+    public function testPrefetchFailed()
+    {
+        list($ret, $error) = $this->bucketManager->prefetch(
+            'fakebucket',
+            'php-sdk.html'
+        );
+        $this->assertNotNull($error);
+        $this->assertNull($ret);
+    }
+
     public function testFetch()
     {
         list($ret, $error) = $this->bucketManager->fetch(
@@ -278,23 +327,33 @@ class BucketTest extends \PHPUnit_Framework_TestCase
             $this->bucketName,
             'fetch.html'
         );
-        $this->assertArrayHasKey('hash', $ret);
         $this->assertNull($error);
+        $this->assertArrayHasKey('hash', $ret);
 
         list($ret, $error) = $this->bucketManager->fetch(
             'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
             $this->bucketName,
             ''
         );
-        $this->assertArrayHasKey('key', $ret);
         $this->assertNull($error);
+        $this->assertArrayHasKey('key', $ret);
 
         list($ret, $error) = $this->bucketManager->fetch(
             'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
             $this->bucketName
         );
-        $this->assertArrayHasKey('key', $ret);
         $this->assertNull($error);
+        $this->assertArrayHasKey('key', $ret);
+    }
+
+    public function testFetchFailed()
+    {
+        list($ret, $error) = $this->bucketManager->fetch(
+            'http://developer.qiniu.com/docs/v6/sdk/php-sdk.html',
+            'fakebucket'
+        );
+        $this->assertNotNull($error);
+        $this->assertNull($ret);
     }
 
     public function testAsynchFetch()
@@ -305,8 +364,8 @@ class BucketTest extends \PHPUnit_Framework_TestCase
             null,
             'qiniu.png'
         );
-        $this->assertArrayHasKey('id', $ret);
         $this->assertNull($error);
+        $this->assertArrayHasKey('id', $ret);
 
         list($ret, $error) = $this->bucketManager->asynchFetch(
             'http://devtools.qiniu.com/qiniu.png',
@@ -314,15 +373,25 @@ class BucketTest extends \PHPUnit_Framework_TestCase
             null,
             ''
         );
-        $this->assertArrayHasKey('id', $ret);
         $this->assertNull($error);
+        $this->assertArrayHasKey('id', $ret);
 
         list($ret, $error) = $this->bucketManager->asynchFetch(
             'http://devtools.qiniu.com/qiniu.png',
             $this->bucketName
         );
-        $this->assertArrayHasKey('id', $ret);
         $this->assertNull($error);
+        $this->assertArrayHasKey('id', $ret);
+    }
+
+    public function testAsynchFetchFailed()
+    {
+        list($ret, $error) = $this->bucketManager->asynchFetch(
+            'http://devtools.qiniu.com/qiniu.png',
+            'fakebucket'
+        );
+        $this->assertNotNull($error);
+        $this->assertNull($ret);
     }
 
 
@@ -378,6 +447,24 @@ class BucketTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(200, $ret[0]['code']);
     }
 
+    public function testBatchChangeTypeAndBatchRestoreAr()
+    {
+        $key = 'toChangeTypeThenRestore' . rand();
+        $this->bucketManager->copy($this->bucketName, $this->key, $this->bucketName, $key);
+
+        $ops = BucketManager::buildBatchChangeType($this->bucketName, array($key => 2)); // 2 Archive
+        list($ret, $error) = $this->bucketManager->batch($ops);
+        $this->assertNull($error);
+        $this->assertEquals(200, $ret[0]['code']);
+
+        $ops = BucketManager::buildBatchRestoreAr($this->bucketName, array($key => 1)); // 1 day
+        list($ret, $error) = $this->bucketManager->batch($ops);
+        $this->assertNull($error);
+        $this->assertEquals(200, $ret[0]['code']);
+
+        $this->bucketManager->delete($this->bucketName, $key);
+    }
+
     public function testDeleteAfterDays()
     {
         $key = rand();
@@ -440,6 +527,66 @@ class BucketTest extends \PHPUnit_Framework_TestCase
         $this->assertNull($err);
     }
 
+    public function testArchiveRestoreAr()
+    {
+        $key = 'archiveToRestore' . rand();
+        $this->bucketManager->delete($this->bucketName, $key);
+
+        $this->bucketManager->copy(
+            $this->bucketName,
+            $this->key,
+            $this->bucketName,
+            $key
+        );
+        $this->bucketManager->changeType($this->bucketName, $key, 2);
+
+        list(, $err) = $this->bucketManager->restoreAr($this->bucketName, $key, 2);
+        $this->assertNull($err);
+        list($ret, $err) = $this->bucketManager->stat($this->bucketName, $key);
+        $this->assertNull($err);
+
+        $this->assertEquals(2, $ret["type"]);
+
+        // restoreStatus
+        // null means frozen;
+        // 1 means be unfreezing;
+        // 2 means be unfrozen;
+        $this->assertNotNull($ret["restoreStatus"]);
+        $this->assertContains($ret["restoreStatus"], array(1, 2));
+
+        $this->bucketManager->delete($this->bucketName, $key);
+    }
+
+    public function testDeepArchiveRestoreAr()
+    {
+        $key = 'deepArchiveToRestore' . rand();
+        $this->bucketManager->delete($this->bucketName, $key);
+
+        $this->bucketManager->copy(
+            $this->bucketName,
+            $this->key,
+            $this->bucketName,
+            $key
+        );
+        $this->bucketManager->changeType($this->bucketName, $key, 3);
+
+        list(, $err) = $this->bucketManager->restoreAr($this->bucketName, $key, 1);
+        $this->assertNull($err);
+        list($ret, $err) = $this->bucketManager->stat($this->bucketName, $key);
+        $this->assertNull($err);
+
+        $this->assertEquals(3, $ret["type"]);
+
+        // restoreStatus
+        // null means frozen;
+        // 1 means be unfreezing;
+        // 2 means be unfrozen;
+        $this->assertNotNull($ret["restoreStatus"]);
+        $this->assertContains($ret["restoreStatus"], array(1, 2));
+
+        $this->bucketManager->delete($this->bucketName, $key);
+    }
+
     public function testChangeStatus()
     {
         list($ret, $err) = $this->bucketManager->changeStatus($this->bucketName, $this->key, 1);

+ 14 - 13
vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php

@@ -56,43 +56,43 @@ class CdnManagerTest extends \PHPUnit_Framework_TestCase
     public function testRefreshUrls()
     {
         list($ret, $err) = $this->cdnManager->refreshUrls(array($this->refreshUrl));
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testRefreshDirs()
     {
         list($ret, $err) = $this->cdnManager->refreshDirs(array($this->refreshDirs));
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testRefreshUrlsAndDirs()
     {
         list($ret, $err) = $this->cdnManager->refreshUrlsAndDirs(array($this->refreshUrl), array($this->refreshDirs));
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testGetCdnRefreshList()
     {
         list($ret, $err) = $this->cdnManager->getCdnRefreshList(null, null, null, 'success');
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testPrefetchUrls()
     {
         list($ret, $err) = $this->cdnManager->prefetchUrls(array($this->refreshUrl));
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testGetCdnPrefetchList()
     {
         list($ret, $err) = $this->cdnManager->getCdnPrefetchList(null, null, 'success');
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testGetBandwidthData()
@@ -103,8 +103,8 @@ class CdnManagerTest extends \PHPUnit_Framework_TestCase
             $this->testEndDate,
             $this->testGranularity
         );
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testGetFluxData()
@@ -115,23 +115,24 @@ class CdnManagerTest extends \PHPUnit_Framework_TestCase
             $this->testEndDate,
             $this->testGranularity
         );
-        $this->assertNotNull($ret);
         $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testGetCdnLogList()
     {
-        list($ret, $err) = $this->cdnManager->getCdnLogList(array('fake.qiniu.com'), $this->testLogDate);
-        $this->assertNull($ret);
-        $this->assertNotNull($err);
+        $domain = getenv('QINIU_TEST_DOMAIN');
+        list($ret, $err) = $this->cdnManager->getCdnLogList(array($domain), $this->testLogDate);
+        $this->assertNull($err);
+        $this->assertNotNull($ret);
     }
 
     public function testCreateTimestampAntiLeechUrl()
     {
         $signUrl = $this->cdnManager->createTimestampAntiLeechUrl($this->refreshUrl, $this->encryptKey, 3600);
         $response = Client::get($signUrl);
-        $this->assertEquals($response->statusCode, 200);
         $this->assertNull($response->error);
+        $this->assertEquals($response->statusCode, 200);
 
         $signUrl = $this->cdnManager->createTimestampAntiLeechUrl(
             $this->refreshUrl . '?qiniu',
@@ -139,7 +140,7 @@ class CdnManagerTest extends \PHPUnit_Framework_TestCase
             3600
         );
         $response = Client::get($signUrl);
-        $this->assertEquals($response->statusCode, 200);
         $this->assertNull($response->error);
+        $this->assertEquals($response->statusCode, 200);
     }
 }

+ 5 - 5
vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php

@@ -7,7 +7,7 @@ class EtagTest extends \PHPUnit_Framework_TestCase
 {
     public function test0M()
     {
-        $file = qiniuTempFile(0);
+        $file = qiniuTempFile(0, false);
         list($r, $error) = Etag::sum($file);
         unlink($file);
         $this->assertEquals('Fto5o-5ea0sNMlW_75VgGJCv2AcJ', $r);
@@ -16,7 +16,7 @@ class EtagTest extends \PHPUnit_Framework_TestCase
 
     public function testLess4M()
     {
-        $file = qiniuTempFile(3 * 1024 * 1024);
+        $file = qiniuTempFile(3 * 1024 * 1024, false);
         list($r, $error) = Etag::sum($file);
         unlink($file);
         $this->assertEquals('Fs5BpnAjRykYTg6o5E09cjuXrDkG', $r);
@@ -25,7 +25,7 @@ class EtagTest extends \PHPUnit_Framework_TestCase
 
     public function test4M()
     {
-        $file = qiniuTempFile(4 * 1024 * 1024);
+        $file = qiniuTempFile(4 * 1024 * 1024, false);
         list($r, $error) = Etag::sum($file);
         unlink($file);
         $this->assertEquals('FiuKULnybewpEnrfTmxjsxc-3dWp', $r);
@@ -34,7 +34,7 @@ class EtagTest extends \PHPUnit_Framework_TestCase
 
     public function testMore4M()
     {
-        $file = qiniuTempFile(5 * 1024 * 1024);
+        $file = qiniuTempFile(5 * 1024 * 1024, false);
         list($r, $error) = Etag::sum($file);
         unlink($file);
         $this->assertEquals('lhvyfIWMYFTq4s4alzlhXoAkqfVL', $r);
@@ -43,7 +43,7 @@ class EtagTest extends \PHPUnit_Framework_TestCase
 
     public function test8M()
     {
-        $file = qiniuTempFile(8 * 1024 * 1024);
+        $file = qiniuTempFile(8 * 1024 * 1024, false);
         list($r, $error) = Etag::sum($file);
         unlink($file);
         $this->assertEquals('lmRm9ZfGZ86bnMys4wRTWtJj9ClG', $r);

+ 17 - 0
vendor/qiniu/php-sdk/tests/Qiniu/Tests/FormUpTest.php

@@ -38,6 +38,14 @@ class FormUpTest extends \PHPUnit_Framework_TestCase
         $this->assertNotNull($ret['hash']);
     }
 
+    public function testDataFailed()
+    {
+        $token = $this->auth->uploadToken('fakebucket');
+        list($ret, $error) = FormUploader::put($token, 'formput', 'hello world', $this->cfg, null, 'text/plain', null);
+        $this->assertNull($ret);
+        $this->assertNotNull($error);
+    }
+
     public function testFile()
     {
         $key = 'formPutFile';
@@ -56,4 +64,13 @@ class FormUpTest extends \PHPUnit_Framework_TestCase
         $this->assertNull($error);
         $this->assertNotNull($ret['hash']);
     }
+
+    public function testFileFailed()
+    {
+        $key = 'fakekey';
+        $token = $this->auth->uploadToken('fakebucket', $key);
+        list($ret, $error) = FormUploader::putFile($token, $key, __file__, $this->cfg, null, 'text/plain', null);
+        $this->assertNull($ret);
+        $this->assertNotNull($error);
+    }
 }

+ 256 - 4
vendor/qiniu/php-sdk/tests/Qiniu/Tests/ResumeUpTest.php

@@ -1,13 +1,30 @@
 <?php
 namespace Qiniu\Tests;
 
+use phpDocumentor\Reflection\DocBlock\Tags\Version;
+use Qiniu\Region;
+use Qiniu\Storage\BucketManager;
 use Qiniu\Storage\ResumeUploader;
 use Qiniu\Storage\UploadManager;
+use Qiniu\Http\Client;
 use Qiniu\Config;
 use Qiniu\Zone;
 
 class ResumeUpTest extends \PHPUnit_Framework_TestCase
 {
+    private static $keyToDelete = array();
+
+    public static function tearDownAfterClass()
+    {
+        global $bucketName;
+        global $testAuth;
+
+        $config = new Config();
+        $bucketManager = new BucketManager($testAuth, $config);
+        foreach (self::$keyToDelete as $key) {
+            $bucketManager->delete($bucketName, $key);
+        }
+    }
     protected $bucketName;
     protected $auth;
 
@@ -22,27 +39,59 @@ class ResumeUpTest extends \PHPUnit_Framework_TestCase
 
     public function test4ML()
     {
-        $key = 'resumePutFile4ML';
+        $key = "resumePutFile4ML_".rand();
         $upManager = new UploadManager();
         $token = $this->auth->uploadToken($this->bucketName, $key);
         $tempFile = qiniuTempFile(4 * 1024 * 1024 + 10);
-        list($ret, $error) = $upManager->putFile($token, $key, $tempFile);
+        $resumeFile = tempnam(sys_get_temp_dir(), 'resume_file');
+        $this->assertNotFalse($resumeFile);
+        list($ret, $error) = $upManager->putFile(
+            $token,
+            $key,
+            $tempFile,
+            null,
+            'application/octet-stream',
+            false,
+            $resumeFile
+        );
         $this->assertNull($error);
         $this->assertNotNull($ret['hash']);
+        unlink($resumeFile);
+
+        $domain = getenv('QINIU_TEST_DOMAIN');
+        $response = Client::get("http://$domain/$key");
+        $this->assertEquals(200, $response->statusCode);
+        $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true));
         unlink($tempFile);
     }
 
     public function test4ML2()
     {
-        $key = 'resumePutFile4ML';
+        $key = 'resumePutFile4ML_'.rand();
         $zone = new Zone(array('upload.fake.qiniu.com'), array('upload.qiniup.com'));
         $cfg = new Config($zone);
         $upManager = new UploadManager($cfg);
         $token = $this->auth->uploadToken($this->bucketName, $key);
         $tempFile = qiniuTempFile(4 * 1024 * 1024 + 10);
-        list($ret, $error) = $upManager->putFile($token, $key, $tempFile);
+        $resumeFile = tempnam(sys_get_temp_dir(), 'resume_file');
+        $this->assertNotFalse($resumeFile);
+        list($ret, $error) = $upManager->putFile(
+            $token,
+            $key,
+            $tempFile,
+            null,
+            'application/octet-stream',
+            false,
+            $resumeFile
+        );
         $this->assertNull($error);
         $this->assertNotNull($ret['hash']);
+        unlink($resumeFile);
+
+        $domain = getenv('QINIU_TEST_DOMAIN');
+        $response = Client::get("http://$domain/$key");
+        $this->assertEquals(200, $response->statusCode);
+        $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true));
         unlink($tempFile);
     }
 
@@ -57,4 +106,207 @@ class ResumeUpTest extends \PHPUnit_Framework_TestCase
     //     $this->assertNotNull($ret['hash']);
     //     unlink($tempFile);
     // }
+
+    public function testFileWithFileType()
+    {
+        $config = new Config();
+        $bucketManager = new BucketManager($this->auth, $config);
+
+        $testCases = array(
+            array(
+                "fileType" => 1,
+                "name" => "IA"
+            ),
+            array(
+                "fileType" => 2,
+                "name" => "Archive"
+            ),
+            array(
+                "fileType" => 3,
+                "name" => "DeepArchive"
+            )
+        );
+
+        foreach ($testCases as $testCase) {
+            $key = 'FileType'.$testCase["name"].rand();
+            $police = array(
+                "fileType" => $testCase["fileType"],
+            );
+            $token = $this->auth->uploadToken($this->bucketName, $key, 3600, $police);
+            $upManager = new UploadManager();
+            list($ret, $error) = $upManager->putFile($token, $key, __file__, null, 'text/plain');
+            $this->assertNull($error);
+            $this->assertNotNull($ret);
+            array_push(self::$keyToDelete, $key);
+            list($ret, $err) = $bucketManager->stat($this->bucketName, $key);
+            $this->assertNull($err);
+            $this->assertEquals($testCase["fileType"], $ret["type"]);
+        }
+    }
+
+    public function testResumeUploadWithParams()
+    {
+        $key = "resumePutFile4ML_".rand();
+        $upManager = new UploadManager();
+        $policy = array('returnBody' => '{"hash":$(etag),"fname":$(fname),"var_1":$(x:var_1),"var_2":$(x:var_2)}');
+        $token = $this->auth->uploadToken($this->bucketName, $key, 3600, $policy);
+        $tempFile = qiniuTempFile(4 * 1024 * 1024 + 10);
+        $resumeFile = tempnam(sys_get_temp_dir(), 'resume_file');
+        $this->assertNotFalse($resumeFile);
+        list($ret, $error) = $upManager->putFile(
+            $token,
+            $key,
+            $tempFile,
+            ["x:var_1" => "val_1", "x:var_2" => "val_2", "x-qn-meta-m1" => "val_1", "x-qn-meta-m2" => "val_2"],
+            'application/octet-stream',
+            false,
+            $resumeFile
+        );
+        $this->assertNull($error);
+        $this->assertNotNull($ret['hash']);
+        $this->assertEquals("val_1", $ret['var_1']);
+        $this->assertEquals("val_2", $ret['var_2']);
+        $this->assertEquals(basename($tempFile), $ret['fname']);
+        unlink($resumeFile);
+
+        $domain = getenv('QINIU_TEST_DOMAIN');
+        $response = Client::get("http://$domain/$key");
+        $this->assertEquals(200, $response->statusCode);
+        $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true));
+        $this->assertEquals("val_1", $response->headers()["X-Qn-Meta-M1"]);
+        $this->assertEquals("val_2", $response->headers()["X-Qn-Meta-M2"]);
+        unlink($tempFile);
+    }
+
+    public function testResumeUploadV2()
+    {
+        $zone = new Zone(array('up.qiniup.com'));
+        $cfg = new Config($zone);
+        $upManager = new UploadManager($cfg);
+        $testFileSize = array(
+            config::BLOCK_SIZE / 2,
+            config::BLOCK_SIZE,
+            config::BLOCK_SIZE + 10,
+            config::BLOCK_SIZE * 2,
+            config::BLOCK_SIZE * 2.5
+        );
+        $partSize = 5 * 1024 * 1024;
+        foreach ($testFileSize as $item) {
+            $key = 'resumePutFile4ML_'.rand()."_";
+            $token = $this->auth->uploadToken($this->bucketName, $key);
+            $tempFile = qiniuTempFile($item);
+            $resumeFile = tempnam(sys_get_temp_dir(), 'resume_file');
+            $this->assertNotFalse($resumeFile);
+            list($ret, $error) = $upManager->putFile(
+                $token,
+                $key,
+                $tempFile,
+                null,
+                'application/octet-stream',
+                false,
+                $resumeFile,
+                'v2',
+                $partSize
+            );
+            $this->assertNull($error);
+            $this->assertNotNull($ret['hash']);
+            unlink($resumeFile);
+
+            $domain = getenv('QINIU_TEST_DOMAIN');
+            $response = Client::get("http://$domain/$key");
+            $this->assertEquals(200, $response->statusCode);
+            $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true));
+            unlink($tempFile);
+        }
+    }
+
+    public function testResumeUploadV2WithParams()
+    {
+        $key = "resumePutFile4ML_".rand();
+        $upManager = new UploadManager();
+        $policy = array('returnBody' => '{"hash":$(etag),"fname":$(fname),"var_1":$(x:var_1),"var_2":$(x:var_2)}');
+        $token = $this->auth->uploadToken($this->bucketName, $key, 3600, $policy);
+        $tempFile = qiniuTempFile(4 * 1024 * 1024 + 10);
+        $resumeFile = tempnam(sys_get_temp_dir(), 'resume_file');
+        $this->assertNotFalse($resumeFile);
+        list($ret, $error) = $upManager->putFile(
+            $token,
+            $key,
+            $tempFile,
+            ["x:var_1" => "val_1", "x:var_2" => "val_2", "x-qn-meta-m1" => "val_1", "x-qn-meta-m2" => "val_2"],
+            'application/octet-stream',
+            false,
+            $resumeFile,
+            'v2'
+        );
+        $this->assertNull($error);
+        $this->assertNotNull($ret['hash']);
+        $this->assertEquals("val_1", $ret['var_1']);
+        $this->assertEquals("val_2", $ret['var_2']);
+        $this->assertEquals(basename($tempFile), $ret['fname']);
+        unlink($resumeFile);
+
+        $domain = getenv('QINIU_TEST_DOMAIN');
+        $response = Client::get("http://$domain/$key");
+        $this->assertEquals(200, $response->statusCode);
+        $this->assertEquals(md5_file($tempFile, true), md5($response->body(), true));
+        $this->assertEquals("val_1", $response->headers()["X-Qn-Meta-M1"]);
+        $this->assertEquals("val_2", $response->headers()["X-Qn-Meta-M2"]);
+        unlink($tempFile);
+    }
+
+    // valid versions are tested above
+    // Use PHPUnit's Data Provider to test multiple Exception is better,
+    // but not match the test style of this project
+    public function testResumeUploadWithInvalidVersion()
+    {
+        $zone = new Zone(array('up.qiniup.com'));
+        $cfg = new Config($zone);
+        $upManager = new UploadManager($cfg);
+        $testFileSize = config::BLOCK_SIZE * 2;
+        $partSize = 5 * 1024 * 1024;
+        $testInvalidVersions = array(
+            // High probability invalid versions
+            'v',
+            '1',
+            '2'
+        );
+
+        $expectExceptionCount = 0;
+        foreach ($testInvalidVersions as $invalidVersion) {
+            $key = 'resumePutFile4ML_'.rand()."_";
+            $token = $this->auth->uploadToken($this->bucketName, $key);
+            $tempFile = qiniuTempFile($testFileSize);
+            $resumeFile = tempnam(sys_get_temp_dir(), 'resume_file');
+            $this->assertNotFalse($resumeFile);
+            try {
+                $upManager->putFile(
+                    $token,
+                    $key,
+                    $tempFile,
+                    null,
+                    'application/octet-stream',
+                    false,
+                    $resumeFile,
+                    $invalidVersion,
+                    $partSize
+                );
+            } catch (\Exception $e) {
+                $isRightException = false;
+                $expectExceptionCount++;
+                while ($e) {
+                    $isRightException = $e instanceof \UnexpectedValueException;
+                    if ($isRightException) {
+                        break;
+                    }
+                    $e = $e->getPrevious();
+                }
+                $this->assertTrue($isRightException);
+            }
+
+            unlink($resumeFile);
+            unlink($tempFile);
+        }
+        $this->assertEquals(count($testInvalidVersions), $expectExceptionCount);
+    }
 }

+ 13 - 4
vendor/qiniu/php-sdk/tests/bootstrap.php

@@ -8,14 +8,14 @@ $accessKey = getenv('QINIU_ACCESS_KEY');
 $secretKey = getenv('QINIU_SECRET_KEY');
 $testAuth = new Auth($accessKey, $secretKey);
 
-$bucketName = 'phpsdk';
+$bucketName = getenv('QINIU_TEST_BUCKET');
 $key = 'php-logo.png';
 $key2 = 'niu.jpg';
 
 $testStartDate = '2020-08-18';
 $testEndDate = '2020-08-19';
 $testGranularity = 'day';
-$testLogDate = '2020-08-18';
+$testLogDate = date('Y-m-d',strtotime("-1 days"));
 
 $bucketNameBC = 'phpsdk-bc';
 $bucketNameNA = 'phpsdk-na';
@@ -39,11 +39,20 @@ if (!empty($tid)) {
     $tid .= '.' . $pid;
 }
 
-function qiniuTempFile($size)
+function qiniuTempFile($size, $randomized = true)
 {
     $fileName = tempnam(sys_get_temp_dir(), 'qiniu_');
     $file = fopen($fileName, 'wb');
-    if ($size > 0) {
+    if ($randomized) {
+        $rest_size = $size;
+        while ($rest_size > 0) {
+            $length = min($rest_size, 4 * 1024);
+            if (fwrite($file, random_bytes($length)) == false) {
+                return false;
+            }
+            $rest_size -= $length;
+        }
+    } else if ($size > 0) {
         fseek($file, $size - 1);
         fwrite($file, ' ');
     }

+ 53 - 43
vendor/zoujingli/ip2region/Ip2Region.php

@@ -1,7 +1,7 @@
 <?php
+
 /**
  * ip2region php seacher client class
- *
  * @author  chenxin<chenxin619315@gmail.com>
  * @date    2015-10-29
  */
@@ -59,7 +59,7 @@ class Ip2Region
      */
     public function memorySearch($ip)
     {
-        //check and load the binary string for the first time
+        // check and load the binary string for the first time
         if ($this->dbBinStr == null) {
             $this->dbBinStr = file_get_contents($this->dbFile);
             if ($this->dbBinStr == false) {
@@ -70,7 +70,8 @@ class Ip2Region
             $this->totalBlocks = ($this->lastIndexPtr - $this->firstIndexPtr) / INDEX_BLOCK_LENGTH + 1;
         }
         if (is_string($ip)) $ip = self::safeIp2long($ip);
-        //binary search to define the data
+
+        // binary search to define the data
         $l = 0;
         $h = $this->totalBlocks;
         $dataPtr = 0;
@@ -90,11 +91,14 @@ class Ip2Region
                 }
             }
         }
+
         //not matched just stop it here
         if ($dataPtr == 0) return null;
+
         //get the data
         $dataLen = (($dataPtr >> 24) & 0xFF);
         $dataPtr = ($dataPtr & 0x00FFFFFF);
+
         return array(
             'city_id' => self::getLong($this->dbBinStr, $dataPtr),
             'region'  => substr($this->dbBinStr, $dataPtr + 4, $dataLen - 4),
@@ -103,9 +107,8 @@ class Ip2Region
 
     /**
      * get the data block through the specified ip address or long ip numeric with binary search algorithm
-     *
      * @param string ip
-     * @return mixed Array or NULL for any error
+     * @return array|null Array or NULL for any error
      * @throws Exception
      */
     public function binarySearch($ip)
@@ -120,12 +123,15 @@ class Ip2Region
                     throw new Exception("Fail to open the db file {$this->dbFile}");
                 }
             }
+
             fseek($this->dbFileHandler, 0);
             $superBlock = fread($this->dbFileHandler, 8);
+
             $this->firstIndexPtr = self::getLong($superBlock, 0);
             $this->lastIndexPtr = self::getLong($superBlock, 4);
             $this->totalBlocks = ($this->lastIndexPtr - $this->firstIndexPtr) / INDEX_BLOCK_LENGTH + 1;
         }
+
         //binary search to define the data
         $l = 0;
         $h = $this->totalBlocks;
@@ -133,6 +139,7 @@ class Ip2Region
         while ($l <= $h) {
             $m = (($l + $h) >> 1);
             $p = $m * INDEX_BLOCK_LENGTH;
+
             fseek($this->dbFileHandler, $this->firstIndexPtr + $p);
             $buffer = fread($this->dbFileHandler, INDEX_BLOCK_LENGTH);
             $sip = self::getLong($buffer, 0);
@@ -148,30 +155,22 @@ class Ip2Region
                 }
             }
         }
-        //not matched just stop it here
-        if ($dataPtr == 0) return null;
-        //get the data
-        $dataLen = (($dataPtr >> 24) & 0xFF);
-        $dataPtr = ($dataPtr & 0x00FFFFFF);
-        fseek($this->dbFileHandler, $dataPtr);
-        $data = fread($this->dbFileHandler, $dataLen);
-        return array(
-            'city_id' => self::getLong($data, 0),
-            'region'  => substr($data, 4),
-        );
+
+        // not matched just stop it here
+        return $this->notMatchedJustStopItHere($dataPtr);
     }
 
     /**
      * get the data block associated with the specified ip with b-tree search algorithm
-     * @Note: not thread safe
-     *
+     * @Note not thread safe
      * @param string ip
-     * @return  Mixed Array for NULL for any error
+     * @return  array|null Array for NULL for any error
      * @throws Exception
      */
     public function btreeSearch($ip)
     {
         if (is_string($ip)) $ip = self::safeIp2long($ip);
+
         //check and load the header
         if ($this->HeaderSip == null) {
             //check and open the original db file
@@ -181,6 +180,7 @@ class Ip2Region
                     throw new Exception("Fail to open the db file {$this->dbFile}");
                 }
             }
+
             fseek($this->dbFileHandler, 8);
             $buffer = fread($this->dbFileHandler, TOTAL_HEADER_LENGTH);
 
@@ -192,10 +192,12 @@ class Ip2Region
                 $startIp = self::getLong($buffer, $i);
                 $dataPtr = self::getLong($buffer, $i + 4);
                 if ($dataPtr == 0) break;
+
                 $this->HeaderSip[] = $startIp;
                 $this->HeaderPtr[] = $dataPtr;
                 $idx++;
             }
+
             $this->headerLen = $idx;
         }
 
@@ -207,7 +209,7 @@ class Ip2Region
         while ($l <= $h) {
             $m = (($l + $h) >> 1);
 
-            //perfetc matched, just return it
+            // perfetc matched, just return it
             if ($ip == $this->HeaderSip[$m]) {
                 if ($m > 0) {
                     $sptr = $this->HeaderPtr[$m - 1];
@@ -220,7 +222,7 @@ class Ip2Region
                 break;
             }
 
-            //less then the middle value
+            // less then the middle value
             if ($ip < $this->HeaderSip[$m]) {
                 if ($m == 0) {
                     $sptr = $this->HeaderPtr[$m];
@@ -274,44 +276,30 @@ class Ip2Region
             }
         }
 
-        //not matched
-        if ($dataPtr == 0) return null;
-
-        //3. get the data
-        $dataLen = (($dataPtr >> 24) & 0xFF);
-        $dataPtr = ($dataPtr & 0x00FFFFFF);
-
-        fseek($this->dbFileHandler, $dataPtr);
-        $data = fread($this->dbFileHandler, $dataLen);
-        return array(
-            'city_id' => self::getLong($data, 0),
-            'region'  => substr($data, 4),
-        );
+        // not matched
+        return $this->notMatchedJustStopItHere($dataPtr);
     }
 
+
     /**
      * safe self::safeIp2long function
-     *
      * @param string ip
-     *
-     * @return false|int|string
-     */
+     * */
     public static function safeIp2long($ip)
     {
         $ip = ip2long($ip);
-        // convert signed int to unsigned int if on 32 bit operating system
+        // convert signed int to unsigned int if on 32-bit operating system
         if ($ip < 0 && PHP_INT_SIZE == 4) {
             $ip = sprintf("%u", $ip);
         }
         return $ip;
     }
 
+
     /**
      * read a long from a byte buffer
-     *
-     * @param string b
+     * @param mixed b
      * @param integer offset
-     * @return int|string
      */
     public static function getLong($b, $offset)
     {
@@ -321,7 +309,7 @@ class Ip2Region
             (ord($b[$offset++]) << 16) |
             (ord($b[$offset]) << 24)
         );
-        // convert signed int to unsigned int if on 32 bit operating system
+        // convert signed int to unsigned int if on 32-bit operating system
         if ($val < 0 && PHP_INT_SIZE == 4) {
             $val = sprintf("%u", $val);
         }
@@ -340,4 +328,26 @@ class Ip2Region
         $this->HeaderSip = null;
         $this->HeaderPtr = null;
     }
+
+    /**
+     * @param mixed $dataPtr
+     * @return array|null
+     */
+    public function notMatchedJustStopItHere($dataPtr)
+    {
+        if ($dataPtr == 0) return null;
+
+
+        // get the data
+        $dataLen = (($dataPtr >> 24) & 0xFF);
+        $dataPtr = ($dataPtr & 0x00FFFFFF);
+
+        fseek($this->dbFileHandler, $dataPtr);
+        $data = fread($this->dbFileHandler, $dataLen);
+
+        return array(
+            'city_id' => self::getLong($data, 0),
+            'region'  => substr($data, 4),
+        );
+    }
 }

BIN=BIN
vendor/zoujingli/ip2region/ip2region.db


+ 4 - 3
vendor/zoujingli/ip2region/test.php

@@ -1,9 +1,10 @@
 <?php
+
 require 'Ip2Region.php';
 
 $ip2region = new Ip2Region();
 
-$ip = '61.140.232.170';
+$ip = '223.104.111.41';
 echo PHP_EOL;
 echo "查询IP:{$ip}" . PHP_EOL;
 $info = $ip2region->btreeSearch($ip);
@@ -15,6 +16,6 @@ var_export($info);
 echo PHP_EOL;
 
 // array (
-//     'city_id' => 2163,
-//     'region' => '中国|华南|广东省|深圳市|鹏博士',
+//     'city_id' => 1713,
+//     'region' => '中国|0|河南省|郑州市|移动',
 // )

+ 3 - 4
vendor/zoujingli/think-library/src/Controller.php

@@ -63,12 +63,11 @@ abstract class Controller extends \stdClass
 
     /**
      * Controller constructor.
-     * @param App $app
      */
-    public function __construct(App $app)
+    public function __construct()
     {
-        $this->app = $app;
-        $this->request = $app->request;
+        $this->app = app();
+        $this->request = $this->app->request;
         // 控制器注入容器
         Container::set('library\Controller', $this);
         if (in_array($this->request->action(), get_class_methods(__CLASS__))) {

+ 7 - 3
vendor/zoujingli/think-library/src/helper/PageHelper.php

@@ -87,13 +87,17 @@ class PageHelper extends Helper
             $page = $this->query->paginate($limit, $this->total, ['query' => ($query = $this->controller->request->get())]);
             foreach ([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200] as $num) {
                 list($query['limit'], $query['page'], $selected) = [$num, '1', $limit === $num ? 'selected' : ''];
-                $url = url('@admin') . '#' . $this->controller->request->baseUrl() . '?' . urldecode(http_build_query($query));
+                // 由于加上 / 如做绑定admin模块单独入口 会导致找不到模块 在此去掉 /
+                $url = rtrim(url('@admin'), '/') . '#' . $this->controller->request->baseUrl() . '?' . urldecode(http_build_query($query));
                 array_push($rows, "<option data-num='{$num}' value='{$url}' {$selected}>{$num}</option>");
             }
             $selects = "<select onchange='location.href=this.options[this.selectedIndex].value' data-auto-none>" . join('', $rows) . "</select>";
             $pagetext = lang('think_library_page_html', [$page->total(), $selects, $page->lastPage(), $page->currentPage()]);
             $pagehtml = "<div class='pagination-container nowrap'><span>{$pagetext}</span>{$page->render()}</div>";
-            $this->controller->assign('pagehtml', preg_replace('|href="(.*?)"|', 'data-open="$1" onclick="return false" href="$1"', $pagehtml));
+            $pagehtml = preg_replace('|href="(.*?)"|', 'data-open="$1" onclick="return false" href="$1"', $pagehtml);
+            // 由于部分自动生成的分页是href是带单引号的
+            $pagehtml = preg_replace("|href='(.*?)'|", 'data-open="$1" onclick="return false" href="$1"', $pagehtml);
+            $this->controller->assign('pagehtml', $pagehtml);
             $result = ['page' => ['limit' => intval($limit), 'total' => intval($page->total()), 'pages' => intval($page->lastPage()), 'current' => intval($page->currentPage())], 'list' => $page->items()];
         } else {
             $result = ['list' => $this->query->select()];
@@ -135,4 +139,4 @@ class PageHelper extends Helper
         }
     }
 
-}
+}

+ 11 - 5
vendor/zoujingli/think-library/src/tools/JsonRpcClient.php

@@ -15,6 +15,8 @@
 
 namespace library\tools;
 
+use think\Exception;
+
 /**
  * JsonRpc 客户端
  * Class JsonRpcClient
@@ -40,7 +42,7 @@ class JsonRpcClient
      */
     public function __construct($proxy)
     {
-        $this->id = Data::randomCode(16, 3);
+        $this->id = time();
         $this->proxy = $proxy;
     }
 
@@ -53,8 +55,11 @@ class JsonRpcClient
      */
     public function __call($method, $params)
     {
-        // Performs the HTTP POST
         $options = [
+            'ssl'  => [
+                'verify_peer'      => false,
+                'verify_peer_name' => false,
+            ],
             'http' => [
                 'method'  => 'POST',
                 'header'  => 'Content-type: application/json',
@@ -63,22 +68,23 @@ class JsonRpcClient
                 ], JSON_UNESCAPED_UNICODE),
             ],
         ];
+        // Performs the HTTP POST
         if ($fp = fopen($this->proxy, 'r', false, stream_context_create($options))) {
             $response = '';
             while ($row = fgets($fp)) $response .= trim($row) . "\n";
             fclose($fp);
             $response = json_decode($response, true);
         } else {
-            throw new \think\Exception("无法连接到 {$this->proxy}");
+            throw new Exception("无法连接到 {$this->proxy}");
         }
         // Final checks and return
         if ($response['id'] != $this->id) {
-            throw new \think\Exception("错误的响应标记 (请求标记: {$this->id}, 响应标记: {$response['id']})");
+            throw new Exception("错误标记 (请求标记: {$this->id}, 响应标记: {$response['id']})");
         }
         if (is_null($response['error'])) {
             return $response['result'];
         } else {
-            throw new \think\Exception("请求错误:{$response['error']['message']}", $response['error']['code']);
+            throw new Exception($response['error']['message'], $response['error']['code'], $response['result']);
         }
     }
 }

+ 40 - 13
vendor/zoujingli/think-library/src/tools/JsonRpcServer.php

@@ -53,38 +53,65 @@ class JsonRpcServer
     /**
      * 设置监听对象
      * @param mixed $object
+     * @throws \Exception
      */
     public function handle($object)
     {
         // Checks if a JSON-RCP request has been received
-        if ($this->app->request->method() !== "POST" || $this->app->request->contentType() != 'application/json') {
-            echo "<h2>" . get_class($object) . "</h2>";
-            foreach (get_class_methods($object) as $method) {
-                if ($method[0] !== '_') echo "<p>method {$method}()</p>";
-            }
+        if ($this->app->request->method() !== "POST" || $this->app->request->contentType() !== 'application/json') {
+            $this->printMethod($object);
         } else {
             // Reads the input data
-            $request = json_decode(file_get_contents('php://input'), true);
+            $request = json_decode(file_get_contents('php://input'), true) ?: [];
             if (empty($request)) {
                 $error = ['code' => '-32700', 'message' => '语法解析错误', 'meaning' => '服务端接收到无效的JSON'];
-                $response = ['jsonrpc' => '2.0', 'id' => $request['id'], 'result' => null, 'error' => $error];
+                $response = ['jsonrpc' => '2.0', 'id' => '0', 'result' => null, 'error' => $error];
             } elseif (!isset($request['id']) || !isset($request['method']) || !isset($request['params'])) {
                 $error = ['code' => '-32600', 'message' => '无效的请求', 'meaning' => '发送的JSON不是一个有效的请求对象'];
-                $response = ['jsonrpc' => '2.0', 'id' => $request['id'], 'result' => null, 'error' => $error];
+                $response = ['jsonrpc' => '2.0', 'id' => $request['id'] ?? '0', 'result' => null, 'error' => $error];
             } else try {
-                // Executes the task on local object
-                if ($result = @call_user_func_array([$object, $request['method']], $request['params'])) {
+                if ($object instanceof \Exception) {
+                    throw $object;
+                } elseif (strtolower($request['method']) === '_get_class_name_') {
+                    $response = ['jsonrpc' => '2.0', 'id' => $request['id'], 'result' => get_class($object), 'error' => null];
+                } elseif (method_exists($object, $request['method'])) {
+                    $result = call_user_func_array([$object, $request['method']], $request['params']);
                     $response = ['jsonrpc' => '2.0', 'id' => $request['id'], 'result' => $result, 'error' => null];
                 } else {
                     $error = ['code' => '-32601', 'message' => '找不到方法', 'meaning' => '该方法不存在或无效'];
                     $response = ['jsonrpc' => '2.0', 'id' => $request['id'], 'result' => null, 'error' => $error];
                 }
-            } catch (\Exception $e) {
-                $error = ['code' => $e->getCode(), 'message' => $e->getMessage()];
+            } catch (\Exception $exception) {
+                $error = ['code' => $exception->getCode(), 'message' => $exception->getMessage(), 'meaning' => '系统处理异常'];
                 $response = ['jsonrpc' => '2.0', 'id' => $request['id'], 'result' => null, 'error' => $error];
             }
             // Output the response
-            throw new HttpResponseException(json($response)->contentType('text/javascript'));
+            throw new HttpResponseException(json($response));
+        }
+    }
+
+    /**
+     * 打印输出对象方法
+     * @param mixed $object
+     */
+    protected function printMethod($object)
+    {
+        try {
+            $object = new \ReflectionClass($object);
+            echo "<h2>{$object->getName()}</h2><hr>";
+            foreach ($object->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
+                if (stripos($method->getName(), '_') === 0) continue;
+                $params = [];
+                foreach ($method->getParameters() as $parameter) {
+                    $type = $parameter->getType();
+                    $params[] = ($type ? "{$type} $" : '$') . $parameter->getName();
+                }
+                $params = count($params) > 0 ? join(', ', $params) : '';
+                echo '<div style="color:#666">' . nl2br($method->getDocComment() ?: '') . '</div>';
+                echo "<div style='color:#00E'>{$object->getShortName()}::{$method->getName()}({$params})</div><br>";
+            }
+        } catch (\Exception $exception) {
+            echo "<h3>[{$exception->getCode()}] {$exception->getMessage()}</h3>";
         }
     }
 }

+ 1 - 1
vendor/zoujingli/wechat-developer/AliPay/App.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 2 - 2
vendor/zoujingli/wechat-developer/AliPay/Bill.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -36,7 +36,7 @@ class Bill extends BasicAliPay
     /**
      * 创建数据操作
      * @param array $options
-     * @return mixed
+     * @return array|bool
      * @throws \WeChat\Exceptions\InvalidResponseException
      * @throws \WeChat\Exceptions\LocalCacheException
      */

+ 2 - 2
vendor/zoujingli/wechat-developer/AliPay/Pos.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -37,7 +37,7 @@ class Pos extends BasicAliPay
     /**
      * 创建数据操作
      * @param array $options
-     * @return mixed
+     * @return array|bool
      * @throws \WeChat\Exceptions\InvalidResponseException
      * @throws \WeChat\Exceptions\LocalCacheException
      */

+ 2 - 2
vendor/zoujingli/wechat-developer/AliPay/Scan.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -36,7 +36,7 @@ class Scan extends BasicAliPay
     /**
      * 创建数据操作
      * @param array $options
-     * @return mixed
+     * @return array|bool
      * @throws \WeChat\Exceptions\InvalidResponseException
      * @throws \WeChat\Exceptions\LocalCacheException
      */

+ 2 - 2
vendor/zoujingli/wechat-developer/AliPay/Trade.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -69,7 +69,7 @@ class Trade extends BasicAliPay
     /**
      * 执行通过接口
      * @param array $options
-     * @return array|boolean|mixed
+     * @return array|boolean
      * @throws \WeChat\Exceptions\InvalidResponseException
      * @throws \WeChat\Exceptions\LocalCacheException
      */

+ 1 - 1
vendor/zoujingli/wechat-developer/AliPay/Transfer.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/AliPay/Wap.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/AliPay/Web.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 2 - 0
vendor/zoujingli/wechat-developer/README.md

@@ -72,6 +72,8 @@ WeChatDeveloper 为开源项目,允许把它用于任何地方,不受任何
 |  Template.php  | WeChat\Template   |  微信模板消息接口支持  |  认证服务号 | \We::WeChatTemplate() |
 |  User.php  | WeChat\User   |  微信粉丝管理接口支持  |  认证服务号 | \We::WeChatCard() |
 |  Wifi.php  | WeChat\Wifi   |  微信门店WIFI管理支持  |  认证服务号 | \We::WeChatWifi() |
+|  Draft.php  | WeChat\Draft   |  微信草稿箱  |  认证服务号 | \We::WeChatDraft() |
+|  Freepublish.php  | WeChat\Freepublish   |  微信发布能力  |  认证服务号 | \We::WeChatFreepublish() |
 |  Bill.php  | WePay\Bill   |  微信商户账单及评论  | 微信支付 | \We::WePayBill() |
 |  Coupon.php  | WePay\Coupon   |  微信商户代金券  |  微信支付 | \We::WePayCoupon() |
 |  Order.php  | WePay\Order   |  微信商户订单  |  微信支付 | \We::WePayOrder() |

+ 5 - 2
vendor/zoujingli/wechat-developer/We.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -51,6 +51,8 @@ use WeChat\Exceptions\InvalidInstanceException;
  * @method \WeChat\Template WeChatTemplate($options = []) static 微信模板消息
  * @method \WeChat\User WeChatUser($options = []) static 微信粉丝管理
  * @method \WeChat\Wifi WeChatWifi($options = []) static 微信门店WIFI管理
+ * @method \WeChat\Draft WeChatDraft($options = []) static 微信草稿箱
+ * @method \WeChat\Freepublish WeChatFreepublish($options = []) static 微信发布能力
  *
  * ----- WeMini -----
  * @method \WeMini\Crypt WeMiniCrypt($options = []) static 小程序数据加密处理
@@ -66,6 +68,7 @@ use WeChat\Exceptions\InvalidInstanceException;
  * @method \WeMini\Plugs WeMiniPlugs($options = []) static 小程序插件管理
  * @method \WeMini\Poi WeMiniPoi($options = []) static 小程序地址管理
  * @method \WeMini\Qrcode WeMiniQrcode($options = []) static 小程序二维码管理
+ * @method \WeMini\Scheme WeMiniScheme($options = []) static 小程序 URL-Scheme
  * @method \WeMini\Search WeMiniSearch($options = []) static 小程序搜索
  * @method \WeMini\Security WeMiniSecurity($options = []) static 小程序内容安全
  * @method \WeMini\Soter WeMiniSoter($options = []) static 小程序生物认证
@@ -88,7 +91,7 @@ class We
      * 定义当前版本
      * @var string
      */
-    const VERSION = '1.2.31';
+    const VERSION = '1.2.35';
 
     /**
      * 静态配置

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Card.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicAliPay.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicPushEvent.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeChat.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWePay.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/BasicWeWork.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/DataArray.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/DataError.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Contracts/Prpcrypt.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 14 - 10
vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -99,7 +99,7 @@ class Tools
 
     /**
      * 创建CURL文件对象
-     * @param $filename
+     * @param mixed $filename
      * @param string $mimetype
      * @param string $postname
      * @return \CURLFile|string
@@ -159,16 +159,20 @@ class Tools
      */
     public static function xml2arr($xml)
     {
-        $entity = libxml_disable_entity_loader(true);
-        $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
-        libxml_disable_entity_loader($entity);
+        if (PHP_VERSION_ID < 80000) {
+            $backup = libxml_disable_entity_loader(true);
+            $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
+            libxml_disable_entity_loader($backup);
+        } else {
+            $data = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
+        }
         return json_decode(json_encode($data), true);
     }
 
     /**
      * 解析XML文本内容
      * @param string $xml
-     * @return boolean|mixed
+     * @return array|false
      */
     public static function xml3arr($xml)
     {
@@ -354,18 +358,18 @@ class Tools
     private static function _buildHttpData($data, $build = true)
     {
         if (!is_array($data)) return $data;
-        foreach ($data as $key => $value) if (is_object($value) && $value instanceof \CURLFile) {
+        foreach ($data as $key => $value) if ($value instanceof \CURLFile) {
             $build = false;
         } elseif (is_object($value) && isset($value->datatype) && $value->datatype === 'MY_CURL_FILE') {
             $build = false;
             $mycurl = new MyCurlFile((array)$value);
             $data[$key] = $mycurl->get();
-            array_push(self::$cache_curl, $mycurl->tempname);
+            self::$cache_curl[] = $mycurl->tempname;
         } elseif (is_array($value) && isset($value['datatype']) && $value['datatype'] === 'MY_CURL_FILE') {
             $build = false;
             $mycurl = new MyCurlFile($value);
             $data[$key] = $mycurl->get();
-            array_push(self::$cache_curl, $mycurl->tempname);
+            self::$cache_curl[] = $mycurl->tempname;
         } elseif (is_string($value) && class_exists('CURLFile', false) && stripos($value, '@') === 0) {
             if (($filename = realpath(trim($value, '@'))) && file_exists($filename)) {
                 $build = false;
@@ -447,7 +451,7 @@ class Tools
             return call_user_func_array(self::$cache_callable['del'], func_get_args());
         }
         $file = self::_getCacheName($name);
-        return file_exists($file) ? unlink($file) : true;
+        return !file_exists($file) || @unlink($file);
     }
 
     /**

+ 1 - 2
vendor/zoujingli/wechat-developer/WeChat/Custom.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -82,7 +82,6 @@ class Custom extends BasicWeChat
     public function inviteWorker($kf_account, $invite_wx)
     {
         $url = 'https://api.weixin.qq.com/customservice/kfaccount/inviteworker?access_token=ACCESS_TOKEN';
-        $this->registerApi($url, __FUNCTION__, func_get_args());
         return $this->callPostApi($url, ['kf_account' => $kf_account, 'invite_wx' => $invite_wx]);
     }
 

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidArgumentException.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidDecryptException.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidInstanceException.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Exceptions/InvalidResponseException.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Exceptions/LocalCacheException.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

+ 1 - 3
vendor/zoujingli/wechat-developer/WeChat/Limit.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -33,7 +33,6 @@ class Limit extends BasicWeChat
     public function clearQuota()
     {
         $url = 'https://api.weixin.qq.com/cgi-bin/clear_quota?access_token=ACCESS_TOKEN';
-        $this->registerApi($url, __FUNCTION__, func_get_args());
         return $this->callPostApi($url, ['appid' => $this->config->get('appid')]);
     }
 
@@ -48,7 +47,6 @@ class Limit extends BasicWeChat
     public function ping($action = 'all', $operator = 'DEFAULT')
     {
         $url = 'https://api.weixin.qq.com/cgi-bin/callback/check?access_token=ACCESS_TOKEN';
-        $this->registerApi($url, __FUNCTION__, func_get_args());
         return $this->callPostApi($url, ['action' => $action, 'check_operator' => $operator]);
     }
 

+ 4 - 4
vendor/zoujingli/wechat-developer/WeChat/Media.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------
@@ -14,8 +14,8 @@
 
 namespace WeChat;
 
-use WeChat\Contracts\Tools;
 use WeChat\Contracts\BasicWeChat;
+use WeChat\Contracts\Tools;
 use WeChat\Exceptions\InvalidResponseException;
 
 /**
@@ -99,7 +99,7 @@ class Media extends BasicWeChat
 
     /**
      * 上传图文消息内的图片获取URL
-     * @param string $filename
+     * @param mixed $filename
      * @return array
      * @throws Exceptions\LocalCacheException
      * @throws InvalidResponseException
@@ -113,7 +113,7 @@ class Media extends BasicWeChat
 
     /**
      * 新增其他类型永久素材
-     * @param string $filename 文件名称
+     * @param mixed $filename 文件名称
      * @param string $type 媒体文件类型(image|voice|video|thumb)
      * @param array $description 包含素材的描述信息
      * @return array

+ 1 - 1
vendor/zoujingli/wechat-developer/WeChat/Menu.php

@@ -3,7 +3,7 @@
 // +----------------------------------------------------------------------
 // | WeChatDeveloper
 // +----------------------------------------------------------------------
-// | 版权所有 2014~2020 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
+// | 版权所有 2014~2022 广州楚才信息科技有限公司 [ http://www.cuci.cc ]
 // +----------------------------------------------------------------------
 // | 官方网站: http://think.ctolog.com
 // +----------------------------------------------------------------------

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio