* Date: 2018-4-3 */ namespace app\admin\controller; use think\Db; use think\Page; class Canal extends Base { public function _initialize(){ parent::_initialize(); } public function conf_api() { if (IS_AJAX_POST) { $data = tpSetting("OpenMinicode.conf", [], $this->main_lang); $data = json_decode($data, true); empty($data) && $data = []; $post = input('post.'); // if (isset($post['apikey'])) { // unset($post['apikey']); // } if ($post['apikey'] != $post['old_apikey']) { $post['apikey_uptime'] = getTime(); } $data = array_merge($data, $post); tpSetting('OpenMinicode', ['conf' => json_encode($data)], $this->main_lang); $this->success("操作成功"); } // 同步微信配置 if (is_dir('./weapp/OpenMinicode/')) { $admin_logic_1649404323 = tpSetting('syn.admin_logic_1649404323', [], 'cn'); if (empty($admin_logic_1649404323)) { $minicode = Db::name('weapp')->where('code', 'OpenMinicode')->value('data'); $minicode = json_decode($minicode, true); if (!empty($minicode['appid'])) { $data = [ 'appid' => $minicode['appid'], 'appsecret' => $minicode['secret'], 'mchid' => '', 'apikey' => '', ]; tpSetting('OpenMinicode', ['conf_weixin' => json_encode($data)], $this->main_lang); } tpSetting('syn', ['admin_logic_1649404323'=>1], 'cn'); } } $data = tpSetting("OpenMinicode.conf", [], $this->main_lang); if (empty($data)) { $data = []; $data['apiopen'] = 0; $data['apiverify'] = 0; $data['apikey'] = get_rand_str(32, 0, 1); tpSetting('OpenMinicode', ['conf' => json_encode($data)], $this->main_lang); } else { $data = json_decode($data, true); } $this->assign('data', $data); //微信信息 $weixin_data = tpSetting("OpenMinicode.conf_weixin", [], $this->main_lang); $weixin_data = json_decode($weixin_data, true); $this->assign('weixin_data', $weixin_data); // 小程序码 $weixin_qrcodeurl = ""; if (!empty($weixin_data['appid'])) { $filepath = UPLOAD_PATH."allimg/20220515/wx-{$weixin_data['appid']}.png"; if (is_file($filepath)) { $weixin_qrcodeurl = "{$this->root_dir}/".$filepath; } } $this->assign('weixin_qrcodeurl', $weixin_qrcodeurl); //百度信息 $baidu_data = tpSetting("OpenMinicode.conf_baidu", [], $this->main_lang); $baidu_data = json_decode($baidu_data, true); $this->assign('baidu_data', $baidu_data); // 小程序码 $baidu_qrcodeurl = ""; if (!empty($baidu_data['appid'])) { $filepath = UPLOAD_PATH."allimg/20220515/bd-{$baidu_data['appid']}.png"; if (is_file($filepath)) { $baidu_qrcodeurl = "{$this->root_dir}/".$filepath; } } $this->assign('baidu_qrcodeurl', $baidu_qrcodeurl); // 抖音信息 $toutiao_data = tpSetting("OpenMinicode.conf_toutiao", [], $this->main_lang); $toutiao_data = !empty($toutiao_data) ? json_decode($toutiao_data, true) : []; $this->assign('toutiao_data', $toutiao_data); return $this->fetch(); } /** * 重置API接口密钥 * @return [type] [description] */ public function reset_apikey() { if (IS_AJAX_POST) { $data = tpSetting("OpenMinicode.conf", [], $this->main_lang); $data = json_decode($data, true); empty($data) && $data = []; $apikey = get_rand_str(32, 0, 1); $data['apikey'] = $apikey; // tpSetting('OpenMinicode', ['conf' => json_encode($data)], $this->main_lang); $this->success("重置成功", null, ['apikey'=>$apikey]); } } /** * 微信小程序配置 * @return [type] [description] */ public function conf_weixin() { if (IS_AJAX_POST) { $post = input('post.'); $appid = !empty($post['appid']) ? trim($post['appid']) : trim($post['weixin_appid']); $appsecret = !empty($post['appsecret']) ? trim($post['appsecret']) : trim($post['weixin_appsecret']); $mchid = !empty($post['mchid']) ? trim($post['mchid']) : trim($post['weixin_mchid']); $apikey = !empty($post['apikey']) ? trim($post['apikey']) : trim($post['weixin_apikey']); if (!empty($appid) || !empty($appsecret)) { if (empty($appid)) { $this->error('AppID不能为空!'); } if (empty($appsecret)) { $this->error('AppSecret不能为空!'); } $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; $response = httpRequest($url); $params = json_decode($response, true); if (!empty($params['errcode'])) { if ($params['errcode'] == 40164) { preg_match_all('#(\d{1,3}\.){3}\d{1,3}#i', $params['errmsg'], $matches); $ip = !empty($matches[0][0]) ? $matches[0][0] : ''; $ipTips = "请将IP:{$ip} 加入微信小程序的IP白名单里!"; $this->error($ipTips); } else { $this->error($params['errmsg']); } } if (!empty($appid) && !empty($mchid) && !empty($apikey)) { $logic = new \app\api\logic\v1\ApiLogic; $returnData = $logic->GetWechatAppletsPay($appid, $mchid, $apikey); if (empty($returnData['code'])) { $this->error($returnData['msg']); } } } $data = [ 'appid' => $appid, 'appsecret' => $appsecret, 'mchid' => $mchid, 'apikey' => $apikey, ]; tpSetting('OpenMinicode', ['conf_weixin' => json_encode($data)], $this->main_lang); $this->success("操作成功"); } $data = tpSetting("OpenMinicode.conf_weixin", [], $this->main_lang); $data = json_decode($data, true); $this->assign('data', $data); // 小程序码 $qrcodeurl = ""; if (!empty($data['appid'])) { $filepath = UPLOAD_PATH."allimg/20220515/wx-{$data['appid']}.png"; if (is_file($filepath)) { $qrcodeurl = "{$this->root_dir}/".$filepath; } } $this->assign('qrcodeurl', $qrcodeurl); return $this->fetch(); } /** * 获取微信小程序码 * @return [type] [description] */ public function ajax_get_weixin_qrcode() { $data = tpSetting("OpenMinicode.conf_weixin", [], $this->main_lang); $data = json_decode($data, true); $appid = !empty($data['appid']) ? $data['appid'] : ''; $appsecret = !empty($data['appsecret']) ? $data['appsecret'] : ''; if (!empty($appid) && !empty($appsecret)) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; $response = httpRequest($url); $params = json_decode($response, true); if (isset($params['access_token'])) { $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$params['access_token']; $post_data = array( "scene" => 'test', "width" => 280, ); $response = httpRequest($url, 'POST', json_encode($post_data, JSON_UNESCAPED_UNICODE)); $params = json_decode($response,true); if (is_array($params) || $response === false) { $msg = !empty($params['errmsg']) ? $params['errmsg'] : '可能没发布小程序'; $this->error($msg); } else { $qrcodeurl = UPLOAD_PATH.'allimg/20220515'; tp_mkdir($qrcodeurl); $qrcodeurl = $qrcodeurl."/wx-{$appid}.png"; if (@file_put_contents($qrcodeurl, $response)){ $qrcodeurl = $this->root_dir.'/'.$qrcodeurl; $this->success('生成小程序码成功', null, ['qrcodeurl'=>$qrcodeurl]); } else { $this->error('生成小程序码失败'); } } } } $this->error('不存在信息'); } /** * 百度小程序配置 * @return [type] [description] */ public function conf_baidu() { if (IS_AJAX_POST) { $post = input('post.'); $appid = !empty($post['appid']) ? trim($post['appid']) : trim($post['baidu_appid']); $appkey = !empty($post['appkey']) ? trim($post['appkey']) : trim($post['baidu_appkey']); $appsecret = !empty($post['appsecret']) ? trim($post['appsecret']) : trim($post['baidu_appsecret']); if (!empty($appid) || !empty($appkey) || !empty($appsecret)) { if (empty($appid)) { $this->error('AppID不能为空!'); } if (empty($appkey)) { $this->error('AppKey不能为空!'); } if (empty($appsecret)) { $this->error('AppSecret不能为空!'); } $url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={$appkey}&client_secret={$appsecret}&scope=smartapp_snsapi_base"; $response = httpRequest($url); $params = json_decode($response, true); if (!isset($params['access_token'])) { $this->error('AppID或AppSecret不正确!'); } } $data = [ 'appid' => $appid, 'appkey' => $appkey, 'appsecret' => $appsecret, ]; tpSetting('OpenMinicode', ['conf_baidu' => json_encode($data)], $this->main_lang); $this->success("操作成功"); } $data = tpSetting("OpenMinicode.conf_baidu", [], $this->main_lang); $data = json_decode($data, true); $this->assign('data', $data); // 小程序码 $qrcodeurl = ""; if (!empty($data['appid'])) { $filepath = UPLOAD_PATH."allimg/20220515/bd-{$data['appid']}.png"; if (is_file($filepath)) { $qrcodeurl = "{$this->root_dir}/".$filepath; } } $this->assign('qrcodeurl', $qrcodeurl); return $this->fetch(); } /** * 获取百度小程序码 * @return [type] [description] */ public function ajax_get_baidu_qrcode() { $data = tpSetting("OpenMinicode.conf_baidu", [], $this->main_lang); $data = json_decode($data, true); $appid = !empty($data['appid']) ? $data['appid'] : ''; $appkey = !empty($data['appkey']) ? $data['appkey'] : ''; $appsecret = !empty($data['appsecret']) ? $data['appsecret'] : ''; if (!empty($appkey) && !empty($appsecret)) { $url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id={$appkey}&client_secret={$appsecret}&scope=smartapp_snsapi_base"; $response = httpRequest($url); $params = json_decode($response, true); if (isset($params['access_token'])) { $url = "https://openapi.baidu.com/rest/2.0/smartapp/qrcode/getv2"; $post_data = array( "access_token" => $params['access_token'], ); $response = httpRequest($url, 'POST', $post_data); $params = json_decode($response,true); if (!isset($params['data']['base64_str'])) { $msg = !empty($params['errmsg']) ? $params['errmsg'] : '可能没发布小程序'; $this->error($msg); } else { $qrcodeurl = UPLOAD_PATH.'allimg/20220515'; tp_mkdir($qrcodeurl); $qrcodeurl = $qrcodeurl."/bd-{$appid}.png"; if (@file_put_contents($qrcodeurl, base64_decode($params['data']['base64_str']))){ $qrcodeurl = $this->root_dir.'/'.$qrcodeurl; $this->success('生成小程序码成功', null, ['qrcodeurl'=>$qrcodeurl]); } else { $this->error('生成小程序码失败'); } } } } $this->error('不存在信息'); } /** * 微信公众号配置 * @return [type] [description] */ public function conf_wechat() { if (IS_AJAX_POST) { $post = input('post.'); $appid = trim($post['appid']); $appsecret = trim($post['appsecret']); if (!empty($appid) || !empty($appsecret)) { if (empty($appid)) { $this->error('AppID不能为空!'); } if (empty($appsecret)) { $this->error('AppSecret不能为空!'); } /*$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}"; $response = httpRequest($url); $params = json_decode($response, true); if (!isset($params['access_token'])) { $wechat_code = config('error_code.wechat'); $msg = !empty($wechat_code[$params['errcode']]) ? $wechat_code[$params['errcode']] : $params['errmsg']; $this->error($msg); }*/ } $data = [ 'appid' => $appid, 'appsecret' => $appsecret, ]; // 兼容老数据的功能,同步保存一份到以前配置里 $wechat_login_config = $this->usersConfig['wechat_login_config']; $login_config = unserialize($wechat_login_config); $data['wechat_name'] = !empty($login_config['wechat_name']) ? trim($login_config['wechat_name']) : ''; $data['wechat_pic'] = !empty($login_config['wechat_pic']) ? trim($login_config['wechat_pic']) : ''; getUsersConfigData('wechat', ['wechat_login_config'=>serialize($data)]); tpSetting('OpenMinicode', ['conf_wechat' => json_encode($data)], $this->main_lang); $this->success("操作成功"); } $data = tpSetting("OpenMinicode.conf_wechat", [], $this->main_lang); if (empty($data)) { $wechat_login_config = getUsersConfigData('wechat.wechat_login_config'); $login_config = unserialize($wechat_login_config); if (!empty($login_config)) { $data = []; $data['appid'] = !empty($login_config['appid']) ? trim($login_config['appid']) : ''; $data['appsecret'] = !empty($login_config['appsecret']) ? trim($login_config['appsecret']) : ''; $data['wechat_name'] = !empty($login_config['wechat_name']) ? trim($login_config['wechat_name']) : ''; $data['wechat_pic'] = !empty($login_config['wechat_pic']) ? trim($login_config['wechat_pic']) : ''; tpSetting('OpenMinicode', ['conf_wechat' => json_encode($data)], $this->main_lang); } } else { $data = json_decode($data, true); } $this->assign('data', $data); /*微站点配置*/ $login = !empty($this->usersConfig['wechat_login_config']) ? unserialize($this->usersConfig['wechat_login_config']) : []; $this->assign('login', $login); /* END */ /*验证IP是否加入白名单中*/ $ipTips = ''; if (!empty($data['appid']) && !empty($data['appsecret'])) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$data['appid']}&secret={$data['appsecret']}"; $res = json_decode(httpRequest($url), true); if (!empty($res['errcode'])) { if ($res['errcode'] == 40164) { preg_match_all('#(\d{1,3}\.){3}\d{1,3}#i', $res['errmsg'], $matches); $ip = !empty($matches[0][0]) ? $matches[0][0] : ''; $ipTips = "请将IP:{$ip} 加入微信公众号的IP白名单里,具体点击查看教程"; } else { $ipTips = "{$res['errmsg']}"; } } } $this->assign('ipTips', $ipTips); /*--end*/ return $this->fetch(); } // 头条(抖音)配置 public function conf_toutiao() { if (IS_AJAX_POST) { $post = input('post.'); $salt = !empty($post['salt']) ? trim($post['salt']) : trim($post['toutiao_salt']); $appid = !empty($post['appid']) ? trim($post['appid']) : trim($post['toutiao_appid']); $secret = !empty($post['appsecret']) ? trim($post['appsecret']) : trim($post['toutiao_appsecret']); if (empty($appid)) $this->error('AppID不能为空!'); if (empty($secret)) $this->error('AppSecret不能为空!'); $params = getToutiaoAccessToken($appid, $secret, $salt, true); if (empty($params['access_token'])) $this->error('AppID或AppSecret不正确!'); $this->success("操作成功"); } $this->error('操作失败,请刷新重试'); } /** * 启用、关闭 开放API * @return [type] [description] */ public function ajax_save_apiopen() { if (IS_AJAX_POST) { $apiopen = input('post.open_value/d'); $data = tpSetting("OpenMinicode.conf", [], $this->main_lang); $data = json_decode($data, true); empty($data) && $data = []; $data['apiopen'] = $apiopen; tpSetting('OpenMinicode', ['conf' => json_encode($data)], $this->main_lang); $this->success('操作成功'); } } }