作者 郭盛
1 个管道 的构建 通过 耗费 8 秒

前端接口

... ... @@ -2,13 +2,13 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="e93f11c2-a7d9-4d35-8b1c-8dd18e7f5fef" name="Default" comment="">
<change type="DELETED" beforePath="$PROJECT_DIR$/application/api/controller/Demo.php" afterPath="" />
<change type="DELETED" beforePath="$PROJECT_DIR$/application/api/controller/Index.php" afterPath="" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/application/api/controller/Pay.php" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" afterPath="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/view/video/add.html" afterPath="$PROJECT_DIR$/application/admin/view/video/add.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/view/video/edit.html" afterPath="$PROJECT_DIR$/application/admin/view/video/edit.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/api/controller/User.php" afterPath="$PROJECT_DIR$/application/api/controller/User.php" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/extra/verify.php" afterPath="$PROJECT_DIR$/application/extra/verify.php" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/api.html" afterPath="$PROJECT_DIR$/public/api.html" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/assets/js/backend/video.js" afterPath="$PROJECT_DIR$/public/assets/js/backend/video.js" />
</list>
... ... @@ -21,52 +21,40 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="Video.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php">
<file leaf-file-name="User.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1464">
<caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="video.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/application/admin/lang/zh-cn/video.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="325">
<caret line="13" column="24" lean-forward="false" selection-start-line="13" selection-start-column="24" selection-end-line="13" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="video.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/public/assets/js/backend/video.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="23" column="26" lean-forward="true" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="add.html" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/admin/view/video/add.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="51">
<caret line="90" column="4" lean-forward="false" selection-start-line="90" selection-start-column="4" selection-end-line="113" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="edit.html" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/admin/view/video/edit.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="326">
<caret line="104" column="40" lean-forward="true" selection-start-line="104" selection-start-column="40" selection-end-line="104" selection-end-column="40" />
<folding />
<state relative-caret-position="534">
<caret line="606" column="5" lean-forward="true" selection-start-line="606" selection-start-column="5" selection-end-line="606" selection-end-column="5" />
<folding>
<element signature="e#38#68#0#PHP" expanded="true" />
<element signature="e#337#456#0#PHP" expanded="false" />
<element signature="e#462#1200#0#PHP" expanded="false" />
<element signature="e#1205#2868#0#PHP" expanded="false" />
<element signature="e#2874#3402#0#PHP" expanded="false" />
<element signature="e#3407#4178#0#PHP" expanded="false" />
<element signature="e#4184#4591#0#PHP" expanded="false" />
<element signature="e#4596#4939#0#PHP" expanded="false" />
<element signature="e#4945#5597#0#PHP" expanded="false" />
<element signature="e#5602#7545#0#PHP" expanded="false" />
<element signature="e#7551#8000#0#PHP" expanded="false" />
<element signature="e#8005#8888#0#PHP" expanded="false" />
<element signature="e#8894#9411#0#PHP" expanded="false" />
<element signature="e#9416#10415#0#PHP" expanded="false" />
<element signature="e#10421#11105#0#PHP" expanded="false" />
<element signature="e#11110#12606#0#PHP" expanded="false" />
<element signature="e#12612#13482#0#PHP" expanded="false" />
<element signature="e#13487#15300#0#PHP" expanded="false" />
<element signature="e#15306#15683#0#PHP" expanded="false" />
<element signature="e#15688#15952#0#PHP" expanded="false" />
<element signature="e#15958#16463#0#PHP" expanded="false" />
<element signature="e#16468#16719#0#PHP" expanded="false" />
<element signature="e#16725#17204#0#PHP" expanded="false" />
<element signature="e#17209#17966#0#PHP" expanded="false" />
<element signature="e#17972#18387#0#PHP" expanded="false" />
<element signature="e#18392#18900#0#PHP" expanded="false" />
<element signature="e#18906#19123#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
... ... @@ -111,17 +99,18 @@
<option value="$PROJECT_DIR$/.gitlab-ci.yml" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/public/.gitignore" />
<option value="$PROJECT_DIR$/application/extra/verify.php" />
<option value="$PROJECT_DIR$/application/common/library/Auth.php" />
<option value="$PROJECT_DIR$/public/assets/js/backend/pic.js" />
<option value="$PROJECT_DIR$/application/admin/lang/zh-cn/pic.php" />
<option value="$PROJECT_DIR$/application/admin/view/pic/add.html" />
<option value="$PROJECT_DIR$/application/admin/view/pic/edit.html" />
<option value="$PROJECT_DIR$/application/api/controller/User.php" />
<option value="$PROJECT_DIR$/application/extra/verify.php" />
<option value="$PROJECT_DIR$/application/api/controller/Pay.php" />
<option value="$PROJECT_DIR$/public/assets/js/backend/video.js" />
<option value="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" />
<option value="$PROJECT_DIR$/application/admin/view/video/add.html" />
<option value="$PROJECT_DIR$/application/admin/view/video/edit.html" />
<option value="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" />
<option value="$PROJECT_DIR$/application/api/controller/User.php" />
</list>
</option>
</component>
... ... @@ -139,11 +128,11 @@
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
<component name="ProjectFrameBounds" extendedState="7">
<option name="x" value="44" />
<option name="y" value="79" />
<option name="width" value="1560" />
<option name="height" value="948" />
<component name="ProjectFrameBounds" extendedState="1">
<option name="x" value="159" />
<option name="y" value="20" />
<option name="width" value="1722" />
<option name="height" value="946" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
... ... @@ -176,56 +165,15 @@
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="api" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="api" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="view" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="view" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="video" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="assets" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="assets" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="js" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
<path>
<item name="areial" type="b2602c69:ProjectViewProjectNode" />
<item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="assets" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="js" type="2a2b976b:PhpTreeStructureProvider$1" />
<item name="backend" type="2a2b976b:PhpTreeStructureProvider$1" />
</path>
</expand>
<select />
</subPane>
... ... @@ -236,10 +184,11 @@
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../hotel" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../scrap1/scrap" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\htdocs\areial\application\api\controller" />
<recent name="D:\htdocs\areial\public" />
<recent name="D:\htdocs\areial" />
<recent name="D:\htdocs\areial\areial" />
... ... @@ -272,7 +221,7 @@
<workItem from="1574122453532" duration="15780000" />
<workItem from="1574141466352" duration="745000" />
<workItem from="1574143209694" duration="3660000" />
<workItem from="1574146994475" duration="15295000" />
<workItem from="1574146994475" duration="23222000" />
</task>
<task id="LOCAL-00001" summary="调试">
<created>1574145133364</created>
... ... @@ -285,7 +234,7 @@
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="63648000" />
<option name="totallyTimeSpent" value="71575000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
... ... @@ -297,10 +246,10 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1056" extended-state="7" />
<frame x="159" y="20" width="1722" height="946" extended-state="1" />
<editor active="true" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15138593" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.17087846" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32912987" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
... ... @@ -308,7 +257,7 @@
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.1772784" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33992583" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
... ... @@ -355,13 +304,6 @@
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/application/admin/view/type/add.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="550">
<caret line="22" column="41" lean-forward="true" selection-start-line="22" selection-start-column="41" selection-end-line="22" selection-end-column="41" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/admin/view/type/edit.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
... ... @@ -594,14 +536,6 @@
<state />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/extra/verify.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="450">
<caret line="18" column="40" lean-forward="true" selection-start-line="18" selection-start-column="40" selection-end-line="18" selection-end-column="40" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/common/library/Auth.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="585">
... ... @@ -681,74 +615,105 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
<entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1464">
<caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/Pay.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="309">
<caret line="459" column="5" lean-forward="true" selection-start-line="459" selection-start-column="5" selection-end-line="459" selection-end-column="5" />
<state relative-caret-position="235">
<caret line="43" column="37" lean-forward="true" selection-start-line="43" selection-start-column="37" selection-end-line="43" selection-end-column="37" />
<folding>
<element signature="e#38#68#0#PHP" expanded="true" />
<element signature="e#337#456#0#PHP" expanded="false" />
<element signature="e#462#1200#0#PHP" expanded="false" />
<element signature="e#1205#2868#0#PHP" expanded="false" />
<element signature="e#2874#3402#0#PHP" expanded="false" />
<element signature="e#3407#4178#0#PHP" expanded="false" />
<element signature="e#4184#4591#0#PHP" expanded="false" />
<element signature="e#4596#4939#0#PHP" expanded="false" />
<element signature="e#4945#5597#0#PHP" expanded="false" />
<element signature="e#5602#7545#0#PHP" expanded="false" />
<element signature="e#7551#8000#0#PHP" expanded="false" />
<element signature="e#8005#8888#0#PHP" expanded="false" />
<element signature="e#8894#9411#0#PHP" expanded="false" />
<element signature="e#9416#10415#0#PHP" expanded="false" />
<element signature="e#10421#11105#0#PHP" expanded="false" />
<element signature="e#11110#12606#0#PHP" expanded="false" />
<element signature="e#12612#13336#0#PHP" expanded="false" />
<element signature="e#13341#14959#0#PHP" expanded="false" />
<element signature="e#14965#15342#0#PHP" expanded="false" />
<element signature="e#15347#15611#0#PHP" expanded="false" />
<element signature="e#600#719#0#PHP" expanded="false" />
<element signature="e#3357#4413#0#PHP" expanded="false" />
<element signature="e#4436#5354#0#PHP" expanded="false" />
<element signature="e#5361#5826#0#PHP" expanded="false" />
<element signature="e#5831#6636#0#PHP" expanded="false" />
<element signature="e#6642#7049#0#PHP" expanded="false" />
<element signature="e#7054#9439#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php">
<entry file="file://$PROJECT_DIR$/application/extra/verify.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1464">
<caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" />
<state relative-caret-position="160">
<caret line="13" column="43" lean-forward="true" selection-start-line="13" selection-start-column="43" selection-end-line="13" selection-end-column="43" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/public/assets/js/backend/video.js">
<entry file="file://$PROJECT_DIR$/application/admin/view/video/edit.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="50">
<caret line="23" column="26" lean-forward="true" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />
<state relative-caret-position="251">
<caret line="83" column="10" lean-forward="false" selection-start-line="83" selection-start-column="10" selection-end-line="83" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/admin/view/video/add.html">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="51">
<caret line="90" column="4" lean-forward="false" selection-start-line="90" selection-start-column="4" selection-end-line="113" selection-end-column="10" />
<state relative-caret-position="101">
<caret line="83" column="10" lean-forward="false" selection-start-line="83" selection-start-column="10" selection-end-line="83" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/admin/view/video/edit.html">
<entry file="file://$PROJECT_DIR$/application/admin/lang/zh-cn/video.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="326">
<caret line="104" column="40" lean-forward="true" selection-start-line="104" selection-start-column="40" selection-end-line="104" selection-end-column="40" />
<state relative-caret-position="350">
<caret line="14" column="34" lean-forward="false" selection-start-line="14" selection-start-column="34" selection-end-line="14" selection-end-column="34" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/admin/lang/zh-cn/video.php">
<entry file="file://$PROJECT_DIR$/public/assets/js/backend/video.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="325">
<caret line="13" column="24" lean-forward="false" selection-start-line="13" selection-start-column="24" selection-end-line="13" selection-end-column="24" />
<state relative-caret-position="475">
<caret line="40" column="73" lean-forward="false" selection-start-line="40" selection-start-column="73" selection-end-line="40" selection-end-column="73" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="534">
<caret line="606" column="5" lean-forward="true" selection-start-line="606" selection-start-column="5" selection-end-line="606" selection-end-column="5" />
<folding>
<element signature="e#38#68#0#PHP" expanded="true" />
<element signature="e#337#456#0#PHP" expanded="false" />
<element signature="e#462#1200#0#PHP" expanded="false" />
<element signature="e#1205#2868#0#PHP" expanded="false" />
<element signature="e#2874#3402#0#PHP" expanded="false" />
<element signature="e#3407#4178#0#PHP" expanded="false" />
<element signature="e#4184#4591#0#PHP" expanded="false" />
<element signature="e#4596#4939#0#PHP" expanded="false" />
<element signature="e#4945#5597#0#PHP" expanded="false" />
<element signature="e#5602#7545#0#PHP" expanded="false" />
<element signature="e#7551#8000#0#PHP" expanded="false" />
<element signature="e#8005#8888#0#PHP" expanded="false" />
<element signature="e#8894#9411#0#PHP" expanded="false" />
<element signature="e#9416#10415#0#PHP" expanded="false" />
<element signature="e#10421#11105#0#PHP" expanded="false" />
<element signature="e#11110#12606#0#PHP" expanded="false" />
<element signature="e#12612#13482#0#PHP" expanded="false" />
<element signature="e#13487#15300#0#PHP" expanded="false" />
<element signature="e#15306#15683#0#PHP" expanded="false" />
<element signature="e#15688#15952#0#PHP" expanded="false" />
<element signature="e#15958#16463#0#PHP" expanded="false" />
<element signature="e#16468#16719#0#PHP" expanded="false" />
<element signature="e#16725#17204#0#PHP" expanded="false" />
<element signature="e#17209#17966#0#PHP" expanded="false" />
<element signature="e#17972#18387#0#PHP" expanded="false" />
<element signature="e#18392#18900#0#PHP" expanded="false" />
<element signature="e#18906#19123#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
</component>
</project>
\ No newline at end of file
... ...
... ... @@ -11,11 +11,8 @@ return [
'Four_url' => '4k视频地址',
'Eight_url' => '8k视频地址',
'Price' =>'2k正常价格',
'Vip_price' =>'2k会员价格',
'Four_price' =>'4K正常价格',
'Four_vipprice' =>'4K会员价格',
'Eight_price' =>'8K正常价格',
'Eight_vipprice' =>'8K会员价格',
'Content' =>'视频介绍',
'Is_recommend' => '是否精选',
'Buy_num' =>'购买数量',
... ...
... ... @@ -83,36 +83,18 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Vip_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-vip_price" class="form-control" name="row[vip_price]" type="text" placeholder="请输入2k会员价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Four_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-four_price" class="form-control" name="row[four_price]" type="text" placeholder="请输入4k普通价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Four_vipprice')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-four_vipprice" class="form-control" name="row[four_vipprice]" type="text" placeholder="请输入4k会员价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Eight_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-eight_price" class="form-control" name="row[eight_price]" type="text" placeholder="请输入8k普通价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Eight_vipprice')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-eight_vipprice" class="form-control" name="row[eight_vipprice]" type="text" placeholder="请输入8k会员价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_recommend')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[is_recommend]', ['1'=>__('是'), '0 '=>__('否')])}
... ...
... ... @@ -83,36 +83,18 @@
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Vip_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-vip_price" class="form-control" name="row[vip_price]" type="text" value="{$row.vip_price}" placeholder="请输入2k会员价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Four_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-four_price" class="form-control" name="row[four_price]" type="text" value="{$row.four_price}" placeholder="请输入4k普通价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Four_vipprice')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-four_vipprice" class="form-control" name="row[four_vipprice]" type="text" value="{$row.four_vipprice}" placeholder="请输入4k会员价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Eight_price')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-eight_price" class="form-control" name="row[eight_price]" type="text" value="{$row.eight_price}" placeholder="请输入8k普通价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Eight_vipprice')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-eight_vipprice" class="form-control" name="row[eight_vipprice]" type="text" value="{$row.eight_vipprice}" placeholder="请输入8k会员价格">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_recommend')}:</label>
<div class="col-xs-12 col-sm-8">
{:build_radios('row[is_recommend]', ['1'=>__('是'), '0'=>__('否')], $row['is_recommend'])}
... ...
<?php
namespace app\api\controller;
use app\admin\model\PayMember;
use app\admin\model\ToBalance;
use app\common\controller\Api;
use EasyWeChat\Factory;
use function GuzzleHttp\Promise\inspect;
use think\Db;
use app\admin\model\User;
use think\Log;
use fast\Http;
use think\Validate;
use Exception;
use function EasyWeChat\Kernel\Support\generate_sign;
/**
* 支付接口
*/
class Pay extends Api
{
protected $noNeedLogin = ['payMemberNotify','paySecurityNotify','payOrderNotify'];
protected $noNeedRight = ['*'];
protected $uid = '';//token存贮uid
protected $order_status = [];//订单状态
public function _initialize()
{
parent::_initialize();
$this->uid = $this->auth->getUserId();
}
/**
* @ApiTitle (充值/支付订单)
* @ApiSummary (充值支付)
* @ApiMethod (POST)
* @ApiRoute (/api/pay/pay)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="openid", type="string", required=true, description="小程序openid")
* @ApiParams (name="num", type="inter", required=false, description="支付订单号")
*
*/
public function pay(){
if($this->request->isPost()){
$openid = $this->request->post('openid');
$order_sn = $this->request->post('num');
if(empty($openid)){
$this->error(['code'=>2,'msg'=>'openid不能为空']);
}
if($order_sn){
//支付订单
$res = Db::name('order')->where(['num'=>$order_sn,'uid'=>$this->uid])->find();
if($res){
if($res['status'] == 2){
$this->error('该订单已支付过了');
}else{
//创建支付对象
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$result = $app->order->unify([
'body' => '山东航拍',
'out_trade_no' => $order_sn,//支付订单号
'total_fee' => $money*100,//单位分
'notify_url' => $notify_url, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => $openid,
]);
if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
$params = [
'appId' => $config['app_id'],
'timeStamp' => time(),
'nonceStr' => $result['nonce_str'], // 统一下单返回的随机字符串
'package' => 'prepay_id='.$result['prepay_id'], // 统一下单Id
'signType' => 'MD5', // 签名方法
];
// 注意这里用的是商户平台的Key进行二次签名
$params['paySign'] = generate_sign($params, $config['key']);
$this->success('成功',$params);
}
$this->error($result['err_code_des']);
}
}else{
$this->error('无效的订单');
}
}
}else{
$this->error('请求方式错误');
}
}
//购买会员回调通知(无需调用)
public function payMemberNotify(){
$config = config('verify.wx_pay');
$app = Factory::payment($config);
Log::info('会员');
$response = $app->handlePaidNotify(function($message, $fail){
//return_code 表示通信状态
Log::info($message);
if ($message['return_code'] === 'SUCCESS') {
if ($message['result_code'] === 'SUCCESS') {
//支付成功
//更新成为会员
$userModel = new User();
$userModel->where('openid',$message['openid'])->update(['member'=>1]);
//增加记录
$payMemberModel = new PayMember();
$payMemberModel->create(['openid'=>$message['openid'],'pay_order'=>$message['out_trade_no']]);
}elseif($message['result_code'] === 'FAIL') {
//支付失败
}
} else {
return $fail('通信失败,请稍后再通知我');
}
return true; // 返回处理完成
});
$response->send();
}
//支付订单(无需调用)
public function payOrderNotify(){
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$response = $app->handlePaidNotify(function($message, $fail){
//return_code 表示通信状态
if ($message['return_code'] === 'SUCCESS') {
if ($message['result_code'] === 'SUCCESS') {
//支付成功,更新订单状态
$orderModel = new \app\admin\model\Order();
$orderModel->where(['order_sn'=>$message['out_trade_no']])->update(['status'=>1]);
//创建订房记录
$this->auth->createHouseRecord($message['out_trade_no']);
}elseif($message['result_code'] === 'FAIL') {
//支付失败
}
} else {
return $fail('通信失败,请稍后再通知我');
}
return true; // 返回处理完成
});
$response->send();
}
/**
* @ApiTitle (更新订单号(支付订单失败后调用))
* @ApiSummary (更新订单号(支付订单失败后调用))
* @ApiMethod (POST)
* @ApiRoute (/api/pay/updateOrder)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="order_sn", type="inter", required=false, description="支付订单号")
*
* @ApiReturn({
"code": 1,
"msg": "成功",
"time": "1571812329",
"data": null
})
*/
public function updateOrder(){
if($this->request->isPost()){
$order_sn = $this->request->post('order_sn');
$rule = config('verify.order_sn');
$validate = new Validate($rule['rule'],$rule['msg']);
if (!$validate->check(['order_sn'=>$order_sn])) {
$this->error($validate->getError());
}
$orderModel = new \app\admin\model\Order();
$pay_order = $this->auth->genPayOrderSn('pay');//支付订单号
$res = $orderModel->where(['order_sn'=>$order_sn,'uid'=>$this->uid])->update(['order_sn'=>$pay_order]);
if($res){
$this->success('成功');
}else{
$this->error('失败');
}
}else{
$this->error('请求方式错误');
}
}
/**
* @ApiTitle (提现到微信零钱)
* @ApiSummary (提现到微信零钱)
* @ApiMethod (POST)
* @ApiRoute (/api/pay/payBalance)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="openid", type="string", required=true, description="小程序openid")
* @ApiParams (name="price", type="inter", required=true, description="提现金额")
*/
public function payBalance(){
if($this->request->isPost()){
$price = $this->request->post('price');
$openid = $this->request->post('openid');
$rule = config('verify.to_balance');
$validate = new Validate($rule['rule'],$rule['msg']);
if (!$validate->check(['price'=>$price,'openid'=>$openid])) {
$this->error($validate->getError());
}
if($price < 0.3){
$this->error('提现金额不能低于0.3元');
}
//每天提现次数不超过三次
$count = Db::name('to_balance')->where('uid',$this->uid)->whereTime('createtime','today')->count();
if($count >= 3){
$this->error('每天提现次数不能超过3次');
}
//查询该用户钱包金额
$userModel = new User();
$user = $userModel->where(['id'=>$this->uid])->field('id,money,nickname')->find();
if($price > $user['money']){
$this->error('钱包金额不足');
}
//创建支付对象
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$balance_order = $this->auth->genPayOrderSn('balance');//提现单号
$result = $app->transfer->toBalance([
'partner_trade_no' => $balance_order, // 商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
'openid' => $openid,
'check_name' => 'NO_CHECK', // NO_CHECK:不校验真实姓名, FORCE_CHECK:强校验真实姓名
're_user_name' => '', // 如果 check_name 设置为FORCE_CHECK,则必填用户真实姓名
'amount' => $price*100, // 企业付款金额,单位为分
'desc' => '提现到零钱', // 企业付款操作说明信息。必填
]);
if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
//创建提现记录
$balanceRecordModel = new ToBalance();
$data['uid'] = $this->uid;
$data['openid'] = $openid;
$data['price'] = $price;
$data['to_order'] = $result['partner_trade_no'];
$balanceRecordModel->create($data);
//更新余额表
$userModel = new User();
$userModel->where(['id'=>$this->uid])->setDec('money',$price);
$this->success('成功');
}
$this->error($result['err_code_des']);
}else{
$this->error('请求方式错误');
}
}
}
... ...
... ... @@ -413,6 +413,10 @@ class User extends Api
"water_url"://小样视频网址
"price"://2K价格,
"vip_price"://2Kvip价格,
"four_price"://4K价格,
"four_vipprice"://4Kvip价格,
"eight_price"://8K价格,
"eight_vipprice"://8Kvip价格,
"content"://图片介绍,
"is_vip"://是否为会员(0否 1是)
}
... ... @@ -432,9 +436,12 @@ class User extends Api
$this->error(['code'=>2,'msg'=>'缺少必要参数']);
}
$data = Db::name('video')
->field('id,title,thumbnail,video,price,vip_price,water_url,content')
->field('id,title,thumbnail,video,price,four_price,eight_price,water_url,content')
->where('id',$pic_id)
->find();
$data['vip_price'] = $data['price']*0.75;
$data['four_vipprice'] = $data['four_price']*0.75;
$data['eight_vipprice'] = $data['eight_price']*0.75;
$data['thumbnail'] = $rule.$data['thumbnail'];
$data['video'] = $rule.$data['video'];
$data['water_url'] = $rule.$data['water_url'];
... ... @@ -487,4 +494,116 @@ class User extends Api
$this->success('SUCCESS',$data);
}
/**
* @ApiTitle (我的)
* @ApiSummary (我的)
* @ApiMethod (POST)
* @ApiRoute (/api/user/mine)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiReturn({
"code": 1,
"msg": "成功",
"time": "1571492001",
"data": {
"id": //用户ID
"nickname": //昵称,
"avatar": //头像,
"money" : //余额
"is_vip": //是否为会员(0否 1是)
}
})
*/
public function mine()
{
$user_id = $this->uid;
$data = Db::name('user')
->where('id',$user_id)
->field('id,nickname,avatar,money,is_vip')
->find();
$this->success('SUCCESS',$data);
}
/**
* @ApiTitle (创建充值订单)
* @ApiSummary (创建充值订单)
* @ApiMethod (POST)
* @ApiRoute (/api/user/toporder)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="money", type="float", required=true, description="充值金额")
*
* @ApiReturn({
"code": 1,
"msg": "成功",
"time": "1571492001",
"data": {
"order_id"://订单ID
}
})
*/
public function toporder()
{
$param['user_id'] = $this->uid;
$param['money'] = $this->request->post('money');
if(empty( $param['money'])){
$this->error(['code'=>2,'msg'=>'缺少必要参数']);
}elseif ( $param['money']<=0){
$this->error(['code'=>3,'msg'=>'非法操作']);
}else{
$param['createtime'] = time();
$param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
$data = Db::name('toporder')
->insertGetId($param);
if(empty($data)){
$this->error(['code'=>2,'msg'=>'sql执行失败']);
}
$this->success('SUCCESS',['order_id'=>$data]);
}
}
/**
* @ApiTitle (充值支付)
* @ApiSummary (充值支付)
* @ApiMethod (POST)
* @ApiRoute (/api/user/pay)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="order_id", type="inter", required=true, description="订单id")
*
* @ApiReturn({
"code": 1,
"msg": "成功",
"time": "1571492001",
})
*/
public function pay()
{
$user_id = $this->uid;
$id = $this->request->post('order_id');
if(empty($id)){
$this->error(['code'=>2,'msg'=>'确实必要参数']);
}
$where['id'] = ['eq',$id];
$where['user_id'] = ['eq',$user_id];
$data = Db::name('toporder')->where($where)->find();
if(empty($data)){
$this->error(['code'=>41001,'msg'=>'数据错误']);
}
$openid = $this->getopenid();
$this->success('SUCCESS');
}
public function getopenid()
{
$user_id = $this->uid;
$openid = Db::name('user')
->where('id',$user_id)
->field('openid')
->find();
return $openid;
}
}
... ...
... ... @@ -17,4 +17,16 @@ return [
]
],
'path'=>'http://areial.w.brotop.cn',
//微信支付配置
'wx_pay' => [
'app_id' => '',
'mch_id' => '',
'key' => '', // 支付 密钥
// 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
'cert_path' => ROOT_PATH.'public/cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
'key_path' => ROOT_PATH.'public/cert/apiclient_key.pem', // XXX: 绝对路径!!!!
'notify_url' => '默认的订单回调地址', // 你也可以在下单时单独设置来想覆盖它
],
];
\ No newline at end of file
... ...
此 diff 太大无法显示。
... ... @@ -37,11 +37,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
{field: 'buy_num', title: __('Buy_num')},
{field: 'click_num', title: __('Click_num')},
{field: 'price', title: __('Price')},
{field: 'vip_price', title: __('Vip_price')},
{field: 'four_price', title: __('Four_price')},
{field: 'four_vipprice', title: __('Four_vipprice')},
{field: 'eight_price', title: __('Eight_price')},
{field: 'eight_vipprice', title: __('Eight_vipprice')},
{field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
]
... ...