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

前端接口

@@ -2,13 +2,13 @@ @@ -2,13 +2,13 @@
2 <project version="4"> 2 <project version="4">
3 <component name="ChangeListManager"> 3 <component name="ChangeListManager">
4 <list default="true" id="e93f11c2-a7d9-4d35-8b1c-8dd18e7f5fef" name="Default" comment=""> 4 <list default="true" id="e93f11c2-a7d9-4d35-8b1c-8dd18e7f5fef" name="Default" comment="">
5 - <change type="DELETED" beforePath="$PROJECT_DIR$/application/api/controller/Demo.php" afterPath="" />  
6 - <change type="DELETED" beforePath="$PROJECT_DIR$/application/api/controller/Index.php" afterPath="" /> 5 + <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/application/api/controller/Pay.php" />
7 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> 6 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
8 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" afterPath="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" /> 7 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" afterPath="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" />
9 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/view/video/add.html" afterPath="$PROJECT_DIR$/application/admin/view/video/add.html" /> 8 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/view/video/add.html" afterPath="$PROJECT_DIR$/application/admin/view/video/add.html" />
10 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/view/video/edit.html" afterPath="$PROJECT_DIR$/application/admin/view/video/edit.html" /> 9 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/admin/view/video/edit.html" afterPath="$PROJECT_DIR$/application/admin/view/video/edit.html" />
11 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/api/controller/User.php" afterPath="$PROJECT_DIR$/application/api/controller/User.php" /> 10 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/api/controller/User.php" afterPath="$PROJECT_DIR$/application/api/controller/User.php" />
  11 + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/extra/verify.php" afterPath="$PROJECT_DIR$/application/extra/verify.php" />
12 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/api.html" afterPath="$PROJECT_DIR$/public/api.html" /> 12 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/api.html" afterPath="$PROJECT_DIR$/public/api.html" />
13 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/assets/js/backend/video.js" afterPath="$PROJECT_DIR$/public/assets/js/backend/video.js" /> 13 <change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/assets/js/backend/video.js" afterPath="$PROJECT_DIR$/public/assets/js/backend/video.js" />
14 </list> 14 </list>
@@ -21,52 +21,40 @@ @@ -21,52 +21,40 @@
21 </component> 21 </component>
22 <component name="FileEditorManager"> 22 <component name="FileEditorManager">
23 <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> 23 <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
24 - <file leaf-file-name="Video.php" pinned="false" current-in-tab="false">  
25 - <entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php"> 24 + <file leaf-file-name="User.php" pinned="false" current-in-tab="true">
  25 + <entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
26 <provider selected="true" editor-type-id="text-editor"> 26 <provider selected="true" editor-type-id="text-editor">
27 - <state relative-caret-position="1464">  
28 - <caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" />  
29 - <folding />  
30 - </state>  
31 - </provider>  
32 - </entry>  
33 - </file>  
34 - <file leaf-file-name="video.php" pinned="false" current-in-tab="true">  
35 - <entry file="file://$PROJECT_DIR$/application/admin/lang/zh-cn/video.php">  
36 - <provider selected="true" editor-type-id="text-editor">  
37 - <state relative-caret-position="325">  
38 - <caret line="13" column="24" lean-forward="false" selection-start-line="13" selection-start-column="24" selection-end-line="13" selection-end-column="24" />  
39 - <folding />  
40 - </state>  
41 - </provider>  
42 - </entry>  
43 - </file>  
44 - <file leaf-file-name="video.js" pinned="false" current-in-tab="false">  
45 - <entry file="file://$PROJECT_DIR$/public/assets/js/backend/video.js">  
46 - <provider selected="true" editor-type-id="text-editor">  
47 - <state relative-caret-position="50">  
48 - <caret line="23" column="26" lean-forward="true" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />  
49 - <folding />  
50 - </state>  
51 - </provider>  
52 - </entry>  
53 - </file>  
54 - <file leaf-file-name="add.html" pinned="false" current-in-tab="false">  
55 - <entry file="file://$PROJECT_DIR$/application/admin/view/video/add.html">  
56 - <provider selected="true" editor-type-id="text-editor">  
57 - <state relative-caret-position="51">  
58 - <caret line="90" column="4" lean-forward="false" selection-start-line="90" selection-start-column="4" selection-end-line="113" selection-end-column="10" />  
59 - <folding />  
60 - </state>  
61 - </provider>  
62 - </entry>  
63 - </file>  
64 - <file leaf-file-name="edit.html" pinned="false" current-in-tab="false">  
65 - <entry file="file://$PROJECT_DIR$/application/admin/view/video/edit.html">  
66 - <provider selected="true" editor-type-id="text-editor">  
67 - <state relative-caret-position="326">  
68 - <caret line="104" column="40" lean-forward="true" selection-start-line="104" selection-start-column="40" selection-end-line="104" selection-end-column="40" />  
69 - <folding /> 27 + <state relative-caret-position="534">
  28 + <caret line="606" column="5" lean-forward="true" selection-start-line="606" selection-start-column="5" selection-end-line="606" selection-end-column="5" />
  29 + <folding>
  30 + <element signature="e#38#68#0#PHP" expanded="true" />
  31 + <element signature="e#337#456#0#PHP" expanded="false" />
  32 + <element signature="e#462#1200#0#PHP" expanded="false" />
  33 + <element signature="e#1205#2868#0#PHP" expanded="false" />
  34 + <element signature="e#2874#3402#0#PHP" expanded="false" />
  35 + <element signature="e#3407#4178#0#PHP" expanded="false" />
  36 + <element signature="e#4184#4591#0#PHP" expanded="false" />
  37 + <element signature="e#4596#4939#0#PHP" expanded="false" />
  38 + <element signature="e#4945#5597#0#PHP" expanded="false" />
  39 + <element signature="e#5602#7545#0#PHP" expanded="false" />
  40 + <element signature="e#7551#8000#0#PHP" expanded="false" />
  41 + <element signature="e#8005#8888#0#PHP" expanded="false" />
  42 + <element signature="e#8894#9411#0#PHP" expanded="false" />
  43 + <element signature="e#9416#10415#0#PHP" expanded="false" />
  44 + <element signature="e#10421#11105#0#PHP" expanded="false" />
  45 + <element signature="e#11110#12606#0#PHP" expanded="false" />
  46 + <element signature="e#12612#13482#0#PHP" expanded="false" />
  47 + <element signature="e#13487#15300#0#PHP" expanded="false" />
  48 + <element signature="e#15306#15683#0#PHP" expanded="false" />
  49 + <element signature="e#15688#15952#0#PHP" expanded="false" />
  50 + <element signature="e#15958#16463#0#PHP" expanded="false" />
  51 + <element signature="e#16468#16719#0#PHP" expanded="false" />
  52 + <element signature="e#16725#17204#0#PHP" expanded="false" />
  53 + <element signature="e#17209#17966#0#PHP" expanded="false" />
  54 + <element signature="e#17972#18387#0#PHP" expanded="false" />
  55 + <element signature="e#18392#18900#0#PHP" expanded="false" />
  56 + <element signature="e#18906#19123#0#PHP" expanded="false" />
  57 + </folding>
