| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | <?phpnamespace app\admin\controller\weixin;use app\common\controller\Backend;use addons\weixin\library\WechatService;use Exception;use think\Db;use think\exception\PDOException;use think\exception\ValidateException;/** * 微信菜单  控制器 * Class Menus * @package app\admin\controller\wechat */class Menus extends Backend{    protected $wechatcfg = null;    public function _initialize()    {        parent::_initialize();        $this->wechatcfg = Db::name('weixin_cache')->where('key', 'wechat_menus')->value('result');        if (empty($this->wechatcfg)) {            Db::name('weixin_cache')->insert([                'result' => json_encode([], JSON_UNESCAPED_UNICODE), 'add_time' => time(), 'key' => 'wechat_menus'            ]);        }    }    public function index()    {        if (empty($this->wechatcfg) || $this->wechatcfg == '[]') {            try {                $ret = WechatService::menuService()->list();                $this->wechatcfg = json_encode($ret['menu']['button'], JSON_UNESCAPED_UNICODE);                Db::name('weixin_cache')->where(['key' => 'wechat_menus'])->update([                    'result' => $this->wechatcfg, 'add_time' => time()                ]);            } catch (\Exception $e) {                //$this->error($e->getMessage());            }        }        $this->assign('menu', (array)json_decode($this->wechatcfg, true));        return $this->fetch();    }    /**     * 修改     */    public function edit($ids = null)    {        $menu = $this->request->post("menu");        $menu = (array)json_decode($menu, true);        foreach ($menu as $index => &$item) {            if (isset($item['sub_button'])) {                foreach ($item['sub_button'] as &$subitem) {                    if ($subitem['type'] == 'view') {                        $allowFields = ['type', 'name', 'url'];                        $subitem = ['type' => $subitem['type'], 'name' => $subitem['name'], 'url' => $subitem['url']];                    } else {                        if ($subitem['type'] == 'miniprogram') {                            $allowFields = ['type', 'name', 'url', 'appid', 'pagepath'];                            $subitem = [                                'type' => $subitem['type'], 'name' => $subitem['name'], 'url' => $subitem['url'],                                'appid' => $subitem['appid'], 'pagepath' => $subitem['pagepath']                            ];                        } else {                            $allowFields = ['type', 'name', 'key'];                            $subitem = [                                'type' => $subitem['type'], 'name' => $subitem['name'], 'key' => $subitem['key']                            ];                        }                    }                    $subitem = array_intersect_key($subitem, array_flip($allowFields));                }            } else {                if ($item['type'] == 'view') {                    $allowFields = ['type', 'name', 'url'];                } else {                    if ($item['type'] == 'miniprogram') {                        $allowFields = ['type', 'name', 'url', 'appid', 'pagepath'];                    } else {                        $allowFields = ['type', 'name', 'key'];                    }                }                $item = array_intersect_key($item, array_flip($allowFields));            }        }        try {            Db::name('weixin_cache')->where('key', 'wechat_menus')->update([                'result' => json_encode($menu, JSON_UNESCAPED_UNICODE), 'add_time' => time()            ]);        } catch (\Exception $e) {            $this->error($e->getMessage());        }        $this->success('修改成功!');    }    /**     * 同步     */    public function sync()    {        $hasError = false;        $menu = (array)json_decode($this->wechatcfg, true);        foreach ($menu as $k => $v) {            if (isset($v['sub_button'])) {                if (empty($v['sub_button'])) {                    unset($menu[$k]['sub_button']);                    continue;                }                foreach ($v['sub_button'] as $m => $n) {                    if ($n['type'] == 'click' && isset($n['key']) && !$n['key']) {                        $hasError = true;                        break 2;                    }                }            } else {                if ($v['type'] == 'click' && isset($v['key']) && !$v['key']) {                    $hasError = true;                    break;                }            }        }        if (!$hasError) {            try {                WechatService::menuService()->delete();                WechatService::menuService()->create($menu);            } catch (Exception $e) {                $this->error($e->getMessage());            }        } else {            $this->error(__('Invalid parameters'));        }        $this->success('同步成功!');    }}
 |