DiyController.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. <?php
  2. namespace backend\modules\mall\controllers;
  3. use backend\modules\common\logic\DiyTemplateLogic;
  4. use common\enums\AddonsEnum;
  5. use common\enums\CurrencyEnum;
  6. use common\enums\DiyEnum;
  7. use common\enums\LevelEnum;
  8. use common\enums\StatusEnum;
  9. use common\models\common\Addons;
  10. use common\models\diy\DiyComponents;
  11. use common\models\diy\DiyComponentsData;
  12. use common\models\diy\DiyMallTemplate;
  13. use common\models\diy\DiyPage;
  14. use backend\controllers\MallController;
  15. use backend\modules\mall\services\TemplateService;
  16. use common\models\diy\DiyTemplate;
  17. use common\models\mall\MallAddons;
  18. use common\models\mall\MallHost;
  19. use common\models\user\UserLevel;
  20. use common\globals\GlobalInvoke;
  21. use common\models\goods\GoodsExtra;
  22. use \Yii;
  23. use yii\db\Exception;
  24. use yii\helpers\Json;
  25. class DiyController extends MallController
  26. {
  27. /**
  28. *
  29. * 自定义装修列表页
  30. * @return mixed|string|void
  31. */
  32. public function actionIndex()
  33. {
  34. if (Yii::$app->request->isAjax && Yii::$app->request->isGet) {
  35. $params = Yii::$app->request->get();
  36. // 检查提交的参数
  37. $res = Yii::$app->services->validate->validate($params,[
  38. [['title'], 'string'],
  39. [['title', 'page', 'limit'], 'safe'],
  40. ]);
  41. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  42. $where = [];
  43. $where[] = ['=', 'mall_id', $this->mall_id];
  44. $where[] = ['=', 'status', StatusEnum::ENABLED];
  45. // 根据名称搜索
  46. if (!empty($params['title'])) {
  47. $where[] = ['like', 'title', $params['title']];
  48. }
  49. $order = 'is_home_page desc,type desc,sort asc,id desc';
  50. $select = ['id', 'title', 'mall_id', 'template', 'is_home_page', 'type', 'created_at', 'is_show_bottom_nav'];
  51. $params = array('select' => $select, 'where' => $where, 'order' => $order, 'limit' => $params['limit']);
  52. $data = DiyPage::listPage($params, false, true);
  53. if (empty($data)) return $this->success('获取成功');
  54. // 获取模板
  55. $data['template'] = DiyEnum::template();
  56. // h5地址
  57. $h5_url = MallHost::getHost($this->mall_id, 'h5_url');
  58. $sign = $this->mall['mall_sign'];
  59. // 支付宝二维码链接
  60. $data['alipay_mini_app_id'] = null;
  61. if (MallAddons::isInstall($this->mall_id, AddonsEnum::ADDONS_NAME_ALIPAY_MCH_COUPON)) {
  62. $data['alipay_mini_app_id'] = \Yii::$app->services->setting->mall->get($this->mall_id, 'alipay_mini.app_id');
  63. }
  64. foreach ($data['list'] as $k => &$v){
  65. $tmp_url = '';
  66. if ($h5_url) {
  67. if ($v['is_home_page'] == 1) {
  68. $v['web_url'] = $h5_url .'/#'. DiyEnum::HOME_PAGE_PATH . '?sign=' . $sign;
  69. } elseif ($v['template'] == DiyEnum::USER_CENTER) {
  70. $v['web_url'] = $h5_url .'/#'. DiyEnum::USER_CENTER_PATH . '?sign=' . $sign;
  71. } else {
  72. $v['web_url'] = $h5_url .'/#'. DiyEnum::CUSTOM_PAGE_PATH . '?sign=' . $sign . '&id=' . $v['id'];
  73. }
  74. } else {
  75. $v['web_url'] = '';
  76. }
  77. if (!empty($data['alipay_mini_app_id']) && empty($v['alipay_mini_link']) && !empty($v['web_url'])) {
  78. $question_mark_index = strpos($v['web_url'], '?');
  79. if ($question_mark_index !== false) {
  80. // 有可能需要去掉&符号?
  81. $tmp_url = str_replace("sign={$sign}", '', $v['web_url']); // 去掉签名,不然生成的二维码太复杂导致低端手机无法识别二维码
  82. $tmp_url = str_replace("sign={$sign}&", '', $tmp_url); // 去掉签名,不然生成的二维码太复杂导致低端手机无法识别二维码
  83. $query_params = substr($tmp_url, $question_mark_index+1);
  84. if (!empty($query_params)) { // 如果只有sign一个参数的时候那么去掉后就有可能没有参数了
  85. $tmp_url = str_replace("?{$query_params}", "&query=" . urlencode($query_params), $tmp_url);
  86. }
  87. }
  88. $v['alipay_mini_link'] = str_replace("$h5_url/#", "alipays://platformapi/startapp?appId={$data['alipay_mini_app_id']}&page=", $tmp_url);
  89. }
  90. }
  91. $this->success('获取成功', $data);
  92. } else {
  93. return $this->render($this->action->id);
  94. }
  95. }
  96. // public function backups()
  97. // {
  98. // $groups = ['mall','common'];
  99. // $components = DiyComponents::getComponent($groups,$filter=['img-text']);
  100. // $components = DiyComponents::makeUpGroup($components,['other'=>['mall_common']]);
  101. // $components = DiyComponents::Components(['other'=>['banner','picture_box']]);
  102. // $my_components_name_arr = ['other'=>'其他'];
  103. // $components_name_arr = [
  104. // array_merge(DiyComponents::$components_name_arr,$my_components_name_arr)
  105. // ];
  106. // }
  107. /**
  108. * 编辑自定义装修
  109. * @return mixed|void
  110. */
  111. public function actionEdit()
  112. {
  113. $request = Yii::$app->request;
  114. if ($request->isAjax) {
  115. if ($request->isPost) {
  116. $params = $request->post();
  117. $res = Yii::$app->services->validate->validate($params,[
  118. [['id'], 'integer'],
  119. [['content'], 'string'],
  120. [['content'], 'required'],
  121. ['title', 'required', 'message' => '标题文字必须填写'],
  122. [['id', 'cover'], 'safe'],
  123. ]);
  124. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  125. $trans = Yii::$app->db->beginTransaction();
  126. try {
  127. // 将数组转为json字符串
  128. if (is_array($params['content'])) $params['content'] = Json::encode($params['content'],JSON_UNESCAPED_SLASHES);
  129. $params['mall_id'] = $this->mall_id;
  130. // 保存数据
  131. $res = DiyPage::setData($params);
  132. if ($res == false) throw new Exception(DiyPage::getStaticError());
  133. # 重置所有表单
  134. GlobalInvoke::exec(GlobalInvoke::DIY_EDIT_FORM, $this->mall_id,$res);
  135. # end
  136. $trans->commit();
  137. $this->success('保存成功');
  138. } catch (\Exception $e) {
  139. $trans->rollBack();
  140. \Yii::error('edit DiyController error:' . $e->getMessage());
  141. $this->error('编辑失败,msg:' . $e->getMessage());
  142. }
  143. } else {
  144. $params = $request->get();
  145. $res = Yii::$app->services->validate->validate($params,[
  146. [['id'], 'integer'],
  147. [['id'], 'safe']
  148. ]);
  149. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  150. try{
  151. $diypage = (object)[];$template = DiyEnum::CUSTOM_PAGE;
  152. if (isset($params['id'])) {
  153. // 查询页面
  154. $diypage = DiyPage::find()->where(['id' => $params['id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED])->select(['id','title', 'is_home_page','template','content','type','created_at'])->asArray()->one();
  155. if (empty($diypage))throw new \Exception("页面不存在");
  156. $template = $diypage['template'];// 获取该页面模板
  157. }
  158. // 获取商城有效的插件
  159. $valid_addons = MallAddons::getValidAddons($this->mall_id);
  160. // 根据分组获取组件
  161. $components = DiyComponents::getComponent(DiyEnum::getGroup($template), [], $valid_addons, $this->mall_id);
  162. // 获取会员等级
  163. $default_level_list[] = ['level' => 0, 'name' => '普通用户'];
  164. $member_level_list = UserLevel::getUserLevel([['mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]], [], 1,'level,name');
  165. $auth[] = [
  166. 'name' => 'member',
  167. 'title' => '会员等级',
  168. 'list' => array_merge($default_level_list, $member_level_list)
  169. ];
  170. // 获取币种
  171. if ($template == DiyEnum::USER_CENTER) {
  172. $capital = CurrencyEnum::getMap($this->mall_id);
  173. // $capital = [
  174. // ['code' => 'balance', 'title' => Yii::$app->services->setting->mall->get($this->mall_id, 'balance.balance_name') ?? '余额', 'route' => '/plugins/pages/assets/balance/index'],
  175. // ['code' => 'score', 'title' => Yii::$app->services->setting->mall->get($this->mall_id, 'score.score_name') ?? '积分', 'route' => '/plugins/pages/assets/currency/index'],
  176. // ];
  177. // // 判断是否开启优惠券插件
  178. // $coupon = MallAddons::getOne([['mall_id' => $this->mall_id, 'addons_name' => 'Coupon', 'status' => StatusEnum::ENABLED]]);
  179. // if ($coupon) $capital[] = ['code' => 'coupon', 'title' => '优惠券', 'route' => '/plugins/pages/coupon/index'];
  180. $level_sel = LevelEnum::getMap($this->mall_id);
  181. }
  182. $this->success('获取成功', compact('diypage', 'components', 'auth', 'capital','level_sel', 'valid_addons'));
  183. } catch (\Exception $e) {
  184. $this->error($e->getMessage());
  185. $this->error('获取失败,msg:' . $e->getMessage());
  186. }
  187. }
  188. } else {
  189. // 获取所有插件组件
  190. $addons_components = DiyComponents::find()->select('code,title,group,source')->where(['status' => StatusEnum::ENABLED])->andWhere(['not', ['source' => '']])->asArray()->all();
  191. return $this->render($this->action->id, ['addons_components' => $addons_components]);
  192. }
  193. }
  194. /**
  195. * 设为首页
  196. * @return mixed|void
  197. */
  198. public function actionSetHome()
  199. {
  200. $request = Yii::$app->request;
  201. if ($request->isAjax) {
  202. if ($request->isPost) {
  203. $params = $request->post();
  204. $res = Yii::$app->services->validate->validate($params,[
  205. [['id'], 'required'],
  206. [['id'], 'integer'],
  207. ]);
  208. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  209. $trans = Yii::$app->db->beginTransaction();
  210. try {
  211. // 将其他页面变成非首页
  212. DiyPage::updateAll(['is_home_page' => 0, 'template' => DiyEnum::CUSTOM_PAGE], ['mall_id' => $this->mall_id, 'type' => 1, 'status' => StatusEnum::ENABLED]);
  213. // 默认首页修改
  214. Yii::$app->db->createCommand()->update(DiyPage::tableName(), ['is_home_page' => 0], ['mall_id' => $this->mall_id, 'type' => 2])->execute();
  215. $params['is_home_page'] = 1;
  216. $params['mall_id'] = $this->mall_id;
  217. $params['template'] = DiyEnum::HOME_PAGE;
  218. // 保存数据
  219. $res = DiyPage::setData($params);
  220. if ($res == false) throw new Exception(DiyPage::getStaticError());
  221. $trans->commit();
  222. $this->success('设置成功');
  223. } catch (\Exception $e) {
  224. $trans->rollBack();
  225. \Yii::error('edit DiyController error:' . $e->getMessage());
  226. $this->error('设置失败' . $e->getMessage());
  227. }
  228. }
  229. }
  230. }
  231. /**
  232. * 设为首页
  233. * @return mixed|void
  234. */
  235. public function actionSetShowNav()
  236. {
  237. $request = Yii::$app->request;
  238. if ($request->isAjax) {
  239. if ($request->isPost) {
  240. $params = $request->post();
  241. $res = Yii::$app->services->validate->validate($params,[
  242. [['id'], 'required'],
  243. [['id'], 'integer'],
  244. ]);
  245. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  246. $page = DiyPage::findOne(['id' => $params['id'], 'mall_id' => $this->mall_id]);
  247. if (empty($page)) return $this->error('页面不存在');
  248. $page->is_show_bottom_nav = empty($page->is_show_bottom_nav) ? StatusEnum::ENABLED : StatusEnum::DISABLED;
  249. if (!$page->save()) return $this->error($page->getErrorMessage());
  250. return $this->success('操作成功');
  251. }
  252. }
  253. }
  254. /**
  255. * 复制页面
  256. * @return mixed|void
  257. */
  258. public function actionCopyPage()
  259. {
  260. $request = Yii::$app->request;
  261. if ($request->isPost) {
  262. $trans = Yii::$app->db->beginTransaction();
  263. try{
  264. $params = $request->post();
  265. $res = Yii::$app->services->validate->validate($params,[
  266. [['id'], 'required'],
  267. ]);
  268. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  269. $detail = DiyPage::findOne(['id' => $params['id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  270. if (empty($detail)) throw new \Exception("页面不存在");
  271. $detail->title = $detail->title . '-copy';
  272. $detail->is_home_page = 0;
  273. $detail->type = 1;
  274. $detail->template = DiyEnum::CUSTOM_PAGE;
  275. $diy = new DiyPage();
  276. $diy->attributes = $detail->attributes;
  277. if (!$diy->save()) throw new \Exception("复制失败:" . $diy->getErrorMessage());
  278. GlobalInvoke::exec(GlobalInvoke::DIY_COPY_FORM, $this->mall_id, $diy->toArray());
  279. // print_r($diy->toArray());exit;
  280. $trans->commit();
  281. $this->success('复制成功');
  282. } catch (\Exception $e) {
  283. $trans->rollBack();
  284. $this->error($e->getMessage());
  285. }
  286. }
  287. }
  288. /**
  289. * 装修删除
  290. * @return mixed|void
  291. */
  292. public function actionDelete()
  293. {
  294. $request = Yii::$app->request;
  295. if ($request->isPost) {
  296. try{
  297. $params = $request->post();
  298. $res = Yii::$app->services->validate->validate($params,[
  299. [['id'], 'required'],
  300. ]);
  301. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  302. $detail = DiyPage::findOne(['id' => $params['id'], 'status' => StatusEnum::ENABLED]);
  303. if (empty($detail)) throw new \Exception("页面不存在");
  304. if ($detail->is_home_page == 1) throw new \Exception("该页面是首页,暂不可删除");
  305. $detail->status = StatusEnum::DELETE;
  306. if (!$detail->save()) throw new \Exception("删除失败");
  307. GlobalInvoke::exec(GlobalInvoke::DIY_DELETE_FORM, $this->mall_id,$params);
  308. $this->success('删除成功');
  309. } catch (\Exception $e) {
  310. $this->error($e->getMessage());
  311. }
  312. }
  313. }
  314. /**
  315. * 根据标识获取对应组件的内容
  316. * @Author: lun
  317. * @DateTime: 2021/11/11 0011 14:52
  318. * @Copyright: copyright (c) 2021 广东七件事集团
  319. * @return mixed|void
  320. */
  321. public function actionGetComponentsData()
  322. {
  323. $params = Yii::$app->request->get('form');
  324. $list = Json::decode($params, true);
  325. if (empty($list)) return $this->error('请求数据为空');
  326. // 获取数据
  327. $data = DiyComponentsData::getCompentsData($this->mall_id, $list);
  328. return $this->success('操作成功',$data);
  329. }
  330. /**
  331. * 模板市场列表
  332. * @Author: lun
  333. * @DateTime: 2021/12/14 0014 17:47
  334. * @Copyright: copyright (c) 2021 广东七件事集团
  335. */
  336. public function actionTemplateMarket()
  337. {
  338. if(Yii::$app->request->isAjax){
  339. if (Yii::$app->request->isGet) {
  340. $params = Yii::$app->request->get();
  341. // 检查提交的参数
  342. $res = Yii::$app->services->validate->validate($params,[
  343. [['route_type'], 'required'],
  344. [['title','template','route_type'], 'string'],
  345. [['title', 'page', 'limit'], 'safe'],
  346. [['cate_id','mid'], 'integer'],
  347. ]);
  348. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  349. $data = DiyTemplateLogic::TemplateMarket($params);
  350. $this->success('获取成功', $data);
  351. }
  352. } else {
  353. return $this->render("@backend/modules/admin/views/template/mall.php", ['mid' => $this->mall_id]);
  354. }
  355. }
  356. /**
  357. * 我的模板列表
  358. * @Author: lun
  359. * @DateTime: 2021/12/14 0014 17:47
  360. * @Copyright: copyright (c) 2021 广东七件事集团
  361. */
  362. public function actionMyTemplate()
  363. {
  364. $request = Yii::$app->request;
  365. if ($request->isAjax && $request->isGet) {
  366. $params = $request->get();
  367. // 检查提交的参数
  368. $res = Yii::$app->services->validate->validate($params,[
  369. [['route_type'], 'required'],
  370. [['title','template','route_type'], 'string'],
  371. [['title', 'page', 'limit'], 'safe'],
  372. [['cate_id'], 'integer'],
  373. ]);
  374. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  375. // 条件组合
  376. $where = [];
  377. $where[] = ['=', 'mall_id', $this->mall_id];
  378. !empty($params['cate_id']) && $where[] = ['=', 'cate_id', $params['cate_id']];
  379. !empty($params['template']) && $where[] = ['=', 'template', $params['template']];
  380. !empty($params['title']) && $where[] = ['like', 'title', $params['title']];
  381. $where[] = ['=', 'status', [StatusEnum::ENABLED, 2]];
  382. $order = 'created_at desc';
  383. $select = ['id','title','cate_id','template','created_at','cover','status','expire_time'];
  384. $list_params = array('select' => $select,'where' => $where, 'order' => $order, 'limit' => $params['limit'] ?? 20);
  385. $list = DiyMallTemplate::listPage($list_params, false, true);
  386. if (empty($list)) return $this->success('获取成功');
  387. $data['list'] = $list;
  388. // 获取模板
  389. $data['cate_arr'] = DiyEnum::getTemplateCate();
  390. $data['template_type'] = DiyEnum::template();
  391. return $this->success('获取成功', $data);
  392. }
  393. return $this->render("@backend/modules/admin/views/template/mall.php");
  394. }
  395. /**
  396. * 购买模板
  397. * @Author: lun
  398. * @DateTime: 2021/12/14 0014 18:05
  399. * @Copyright: copyright (c) 2021 广东七件事集团
  400. */
  401. public function actionBuyTemplate()
  402. {
  403. $request = Yii::$app->request;
  404. if ($request->isAjax && $request->isPost) {
  405. try{
  406. $params = $request->post();
  407. $res = Yii::$app->services->validate->validate($params,[
  408. [['template_id','duration'], 'required'],
  409. [['template_id','duration'], 'integer'],
  410. ]);
  411. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  412. $detail = DiyTemplate::findOne(['id' => $params['template_id'], 'is_on_sale' => StatusEnum::ENABLED,'status' => StatusEnum::ENABLED]);
  413. if (empty($detail)) throw new \Exception("模板不存在");
  414. // 设置过期时间
  415. $expire_time = $params['duration'] == -1 ? -1 : strtotime("+{$params['duration']} month");
  416. $data['mall_id'] = $this->mall_id;
  417. $data['title'] = $detail->title;
  418. $data['cate_id'] = $detail->cate_id;
  419. $data['template_id'] = $detail->id;
  420. $data['template'] = $detail->template;
  421. $data['cover'] = $detail->cover;
  422. $data['content'] = $detail->content;
  423. $data['expire_time'] = $expire_time;// TODO 后期改为可购买
  424. // 保存数据
  425. $res = DiyMallTemplate::setData($data);
  426. if ($res == false) throw new Exception(DiyMallTemplate::getStaticError());
  427. $this->success('购买成功');
  428. } catch (\Exception $e) {
  429. $this->error('购买失败:' . $e->getMessage());
  430. }
  431. }
  432. }
  433. /**
  434. * 使用该模板
  435. * @Author: lun
  436. * @DateTime: 2021/12/14 0014 18:05
  437. * @Copyright: copyright (c) 2021 广东七件事集团
  438. */
  439. public function actionUseTemplate()
  440. {
  441. $request = Yii::$app->request;
  442. if ($request->isAjax && $request->isPost) {
  443. try{
  444. $params = $request->post();
  445. $res = Yii::$app->services->validate->validate($params,[
  446. [['id'], 'required'],[['id'], 'integer']
  447. ]);
  448. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  449. $detail = DiyMallTemplate::findOne(['id' => $params['id'], 'mall_id' => $this->mall_id, 'status' => StatusEnum::ENABLED]);
  450. if (empty($detail)) throw new \Exception("模板不存在");
  451. if ($detail->expire_time != StatusEnum::DELETE && $detail->expire_time < time()) throw new \Exception("模板已过期");
  452. $data['mall_id'] = $this->mall_id;
  453. $data['title'] = $detail->title;
  454. $data['mall_template_id'] = $detail->id;
  455. $data['template_id'] = $detail->template_id;
  456. $data['cover'] = $detail->cover;
  457. $data['content'] = $detail->content;
  458. // 保存数据
  459. $res = DiyPage::setData($data);
  460. if ($res == false) throw new Exception(DiyPage::getStaticError());
  461. $this->success('使用成功', $res['id']);
  462. } catch (\Exception $e) {
  463. $this->error('使用模板失败:' . $e->getMessage());
  464. }
  465. }
  466. }
  467. public function actionGetAddonsFields()
  468. {
  469. $request = Yii::$app->request;
  470. if ($request->isAjax) {
  471. if ($request->isGet) {
  472. $type = $request->get('type');
  473. $fields = GoodsExtra::getExtraFields($this->mall_id, $type);
  474. return $this->success('success', $fields);
  475. }
  476. }
  477. }
  478. /**
  479. * 创建订单
  480. *
  481. * @param int $id
  482. * @param int $index
  483. * @return string
  484. */
  485. public function actionCreateOrder(int $id, int $index)
  486. {
  487. $service = new TemplateService(['mall_id' => $this->mall_id]);
  488. $id = $service->createOrder($id, $index);
  489. return $id
  490. ? $this->success('ok', ['id' => $id])
  491. : $this->error($service->getError());
  492. }
  493. /**
  494. * 支付
  495. *
  496. * @param integer $id
  497. * @return string
  498. */
  499. public function actionPay(int $id)
  500. {
  501. $service = new TemplateService(['mall_id' => $this->mall_id]);
  502. $data = $service->getPayData($id);
  503. return $data
  504. ? $this->success('ok', $data)
  505. : $this->error($service->getError());
  506. }
  507. /**
  508. * 支付完成
  509. *
  510. * @return string
  511. */
  512. public function actionPaid()
  513. {
  514. return $this->render($this->action->id);
  515. }
  516. }