70 </state> 58 </state>
71 </provider> 59 </provider>
72 </entry> 60 </entry>
@@ -111,17 +99,18 @@ @@ -111,17 +99,18 @@
111 <option value="$PROJECT_DIR$/.gitlab-ci.yml" /> 99 <option value="$PROJECT_DIR$/.gitlab-ci.yml" />
112 <option value="$PROJECT_DIR$/.gitignore" /> 100 <option value="$PROJECT_DIR$/.gitignore" />
113 <option value="$PROJECT_DIR$/public/.gitignore" /> 101 <option value="$PROJECT_DIR$/public/.gitignore" />
114 - <option value="$PROJECT_DIR$/application/extra/verify.php" />  
115 <option value="$PROJECT_DIR$/application/common/library/Auth.php" /> 102 <option value="$PROJECT_DIR$/application/common/library/Auth.php" />
116 <option value="$PROJECT_DIR$/public/assets/js/backend/pic.js" /> 103 <option value="$PROJECT_DIR$/public/assets/js/backend/pic.js" />
117 <option value="$PROJECT_DIR$/application/admin/lang/zh-cn/pic.php" /> 104 <option value="$PROJECT_DIR$/application/admin/lang/zh-cn/pic.php" />
118 <option value="$PROJECT_DIR$/application/admin/view/pic/add.html" /> 105 <option value="$PROJECT_DIR$/application/admin/view/pic/add.html" />
119 <option value="$PROJECT_DIR$/application/admin/view/pic/edit.html" /> 106 <option value="$PROJECT_DIR$/application/admin/view/pic/edit.html" />
120 - <option value="$PROJECT_DIR$/application/api/controller/User.php" /> 107 + <option value="$PROJECT_DIR$/application/extra/verify.php" />
  108 + <option value="$PROJECT_DIR$/application/api/controller/Pay.php" />
121 <option value="$PROJECT_DIR$/public/assets/js/backend/video.js" /> 109 <option value="$PROJECT_DIR$/public/assets/js/backend/video.js" />
  110 + <option value="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" />
122 <option value="$PROJECT_DIR$/application/admin/view/video/add.html" /> 111 <option value="$PROJECT_DIR$/application/admin/view/video/add.html" />
123 <option value="$PROJECT_DIR$/application/admin/view/video/edit.html" /> 112 <option value="$PROJECT_DIR$/application/admin/view/video/edit.html" />
124 - <option value="$PROJECT_DIR$/application/admin/lang/zh-cn/video.php" /> 113 + <option value="$PROJECT_DIR$/application/api/controller/User.php" />
125 </list> 114 </list>
126 </option> 115 </option>
127 </component> 116 </component>
@@ -139,11 +128,11 @@ @@ -139,11 +128,11 @@
139 <sorting>DEFINITION_ORDER</sorting> 128 <sorting>DEFINITION_ORDER</sorting>
140 </component> 129 </component>
141 <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" /> 130 <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
142 - <component name="ProjectFrameBounds" extendedState="7">  
143 - <option name="x" value="44" />  
144 - <option name="y" value="79" />  
145 - <option name="width" value="1560" />  
146 - <option name="height" value="948" /> 131 + <component name="ProjectFrameBounds" extendedState="1">
  132 + <option name="x" value="159" />
  133 + <option name="y" value="20" />
  134 + <option name="width" value="1722" />
  135 + <option name="height" value="946" />
147 </component> 136 </component>
148 <component name="ProjectView"> 137 <component name="ProjectView">
149 <navigator currentView="ProjectPane" proportions="" version="1"> 138 <navigator currentView="ProjectPane" proportions="" version="1">
@@ -176,56 +165,15 @@ @@ -176,56 +165,15 @@
176 <item name="areial" type="b2602c69:ProjectViewProjectNode" /> 165 <item name="areial" type="b2602c69:ProjectViewProjectNode" />
177 <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" /> 166 <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
178 <item name="application" type="2a2b976b:PhpTreeStructureProvider$1" /> 167 <item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
179 - <item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" /> 168 + <item name="api" type="2a2b976b:PhpTreeStructureProvider$1" />
180 </path> 169 </path>
181 <path> 170 <path>
182 <item name="areial" type="b2602c69:ProjectViewProjectNode" /> 171 <item name="areial" type="b2602c69:ProjectViewProjectNode" />
183 <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" /> 172 <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />
184 <item name="application" type="2a2b976b:PhpTreeStructureProvider$1" /> 173 <item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />
185 - <item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" /> 174 + <item name="api" type="2a2b976b:PhpTreeStructureProvider$1" />
186 <item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" /> 175 <item name="controller" type="2a2b976b:PhpTreeStructureProvider$1" />
187 </path> 176 </path>
188 - <path>  
189 - <item name="areial" type="b2602c69:ProjectViewProjectNode" />  
190 - <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />  
191 - <item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />  
192 - <item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" />  
193 - <item name="view" type="2a2b976b:PhpTreeStructureProvider$1" />  
194 - </path>  
195 - <path>  
196 - <item name="areial" type="b2602c69:ProjectViewProjectNode" />  
197 - <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />  
198 - <item name="application" type="2a2b976b:PhpTreeStructureProvider$1" />  
199 - <item name="admin" type="2a2b976b:PhpTreeStructureProvider$1" />  
200 - <item name="view" type="2a2b976b:PhpTreeStructureProvider$1" />  
201 - <item name="video" type="2a2b976b:PhpTreeStructureProvider$1" />  
202 - </path>  
203 - <path>  
204 - <item name="areial" type="b2602c69:ProjectViewProjectNode" />  
205 - <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />  
206 - <item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />  
207 - </path>  
208 - <path>  
209 - <item name="areial" type="b2602c69:ProjectViewProjectNode" />  
210 - <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />  
211 - <item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />  
212 - <item name="assets" type="2a2b976b:PhpTreeStructureProvider$1" />  
213 - </path>  
214 - <path>  
215 - <item name="areial" type="b2602c69:ProjectViewProjectNode" />  
216 - <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />  
217 - <item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />  
218 - <item name="assets" type="2a2b976b:PhpTreeStructureProvider$1" />  
219 - <item name="js" type="2a2b976b:PhpTreeStructureProvider$1" />  
220 - </path>  
221 - <path>  
222 - <item name="areial" type="b2602c69:ProjectViewProjectNode" />  
223 - <item name="areial" type="2a2b976b:PhpTreeStructureProvider$1" />  
224 - <item name="public" type="2a2b976b:PhpTreeStructureProvider$1" />  
225 - <item name="assets" type="2a2b976b:PhpTreeStructureProvider$1" />  
226 - <item name="js" type="2a2b976b:PhpTreeStructureProvider$1" />  
227 - <item name="backend" type="2a2b976b:PhpTreeStructureProvider$1" />  
228 - </path>  
229 </expand> 177 </expand>
230 <select /> 178 <select />
231 </subPane> 179 </subPane>
@@ -236,10 +184,11 @@ @@ -236,10 +184,11 @@
236 </component> 184 </component>
237 <component name="PropertiesComponent"> 185 <component name="PropertiesComponent">
238 <property name="WebServerToolWindowFactoryState" value="false" /> 186 <property name="WebServerToolWindowFactoryState" value="false" />
239 - <property name="last_opened_file_path" value="$PROJECT_DIR$/../hotel" /> 187 + <property name="last_opened_file_path" value="$PROJECT_DIR$/../scrap1/scrap" />
240 </component> 188 </component>
241 <component name="RecentsManager"> 189 <component name="RecentsManager">
242 <key name="CopyFile.RECENT_KEYS"> 190 <key name="CopyFile.RECENT_KEYS">
  191 + <recent name="D:\htdocs\areial\application\api\controller" />
