海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.4 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. <?php
  2. namespace App\Admin\Extensions\Grid;
  3. use App\Models\AdminSetting;
  4. use App\Models\MiniProgramDraft;
  5. use App\Models\MiniProgramTemplate;
  6. use Dcat\Admin\Grid\RowAction;
  7. use EasyWeChat\Factory;
  8. use Illuminate\Http\Request;
  9. /**
  10. * 获取小程序草稿,并创建模板,并保存草稿和模板列表
  11. * Class UploadMiniProgram
  12. * @package App\Admin\Extensions\Grid
  13. */
  14. class MiniProgramPull extends RowAction
  15. {
  16. protected $title = '更新列表';
  17. protected function html()
  18. {
  19. $this->appendHtmlAttribute('class', 'btn btn-primary');
  20. $this->defaultHtmlAttribute('href', 'javascript:;');
  21. return "<a {$this->formatHtmlAttributes()}>{$this->title}</a>";
  22. }
  23. /**
  24. * 更新逻辑:
  25. * 1、先获取草稿箱,并保存到数据库;
  26. * 2、如果草稿未创建过模板,通过草稿创建模板;
  27. * 3、将模板列表保存至数据库;
  28. */
  29. public function handle(Request $request)
  30. {
  31. try {
  32. $setting = AdminSetting::val(['service_appid', 'service_appsecret', 'service_token', 'service_aeskey']);
  33. $config = [
  34. 'app_id' => $setting['service_appid'],
  35. 'secret' => $setting['service_appsecret'],
  36. 'token' => $setting['service_token'],
  37. 'aes_key' => $setting['service_aeskey'],
  38. ];
  39. $openPlatform = Factory::openPlatform($config);
  40. if (empty($openPlatform['code_template'])) {
  41. return $this->response()->error('获取code_template失败');
  42. }
  43. $codeTemplate = $openPlatform['code_template'];
  44. //草稿列表
  45. $list = $codeTemplate->getDrafts();
  46. if (empty($list['draft_list']) || !is_array($list['draft_list'])) {
  47. return $this->response()->error('获取草稿箱失败或草稿箱为空');
  48. }
  49. //2021-09-26发现增加了category_list返回参数,
  50. $list['draft_list'] = array_map(function ($v) {
  51. return [
  52. "create_time" => $v['create_time'],
  53. "user_version" => $v['user_version'],
  54. "user_desc" => $v['user_desc'],
  55. "draft_id" => $v['draft_id'],
  56. "source_miniprogram_appid" => $v['source_miniprogram_appid'],
  57. "source_miniprogram" => $v['source_miniprogram'],
  58. "developer" => $v['developer'],
  59. "category_list" => isset($v['category_list']) && is_array($v['category_list']) ? json_encode($v['category_list']) : '[]',
  60. ];
  61. }, $list['draft_list']);
  62. MiniProgramDraft::insertOrIgnore($list['draft_list']);
  63. MiniProgramDraft::whereNotIn('draft_id', array_column($list['draft_list'], 'draft_id'))->delete(); //删除不存在的数据
  64. //从草稿创建模板
  65. $ids = MiniProgramDraft::query()->where('is_create_template', 0)->pluck('draft_id');
  66. foreach ($ids as $draft_id) {
  67. $res = $codeTemplate->createFromDraft($draft_id, 1); //第二个参数,0:普通模板;1:标准模板
  68. if (!isset($res['errcode'], $res['errmsg']) || $res['errcode'] != 0 || $res['errmsg'] != 'ok') {
  69. return $this->response()->error("草稿ID $draft_id 创建模板失败");
  70. } else {
  71. MiniProgramDraft::where('draft_id', $draft_id)->update(['is_create_template' => 1]);
  72. }
  73. }
  74. //模板列表
  75. $list = $codeTemplate->list();
  76. if (empty($list['template_list']) || !is_array($list['template_list'])) {
  77. return $this->response()->error('获取模板失败或模板为空');
  78. }
  79. //2021-09-26发现增加了category_list返回参数,
  80. $list['template_list'] = array_map(function ($v) {
  81. return [
  82. "create_time" => $v['create_time'],
  83. "user_version" => $v['user_version'],
  84. "user_desc" => $v['user_desc'],
  85. "template_id" => $v['template_id'],
  86. "source_miniprogram_appid" => $v['source_miniprogram_appid'],
  87. "source_miniprogram" => $v['source_miniprogram'],
  88. "developer" => $v['developer'],
  89. "template_type" => $v['template_type'],
  90. "category_list" => isset($v['category_list']) && is_array($v['category_list']) ? json_encode($v['category_list']) : '[]',
  91. "audit_scene" => $v['audit_scene'] ?? 0,
  92. "audit_status" => $v['audit_status'] ?? 0,
  93. ];
  94. }, $list['template_list']);
  95. MiniProgramTemplate::insertOrIgnore($list['template_list']);
  96. MiniProgramTemplate::whereNotIn('template_id', array_column($list['template_list'], 'template_id'))->delete(); //删除不存在的数据
  97. return $this->response()->success("更新小程序模板成功")->refresh();
  98. } catch (\Exception $e) {
  99. return $this->response()->error($e->getMessage());
  100. }
  101. }
  102. public function confirm()
  103. {
  104. return ['此操作将数据与腾讯服务器数据同步,是否继续?', ''];
  105. }
  106. }