243 <recent name="D:\htdocs\areial\public" /> 192 <recent name="D:\htdocs\areial\public" />
244 <recent name="D:\htdocs\areial" /> 193 <recent name="D:\htdocs\areial" />
245 <recent name="D:\htdocs\areial\areial" /> 194 <recent name="D:\htdocs\areial\areial" />
@@ -272,7 +221,7 @@ @@ -272,7 +221,7 @@
272 <workItem from="1574122453532" duration="15780000" /> 221 <workItem from="1574122453532" duration="15780000" />
273 <workItem from="1574141466352" duration="745000" /> 222 <workItem from="1574141466352" duration="745000" />
274 <workItem from="1574143209694" duration="3660000" /> 223 <workItem from="1574143209694" duration="3660000" />
275 - <workItem from="1574146994475" duration="15295000" /> 224 + <workItem from="1574146994475" duration="23222000" />
276 </task> 225 </task>
277 <task id="LOCAL-00001" summary="调试"> 226 <task id="LOCAL-00001" summary="调试">
278 <created>1574145133364</created> 227 <created>1574145133364</created>
@@ -285,7 +234,7 @@ @@ -285,7 +234,7 @@
285 <servers /> 234 <servers />
286 </component> 235 </component>
287 <component name="TimeTrackingManager"> 236 <component name="TimeTrackingManager">
288 - <option name="totallyTimeSpent" value="63648000" /> 237 + <option name="totallyTimeSpent" value="71575000" />
289 </component> 238 </component>
290 <component name="TodoView"> 239 <component name="TodoView">
291 <todo-panel id="selected-file"> 240 <todo-panel id="selected-file">
@@ -297,10 +246,10 @@ @@ -297,10 +246,10 @@
297 </todo-panel> 246 </todo-panel>
298 </component> 247 </component>
299 <component name="ToolWindowManager"> 248 <component name="ToolWindowManager">
300 - <frame x="-8" y="-8" width="1936" height="1056" extended-state="7" /> 249 + <frame x="159" y="20" width="1722" height="946" extended-state="1" />
301 <editor active="true" /> 250 <editor active="true" />
302 <layout> 251 <layout>
303 - <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" /> 252 + <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" />
304 <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" /> 253 <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" />
305 <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" /> 254 <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" />
306 <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" /> 255 <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 @@ @@ -308,7 +257,7 @@
308 <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" /> 257 <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" />
309 <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" /> 258 <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" />
310 <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" /> 259 <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" />
311 - <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" /> 260 + <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" />
312 <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" /> 261 <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" />
313 <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" /> 262 <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" />
314 <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" /> 263 <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 @@ @@ -355,13 +304,6 @@
355 <watches-manager /> 304 <watches-manager />
356 </component> 305 </component>
357 <component name="editorHistoryManager"> 306 <component name="editorHistoryManager">
358 - <entry file="file://$PROJECT_DIR$/application/admin/view/type/add.html">  
359 - <provider selected="true" editor-type-id="text-editor">  
360 - <state relative-caret-position="550">  
361 - <caret line="22" column="41" lean-forward="true" selection-start-line="22" selection-start-column="41" selection-end-line="22" selection-end-column="41" />  
362 - </state>  
363 - </provider>  
364 - </entry>  
365 <entry file="file://$PROJECT_DIR$/application/admin/view/type/edit.html"> 307 <entry file="file://$PROJECT_DIR$/application/admin/view/type/edit.html">
366 <provider selected="true" editor-type-id="text-editor"> 308 <provider selected="true" editor-type-id="text-editor">
367 <state relative-caret-position="300"> 309 <state relative-caret-position="300">
@@ -594,14 +536,6 @@ @@ -594,14 +536,6 @@
594 <state /> 536 <state />
595 </provider> 537 </provider>
596 </entry> 538 </entry>
597 - <entry file="file://$PROJECT_DIR$/application/extra/verify.php">  
598 - <provider selected="true" editor-type-id="text-editor">  
599 - <state relative-caret-position="450">  
600 - <caret line="18" column="40" lean-forward="true" selection-start-line="18" selection-start-column="40" selection-end-line="18" selection-end-column="40" />  
601 - <folding />  
602 - </state>  
603 - </provider>  
604 - </entry>  
605 <entry file="file://$PROJECT_DIR$/application/common/library/Auth.php"> 539 <entry file="file://$PROJECT_DIR$/application/common/library/Auth.php">
606 <provider selected="true" editor-type-id="text-editor"> 540 <provider selected="true" editor-type-id="text-editor">
607 <state relative-caret-position="585"> 541 <state relative-caret-position="585">
@@ -681,74 +615,105 @@ @@ -681,74 +615,105 @@
681 </state> 615 </state>
682 </provider> 616 </provider>
683 </entry> 617 </entry>
684 - <entry file="file://$PROJECT_DIR$/application/api/controller/User.php"> 618 + <entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php">
  619 + <provider selected="true" editor-type-id="text-editor">
  620 + <state relative-caret-position="1464">
  621 + <caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" />
  622 + <folding />
  623 + </state>
  624 + </provider>
  625 + </entry>
  626 + <entry file="file://$PROJECT_DIR$/application/api/controller/Pay.php">
685 <provider selected="true" editor-type-id="text-editor"> 627 <provider selected="true" editor-type-id="text-editor">
686 - <state relative-caret-position="309">  
687 - <caret line="459" column="5" lean-forward="true" selection-start-line="459" selection-start-column="5" selection-end-line="459" selection-end-column="5" /> 628 + <state relative-caret-position="235">
  629 + <caret line="43" column="37" lean-forward="true" selection-start-line="43" selection-start-column="37" selection-end-line="43" selection-end-column="37" />
688 <folding> 630 <folding>
689 - <element signature="e#38#68#0#PHP" expanded="true" />  
690 - <element signature="e#337#456#0#PHP" expanded="false" />  
691 - <element signature="e#462#1200#0#PHP" expanded="false" />  
692 - <element signature="e#1205#2868#0#PHP" expanded="false" />  
693 - <element signature="e#2874#3402#0#PHP" expanded="false" />  
694 - <element signature="e#3407#4178#0#PHP" expanded="false" />  
695 - <element signature="e#4184#4591#0#PHP" expanded="false" />  
696 - <element signature="e#4596#4939#0#PHP" expanded="false" />  
697 - <element signature="e#4945#5597#0#PHP" expanded="false" />  
698 - <element signature="e#5602#7545#0#PHP" expanded="false" />  
699 - <element signature="e#7551#8000#0#PHP" expanded="false" />  
700 - <element signature="e#8005#8888#0#PHP" expanded="false" />  
701 - <element signature="e#8894#9411#0#PHP" expanded="false" />  
702 - <element signature="e#9416#10415#0#PHP" expanded="false" />  
703 - <element signature="e#10421#11105#0#PHP" expanded="false" />  
704 - <element signature="e#11110#12606#0#PHP" expanded="false" />  
705 - <element signature="e#12612#13336#0#PHP" expanded="false" />  
706 - <element signature="e#13341#14959#0#PHP" expanded="false" />  
707 - <element signature="e#14965#15342#0#PHP" expanded="false" />  
708 - <element signature="e#15347#15611#0#PHP" expanded="false" /> 631 + <element signature="e#600#719#0#PHP" expanded="false" />
  632 + <element signature="e#3357#4413#0#PHP" expanded="false" />
  633 + <element signature="e#4436#5354#0#PHP" expanded="false" />
  634 + <element signature="e#5361#5826#0#PHP" expanded="false" />
  635 + <element signature="e#5831#6636#0#PHP" expanded="false" />
  636 + <element signature="e#6642#7049#0#PHP" expanded="false" />
  637 + <element signature="e#7054#9439#0#PHP" expanded="false" />
709 </folding> 638 </folding>
710 </state> 639 </state>
711 </provider> 640 </provider>
712 </entry> 641 </entry>
713 - <entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php"> 642 + <entry file="file://$PROJECT_DIR$/application/extra/verify.php">
714 <provider selected="true" editor-type-id="text-editor"> 643 <provider selected="true" editor-type-id="text-editor">
715 - <state relative-caret-position="1464">  
716 - <caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" /> 644 + <state relative-caret-position="160">
  645 + <caret line="13" column="43" lean-forward="true" selection-start-line="13" selection-start-column="43" selection-end-line="13" selection-end-column="43" />
717 <folding /> 646 <folding />
718 </state> 647 </state>
719 </provider> 648 </provider>
720 </entry> 649 </entry>
721 - <entry file="file://$PROJECT_DIR$/public/assets/js/backend/video.js"> 650 + <entry file="file://$PROJECT_DIR$/application/admin/view/video/edit.html">
722 <provider selected="true" editor-type-id="text-editor"> 651 <provider selected="true" editor-type-id="text-editor">
723 - <state relative-caret-position="50">  
724 - <caret line="23" column="26" lean-forward="true" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" /> 652 + <state relative-caret-position="251">
  653 + <caret line="83" column="10" lean-forward="false" selection-start-line="83" selection-start-column="10" selection-end-line="83" selection-end-column="10" />
725 <folding /> 654 <folding />
726 </state> 655 </state>
727 </provider> 656 </provider>
728 </entry> 657 </entry>
729 <entry file="file://$PROJECT_DIR$/application/admin/view/video/add.html"> 658 <entry file="file://$PROJECT_DIR$/application/admin/view/video/add.html">
730 <provider selected="true" editor-type-id="text-editor"> 659 <provider selected="true" editor-type-id="text-editor">
731 - <state relative-caret-position="51">  
732 - <caret line="90" column="4" lean-forward="false" selection-start-line="90" selection-start-column="4" selection-end-line="113" selection-end-column="10" /> 660 + <state relative-caret-position="101">
  661 + <caret line="83" column="10" lean-forward="false" selection-start-line="83" selection-start-column="10" selection-end-line="83" selection-end-column="10" />
733 <folding /> 662 <folding />
734 </state> 663 </state>
735 </provider> 664 </provider>
736 </entry> 665 </entry>
737 - <entry file="file://$PROJECT_DIR$/application/admin/view/video/edit.html"> 666 + <entry file="file://$PROJECT_DIR$/application/admin/lang/zh-cn/video.php">
738 <provider selected="true" editor-type-id="text-editor"> 667 <provider selected="true" editor-type-id="text-editor">
739 - <state relative-caret-position="326">  
740 - <caret line="104" column="40" lean-forward="true" selection-start-line="104" selection-start-column="40" selection-end-line="104" selection-end-column="40" /> 668 + <state relative-caret-position="350">
  669 + <caret line="14" column="34" lean-forward="false" selection-start-line="14" selection-start-column="34" selection-end-line="14" selection-end-column="34" />
741 <folding /> 670 <folding />
742 </state> 671 </state>
743 </provider> 672 </provider>
744 </entry> 673 </entry>
745 - <entry file="file://$PROJECT_DIR$/application/admin/lang/zh-cn/video.php"> 674 + <entry file="file://$PROJECT_DIR$/public/assets/js/backend/video.js">
746 <provider selected="true" editor-type-id="text-editor"> 675 <provider selected="true" editor-type-id="text-editor">
747 - <state relative-caret-position="325">  
748 - <caret line="13" column="24" lean-forward="false" selection-start-line="13" selection-start-column="24" selection-end-line="13" selection-end-column="24" /> 676 + <state relative-caret-position="475">
  677 + <caret line="40" column="73" lean-forward="false" selection-start-line="40" selection-start-column="73" selection-end-line="40" selection-end-column="73" />
749 <folding /> 678 <folding />
750 </state> 679 </state>
751 </provider> 680 </provider>
752 </entry> 681 </entry>
  682 + <entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
  683 + <provider selected="true" editor-type-id="text-editor">
  684 + <state relative-caret-position="534">
  685 + <caret line="606" column="5" lean-forward="true" selection-start-line="606" selection-start-column="5" selection-end-line="606" selection-end-column="5" />
  686 + <folding>
  687 + <element signature="e#38#68#0#PHP" expanded="true" />
  688 + <element signature="e#337#456#0#PHP" expanded="false" />
  689 + <element signature="e#462#1200#0#PHP" expanded="false" />
  690 + <element signature="e#1205#2868#0#PHP" expanded="false" />
  691 + <element signature="e#2874#3402#0#PHP" expanded="false" />
  692 + <element signature="e#3407#4178#0#PHP" expanded="false" />
  693 + <element signature="e#4184#4591#0#PHP" expanded="false" />
  694 + <element signature="e#4596#4939#0#PHP" expanded="false" />
  695 + <element signature="e#4945#5597#0#PHP" expanded="false" />
  696 + <element signature="e#5602#7545#0#PHP" expanded="false" />
  697 + <element signature="e#7551#8000#0#PHP" expanded="false" />
  698 + <element signature="e#8005#8888#0#PHP" expanded="false" />
  699 + <element signature="e#8894#9411#0#PHP" expanded="false" />
  700 + <element signature="e#9416#10415#0#PHP" expanded="false" />
  701 + <element signature="e#10421#11105#0#PHP" expanded="false" />
  702 + <element signature="e#11110#12606#0#PHP" expanded="false" />
  703 + <element signature="e#12612#13482#0#PHP" expanded="false" />
  704 + <element signature="e#13487#15300#0#PHP" expanded="false" />
  705 + <element signature="e#15306#15683#0#PHP" expanded="false" />
  706 + <element signature="e#15688#15952#0#PHP" expanded="false" />
  707 + <element signature="e#15958#16463#0#PHP" expanded="false" />
  708 + <element signature="e#16468#16719#0#PHP" expanded="false" />
  709 + <element signature="e#16725#17204#0#PHP" expanded="false" />
  710 + <element signature="e#17209#17966#0#PHP" expanded="false" />
  711 + <element signature="e#17972#18387#0#PHP" expanded="false" />
  712 + <element signature="e#18392#18900#0#PHP" expanded="false" />
  713 + <element signature="e#18906#19123#0#PHP" expanded="false" />
  714 + </folding>
  715 + </state>
  716 + </provider>
  717 + </entry>
753 </component> 718 </component>
754 </project> 719 </project>
@@ -11,11 +11,8 @@ return [ @@ -11,11 +11,8 @@ return [
11 'Four_url' => '4k视频地址', 11 'Four_url' => '4k视频地址',
12 'Eight_url' => '8k视频地址', 12 'Eight_url' => '8k视频地址',
13 'Price' =>'2k正常价格', 13 'Price' =>'2k正常价格',
14 - 'Vip_price' =>'2k会员价格',  
15 'Four_price' =>'4K正常价格', 14 'Four_price' =>'4K正常价格',
16 - 'Four_vipprice' =>'4K会员价格',  
17 'Eight_price' =>'8K正常价格', 15 'Eight_price' =>'8K正常价格',
18 - 'Eight_vipprice' =>'8K会员价格',  
19 'Content' =>'视频介绍', 16 'Content' =>'视频介绍',
20 'Is_recommend' => '是否精选', 17 'Is_recommend' => '是否精选',
21 'Buy_num' =>'购买数量', 18 'Buy_num' =>'购买数量',
@@ -83,36 +83,18 @@ @@ -83,36 +83,18 @@
83 </div> 83 </div>
84 </div> 84 </div>
85 <div class="form-group"> 85 <div class="form-group">
86 - <label class="control-label col-xs-12 col-sm-2">{:__('Vip_price')}:</label>  
87 - <div class="col-xs-12 col-sm-8">  
88 - <input id="c-vip_price" class="form-control" name="row[vip_price]" type="text" placeholder="请输入2k会员价格">  
89 - </div>  
90 - </div>  
91 - <div class="form-group">  
92 <label class="control-label col-xs-12 col-sm-2">{:__('Four_price')}:</label> 86 <label class="control-label col-xs-12 col-sm-2">{:__('Four_price')}:</label>
93 <div class="col-xs-12 col-sm-8"> 87 <div class="col-xs-12 col-sm-8">
94 <input id="c-four_price" class="form-control" name="row[four_price]" type="text" placeholder="请输入4k普通价格"> 88 <input id="c-four_price" class="form-control" name="row[four_price]" type="text" placeholder="请输入4k普通价格">
95 </div> 89 </div>
96 </div> 90 </div>
97 <div class="form-group"> 91 <div class="form-group">
98 - <label class="control-label col-xs-12 col-sm-2">{:__('Four_vipprice')}:</label>  
99 - <div class="col-xs-12 col-sm-8">  
100 - <input id="c-four_vipprice" class="form-control" name="row[four_vipprice]" type="text" placeholder="请输入4k会员价格">  
101 - </div>  
102 - </div>  
103 - <div class="form-group">  
104 <label class="control-label col-xs-12 col-sm-2">{:__('Eight_price')}:</label> 92 <label class="control-label col-xs-12 col-sm-2">{:__('Eight_price')}:</label>
105 <div class="col-xs-12 col-sm-8"> 93 <div class="col-xs-12 col-sm-8">
106 <input id="c-eight_price" class="form-control" name="row[eight_price]" type="text" placeholder="请输入8k普通价格"> 94 <input id="c-eight_price" class="form-control" name="row[eight_price]" type="text" placeholder="请输入8k普通价格">
107 </div> 95 </div>
108 </div> 96 </div>
109 <div class="form-group"> 97 <div class="form-group">
110 - <label class="control-label col-xs-12 col-sm-2">{:__('Eight_vipprice')}:</label>  
111 - <div class="col-xs-12 col-sm-8">  
112 - <input id="c-eight_vipprice" class="form-control" name="row[eight_vipprice]" type="text" placeholder="请输入8k会员价格">  
113 - </div>  
114 - </div>  
115 - <div class="form-group">  
116 <label class="control-label col-xs-12 col-sm-2">{:__('Is_recommend')}:</label> 98 <label class="control-label col-xs-12 col-sm-2">{:__('Is_recommend')}:</label>
117 <div class="col-xs-12 col-sm-8"> 99 <div class="col-xs-12 col-sm-8">
118 {:build_radios('row[is_recommend]', ['1'=>__('是'), '0 '=>__('否')])} 100 {:build_radios('row[is_recommend]', ['1'=>__('是'), '0 '=>__('否')])}
@@ -83,36 +83,18 @@ @@ -83,36 +83,18 @@
83 </div> 83 </div>
84 </div> 84 </div>
85 <div class="form-group"> 85 <div class="form-group">
86 - <label class="control-label col-xs-12 col-sm-2">{:__('Vip_price')}:</label>  
87 - <div class="col-xs-12 col-sm-8">  
88 - <input id="c-vip_price" class="form-control" name="row[vip_price]" type="text" value="{$row.vip_price}" placeholder="请输入2k会员价格">  
89 - </div>  
90 - </div>  
91 - <div class="form-group">  
92 <label class="control-label col-xs-12 col-sm-2">{:__('Four_price')}:</label> 86 <label class="control-label col-xs-12 col-sm-2">{:__('Four_price')}:</label>
93 <div class="col-xs-12 col-sm-8"> 87 <div class="col-xs-12 col-sm-8">
94 <input id="c-four_price" class="form-control" name="row[four_price]" type="text" value="{$row.four_price}" placeholder="请输入4k普通价格"> 88 <input id="c-four_price" class="form-control" name="row[four_price]" type="text" value="{$row.four_price}" placeholder="请输入4k普通价格">
95 </div> 89 </div>
96 </div> 90 </div>
97 <div class="form-group"> 91 <div class="form-group">
98 - <label class="control-label col-xs-12 col-sm-2">{:__('Four_vipprice')}:</label>  
99 - <div class="col-xs-12 col-sm-8">  
100 - <input id="c-four_vipprice" class="form-control" name="row[four_vipprice]" type="text" value="{$row.four_vipprice}" placeholder="请输入4k会员价格">  
101 - </div>  
102 - </div>  
103 - <div class="form-group">  
104 <label class="control-label col-xs-12 col-sm-2">{:__('Eight_price')}:</label> 92 <label class="control-label col-xs-12 col-sm-2">{:__('Eight_price')}:</label>
105 <div class="col-xs-12 col-sm-8"> 93 <div class="col-xs-12 col-sm-8">
106 <input id="c-eight_price" class="form-control" name="row[eight_price]" type="text" value="{$row.eight_price}" placeholder="请输入8k普通价格"> 94 <input id="c-eight_price" class="form-control" name="row[eight_price]" type="text" value="{$row.eight_price}" placeholder="请输入8k普通价格">
107 </div> 95 </div>
108 </div> 96 </div>
109 <div class="form-group"> 97 <div class="form-group">
110 - <label class="control-label col-xs-12 col-sm-2">{:__('Eight_vipprice')}:</label>  
111 - <div class="col-xs-12 col-sm-8">  
112 - <input id="c-eight_vipprice" class="form-control" name="row[eight_vipprice]" type="text" value="{$row.eight_vipprice}" placeholder="请输入8k会员价格">  
113 - </div>  
114 - </div>  
115 - <div class="form-group">  
116 <label class="control-label col-xs-12 col-sm-2">{:__('Is_recommend')}:</label> 98 <label class="control-label col-xs-12 col-sm-2">{:__('Is_recommend')}:</label>
117 <div class="col-xs-12 col-sm-8"> 99 <div class="col-xs-12 col-sm-8">
118 {:build_radios('row[is_recommend]', ['1'=>__('是'), '0'=>__('否')], $row['is_recommend'])} 100 {:build_radios('row[is_recommend]', ['1'=>__('是'), '0'=>__('否')], $row['is_recommend'])}
  1 +<?php
  2 +
  3 +namespace app\api\controller;
  4 +
  5 +use app\admin\model\PayMember;
  6 +use app\admin\model\ToBalance;
  7 +use app\common\controller\Api;
  8 +use EasyWeChat\Factory;
  9 +use function GuzzleHttp\Promise\inspect;
  10 +use think\Db;
  11 +use app\admin\model\User;
  12 +use think\Log;
  13 +use fast\Http;
  14 +use think\Validate;
  15 +use Exception;
  16 +use function EasyWeChat\Kernel\Support\generate_sign;
  17 +/**
  18 + * 支付接口
  19 + */
  20 +class Pay extends Api
  21 +{
  22 + protected $noNeedLogin = ['payMemberNotify','paySecurityNotify','payOrderNotify'];
  23 + protected $noNeedRight = ['*'];
  24 + protected $uid = '';//token存贮uid
  25 + protected $order_status = [];//订单状态
  26 + public function _initialize()
  27 + {
  28 + parent::_initialize();
  29 + $this->uid = $this->auth->getUserId();
  30 + }
  31 +
  32 + /**
  33 + * @ApiTitle (充值/支付订单)
  34 + * @ApiSummary (充值支付)
  35 + * @ApiMethod (POST)
  36 + * @ApiRoute (/api/pay/pay)
  37 + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  38 + *
  39 + * @ApiParams (name="openid", type="string", required=true, description="小程序openid")
  40 + * @ApiParams (name="num", type="inter", required=false, description="支付订单号")
  41 + *
  42 + */
  43 + public function pay(){
  44 + if($this->request->isPost()){
  45 + $openid = $this->request->post('openid');
  46 + $order_sn = $this->request->post('num');
  47 +
  48 + if(empty($openid)){
  49 + $this->error(['code'=>2,'msg'=>'openid不能为空']);
  50 + }
  51 + if($order_sn){
  52 + //支付订单
  53 + $res = Db::name('order')->where(['num'=>$order_sn,'uid'=>$this->uid])->find();
  54 + if($res){
  55 + if($res['status'] == 2){
  56 + $this->error('该订单已支付过了');
  57 + }else{
  58 + //创建支付对象
  59 + $config = config('verify.wx_pay');
  60 + $app = Factory::payment($config);
  61 + $result = $app->order->unify([
  62 + 'body' => '山东航拍',
  63 + 'out_trade_no' => $order_sn,//支付订单号
  64 + 'total_fee' => $money*100,//单位分
  65 + 'notify_url' => $notify_url, // 支付结果通知网址,如果不设置则会使用配置里的默认地址
  66 + 'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
  67 + 'openid' => $openid,
  68 + ]);
  69 + if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
  70 + $params = [
  71 + 'appId' => $config['app_id'],
  72 + 'timeStamp' => time(),
  73 + 'nonceStr' => $result['nonce_str'], // 统一下单返回的随机字符串
  74 + 'package' => 'prepay_id='.$result['prepay_id'], // 统一下单Id
  75 + 'signType' => 'MD5', // 签名方法
  76 + ];
  77 + // 注意这里用的是商户平台的Key进行二次签名
  78 + $params['paySign'] = generate_sign($params, $config['key']);
  79 + $this->success('成功',$params);
  80 + }
  81 + $this->error($result['err_code_des']);
  82 + }
  83 + }else{
  84 + $this->error('无效的订单');
  85 + }
  86 + }
  87 + }else{
  88 + $this->error('请求方式错误');
  89 + }
  90 + }
  91 +
  92 + //购买会员回调通知(无需调用)
  93 + public function payMemberNotify(){
  94 + $config = config('verify.wx_pay');
  95 + $app = Factory::payment($config);
  96 + Log::info('会员');
  97 + $response = $app->handlePaidNotify(function($message, $fail){
  98 + //return_code 表示通信状态
  99 + Log::info($message);
  100 + if ($message['return_code'] === 'SUCCESS') {
  101 +
  102 + if ($message['result_code'] === 'SUCCESS') {
  103 + //支付成功
  104 + //更新成为会员
  105 + $userModel = new User();
  106 + $userModel->where('openid',$message['openid'])->update(['member'=>1]);
  107 + //增加记录
  108 + $payMemberModel = new PayMember();
  109 + $payMemberModel->create(['openid'=>$message['openid'],'pay_order'=>$message['out_trade_no']]);
  110 + }elseif($message['result_code'] === 'FAIL') {
  111 + //支付失败
  112 + }
  113 + } else {
  114 + return $fail('通信失败,请稍后再通知我');
  115 + }
  116 + return true; // 返回处理完成
  117 + });
  118 + $response->send();
  119 + }
  120 +
  121 + //支付订单(无需调用)
  122 + public function payOrderNotify(){
  123 + $config = config('verify.wx_pay');
  124 + $app = Factory::payment($config);
  125 + $response = $app->handlePaidNotify(function($message, $fail){
  126 + //return_code 表示通信状态
  127 + if ($message['return_code'] === 'SUCCESS') {
  128 +
  129 + if ($message['result_code'] === 'SUCCESS') {
  130 + //支付成功,更新订单状态
  131 + $orderModel = new \app\admin\model\Order();
  132 + $orderModel->where(['order_sn'=>$message['out_trade_no']])->update(['status'=>1]);
  133 +
  134 + //创建订房记录
  135 + $this->auth->createHouseRecord($message['out_trade_no']);
  136 +
  137 + }elseif($message['result_code'] === 'FAIL') {
  138 + //支付失败
  139 + }
  140 + } else {
  141 + return $fail('通信失败,请稍后再通知我');
  142 + }
  143 + return true; // 返回处理完成
  144 + });
  145 + $response->send();
  146 + }
  147 +
  148 +
  149 + /**
  150 + * @ApiTitle (更新订单号(支付订单失败后调用))
  151 + * @ApiSummary (更新订单号(支付订单失败后调用))
  152 + * @ApiMethod (POST)
  153 + * @ApiRoute (/api/pay/updateOrder)
  154 + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  155 + *
  156 + * @ApiParams (name="order_sn", type="inter", required=false, description="支付订单号")
  157 + *
  158 + * @ApiReturn({
  159 + "code": 1,
  160 + "msg": "成功",
  161 + "time": "1571812329",
  162 + "data": null
  163 + })
  164 + */
  165 + public function updateOrder(){
  166 + if($this->request->isPost()){
  167 + $order_sn = $this->request->post('order_sn');
  168 +
  169 + $rule = config('verify.order_sn');
  170 + $validate = new Validate($rule['rule'],$rule['msg']);
  171 + if (!$validate->check(['order_sn'=>$order_sn])) {
  172 + $this->error($validate->getError());
  173 + }
  174 +
  175 + $orderModel = new \app\admin\model\Order();
  176 + $pay_order = $this->auth->genPayOrderSn('pay');//支付订单号
  177 + $res = $orderModel->where(['order_sn'=>$order_sn,'uid'=>$this->uid])->update(['order_sn'=>$pay_order]);
  178 + if($res){
  179 + $this->success('成功');
  180 + }else{
  181 + $this->error('失败');
  182 + }
  183 + }else{
  184 + $this->error('请求方式错误');
  185 + }
  186 + }
  187 +
  188 + /**
  189 + * @ApiTitle (提现到微信零钱)
  190 + * @ApiSummary (提现到微信零钱)
  191 + * @ApiMethod (POST)
  192 + * @ApiRoute (/api/pay/payBalance)
  193 + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  194 + *
  195 + * @ApiParams (name="openid", type="string", required=true, description="小程序openid")
  196 + * @ApiParams (name="price", type="inter", required=true, description="提现金额")
  197 + */
  198 + public function payBalance(){
  199 + if($this->request->isPost()){
  200 + $price = $this->request->post('price');
  201 + $openid = $this->request->post('openid');
  202 +
  203 + $rule = config('verify.to_balance');
  204 + $validate = new Validate($rule['rule'],$rule['msg']);
  205 + if (!$validate->check(['price'=>$price,'openid'=>$openid])) {
  206 + $this->error($validate->getError());
  207 + }
  208 +
  209 + if($price < 0.3){
  210 + $this->error('提现金额不能低于0.3元');
  211 + }
  212 +
  213 + //每天提现次数不超过三次
  214 + $count = Db::name('to_balance')->where('uid',$this->uid)->whereTime('createtime','today')->count();
  215 + if($count >= 3){
  216 + $this->error('每天提现次数不能超过3次');
  217 + }
  218 + //查询该用户钱包金额
  219 + $userModel = new User();
  220 + $user = $userModel->where(['id'=>$this->uid])->field('id,money,nickname')->find();
  221 + if($price > $user['money']){
  222 + $this->error('钱包金额不足');
  223 + }
  224 +
  225 + //创建支付对象
  226 + $config = config('verify.wx_pay');
  227 + $app = Factory::payment($config);
  228 + $balance_order = $this->auth->genPayOrderSn('balance');//提现单号
  229 + $result = $app->transfer->toBalance([
  230 + 'partner_trade_no' => $balance_order, // 商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
  231 + 'openid' => $openid,
  232 + 'check_name' => 'NO_CHECK', // NO_CHECK:不校验真实姓名, FORCE_CHECK:强校验真实姓名
  233 + 're_user_name' => '', // 如果 check_name 设置为FORCE_CHECK,则必填用户真实姓名
  234 + 'amount' => $price*100, // 企业付款金额,单位为分
  235 + 'desc' => '提现到零钱', // 企业付款操作说明信息。必填
  236 + ]);
  237 + if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
  238 + //创建提现记录
  239 + $balanceRecordModel = new ToBalance();
  240 + $data['uid'] = $this->uid;
  241 + $data['openid'] = $openid;
  242 + $data['price'] = $price;
  243 + $data['to_order'] = $result['partner_trade_no'];
  244 + $balanceRecordModel->create($data);
  245 + //更新余额表
  246 + $userModel = new User();
  247 + $userModel->where(['id'=>$this->uid])->setDec('money',$price);
  248 + $this->success('成功');
  249 + }
  250 + $this->error($result['err_code_des']);
  251 + }else{
  252 + $this->error('请求方式错误');
  253 + }
  254 + }
  255 +}
@@ -413,6 +413,10 @@ class User extends Api @@ -413,6 +413,10 @@ class User extends Api
413 "water_url"://小样视频网址 413 "water_url"://小样视频网址
414 "price"://2K价格, 414 "price"://2K价格,
415 "vip_price"://2Kvip价格, 415 "vip_price"://2Kvip价格,
  416 + "four_price"://4K价格,
  417 + "four_vipprice"://4Kvip价格,
  418 + "eight_price"://8K价格,
  419 + "eight_vipprice"://8Kvip价格,
416 "content"://图片介绍, 420 "content"://图片介绍,
417 "is_vip"://是否为会员(0否 1是) 421 "is_vip"://是否为会员(0否 1是)
418 } 422 }
@@ -432,9 +436,12 @@ class User extends Api @@ -432,9 +436,12 @@ class User extends Api
432 $this->error(['code'=>2,'msg'=>'缺少必要参数']); 436 $this->error(['code'=>2,'msg'=>'缺少必要参数']);
433 } 437 }
434 $data = Db::name('video') 438 $data = Db::name('video')
435 - ->field('id,title,thumbnail,video,price,vip_price,water_url,content') 439 + ->field('id,title,thumbnail,video,price,four_price,eight_price,water_url,content')
436 ->where('id',$pic_id) 440 ->where('id',$pic_id)
437 ->find(); 441 ->find();
  442 + $data['vip_price'] = $data['price']*0.75;
  443 + $data['four_vipprice'] = $data['four_price']*0.75;
  444 + $data['eight_vipprice'] = $data['eight_price']*0.75;
438 $data['thumbnail'] = $rule.$data['thumbnail']; 445 $data['thumbnail'] = $rule.$data['thumbnail'];
439 $data['video'] = $rule.$data['video']; 446 $data['video'] = $rule.$data['video'];
440 $data['water_url'] = $rule.$data['water_url']; 447 $data['water_url'] = $rule.$data['water_url'];
@@ -487,4 +494,116 @@ class User extends Api @@ -487,4 +494,116 @@ class User extends Api
487 $this->success('SUCCESS',$data); 494 $this->success('SUCCESS',$data);
488 } 495 }
489 496
  497 + /**
  498 + * @ApiTitle (我的)
  499 + * @ApiSummary (我的)
  500 + * @ApiMethod (POST)
  501 + * @ApiRoute (/api/user/mine)
  502 + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  503 + *
  504 + * @ApiReturn({
  505 + "code": 1,
  506 + "msg": "成功",
  507 + "time": "1571492001",
  508 + "data": {
  509 + "id": //用户ID
  510 + "nickname": //昵称,
  511 + "avatar": //头像,
  512 + "money" : //余额
  513 + "is_vip": //是否为会员(0否 1是)
  514 + }
  515 + })
  516 + */
  517 + public function mine()
  518 + {
  519 + $user_id = $this->uid;
  520 + $data = Db::name('user')
  521 + ->where('id',$user_id)
  522 + ->field('id,nickname,avatar,money,is_vip')
  523 + ->find();
  524 + $this->success('SUCCESS',$data);
  525 + }
  526 +
  527 + /**
  528 + * @ApiTitle (创建充值订单)
  529 + * @ApiSummary (创建充值订单)
  530 + * @ApiMethod (POST)
  531 + * @ApiRoute (/api/user/toporder)
  532 + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  533 + *
  534 + * @ApiParams (name="money", type="float", required=true, description="充值金额")
  535 + *
  536 + * @ApiReturn({
  537 + "code": 1,
  538 + "msg": "成功",
  539 + "time": "1571492001",
  540 + "data": {
  541 + "order_id"://订单ID
  542 + }
  543 + })
  544 + */
  545 + public function toporder()
  546 + {
  547 + $param['user_id'] = $this->uid;
  548 + $param['money'] = $this->request->post('money');
  549 + if(empty( $param['money'])){
  550 + $this->error(['code'=>2,'msg'=>'缺少必要参数']);
  551 + }elseif ( $param['money']<=0){
  552 + $this->error(['code'=>3,'msg'=>'非法操作']);
  553 + }else{
  554 + $param['createtime'] = time();
  555 + $param['num'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
  556 + $data = Db::name('toporder')
  557 + ->insertGetId($param);
  558 + if(empty($data)){
  559 + $this->error(['code'=>2,'msg'=>'sql执行失败']);
  560 + }
  561 + $this->success('SUCCESS',['order_id'=>$data]);
  562 + }
  563 +
  564 + }
  565 +
  566 + /**
  567 + * @ApiTitle (充值支付)
  568 + * @ApiSummary (充值支付)
  569 + * @ApiMethod (POST)
  570 + * @ApiRoute (/api/user/pay)
  571 + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  572 + *
  573 + * @ApiParams (name="order_id", type="inter", required=true, description="订单id")
  574 + *
  575 + * @ApiReturn({
  576 + "code": 1,
  577 + "msg": "成功",
  578 + "time": "1571492001",
  579 + })
  580 + */
  581 + public function pay()
  582 + {
  583 + $user_id = $this->uid;
  584 + $id = $this->request->post('order_id');
  585 + if(empty($id)){
  586 + $this->error(['code'=>2,'msg'=>'确实必要参数']);
  587 + }
  588 + $where['id'] = ['eq',$id];
  589 + $where['user_id'] = ['eq',$user_id];
  590 + $data = Db::name('toporder')->where($where)->find();
  591 + if(empty($data)){
  592 + $this->error(['code'=>41001,'msg'=>'数据错误']);
  593 + }
  594 + $openid = $this->getopenid();
  595 + $this->success('SUCCESS');
  596 + }
  597 +
  598 + public function getopenid()
  599 + {
  600 + $user_id = $this->uid;
  601 + $openid = Db::name('user')
  602 + ->where('id',$user_id)
  603 + ->field('openid')
  604 + ->find();
  605 +
  606 + return $openid;
  607 + }
  608 +
490 } 609 }
@@ -17,4 +17,16 @@ return [ @@ -17,4 +17,16 @@ return [
17 ] 17 ]
18 ], 18 ],
19 'path'=>'http://areial.w.brotop.cn', 19 'path'=>'http://areial.w.brotop.cn',
  20 + //微信支付配置
  21 + 'wx_pay' => [
  22 + 'app_id' => '',
  23 + 'mch_id' => '',
  24 + 'key' => '', // 支付 密钥
  25 +
  26 + // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
  27 + 'cert_path' => ROOT_PATH.'public/cert/apiclient_cert.pem', // XXX: 绝对路径!!!!
  28 + 'key_path' => ROOT_PATH.'public/cert/apiclient_key.pem', // XXX: 绝对路径!!!!
  29 +
  30 + 'notify_url' => '默认的订单回调地址', // 你也可以在下单时单独设置来想覆盖它
  31 + ],
20 ]; 32 ];
此 diff 太大无法显示。
@@ -37,11 +37,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin @@ -37,11 +37,8 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefin
37 {field: 'buy_num', title: __('Buy_num')}, 37 {field: 'buy_num', title: __('Buy_num')},
38 {field: 'click_num', title: __('Click_num')}, 38 {field: 'click_num', title: __('Click_num')},
39 {field: 'price', title: __('Price')}, 39 {field: 'price', title: __('Price')},
40 - {field: 'vip_price', title: __('Vip_price')},  
41 {field: 'four_price', title: __('Four_price')}, 40 {field: 'four_price', title: __('Four_price')},
42 - {field: 'four_vipprice', title: __('Four_vipprice')},  
43 {field: 'eight_price', title: __('Eight_price')}, 41 {field: 'eight_price', title: __('Eight_price')},
44 - {field: 'eight_vipprice', title: __('Eight_vipprice')},  
45 {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime}, 42 {field: 'createtime', title: __('Createtime'), operate:'RANGE', addclass:'datetimerange', formatter: Table.api.formatter.datetime},
46 {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} 43 {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
47 ] 44 ]