dever 6 years ago
parent
commit
0e9ab52176
5 changed files with 57 additions and 245 deletions
  1. 0 6
      applet/config/base.php
  2. 0 6
      config/base.php
  3. 0 220
      config/env/localhost/wechat.php
  4. 2 2
      main/database/project.php
  5. 55 11
      main/lib/Wechat.php

+ 0 - 6
applet/config/base.php

@@ -7,10 +7,4 @@ $config['base'] = array
 	'top' => 'main/project_id-3',
 );
 
-# 模板配置
-$config['template'] = array
-(
-	
-);
-
 return $config;

+ 0 - 6
config/base.php

@@ -19,10 +19,4 @@ $config['base'] = array
 	),
 );
 
-# 模板配置
-$config['template'] = array
-(
-	
-);
-
 return $config;

+ 0 - 220
config/env/localhost/wechat.php

@@ -1,73 +1,8 @@
 <?php
-# 集成项目的大部分配置,此为默认设置。环境不同,以下的配置也有可能不同,可以根据项目名建立配置文件
-
-# 基本配置
-$config['base'] = array
-(
-	# 项目部署的相对路径(部署在服务器的根目录,如果不定义DEVER_PROJECT_NAME,则本项必须启用并有效)
-	'path' => DIRECTORY_SEPARATOR . 'workspace' . DIRECTORY_SEPARATOR,
-
-	# 访问assets目录的物理路径
-	'assets' => DEVER_APP_PATH . 'assets' . DIRECTORY_SEPARATOR,
-
-	# 访问data目录的物理路径
-	'data' 	=> DEVER_PROJECT_PATH . 'data' . DIRECTORY_SEPARATOR,
-
-	# 访问当前项目目录的物理路径,如果项目和dever类库在一个目录中,则为DEVER_PATH,如果不在,则为DEVER_APP_PATH,当然也可随意更改,这里目前只影响合并操作(merge)
-	'workspace' => DEVER_APP_PATH,
-	
-	# 定义api的token明文,如果和其他业务有合作,建议使用系统自带的接口api,自带加密解密程序。
-	'token' => 'dever_api_2016',
-	
-	# 是否启用nocache,如果是互动类的项目且主域增加了cdn,建议开启
-	'clearHeaderCache' => false,
-
-	# api文档生成是否开启,开启后,将会根据访问来生成文档。生产环境建议禁止
-	'apiDoc' => true,
-	# api日志是否开启,开启后,将会记录所有带有_api后缀方法的请求参数和响应参数
-	'apiLog' => false,
-
-	# 定义自动转为api的目录,可以将该目录下的所有类的公共方法,都转为可以访问的api,开启该功能可能有安全性问题。
-	'apiOpenPath' => 'src',
-
-	# 启用后,将会根据api目录下的配置文件自动定位api
-	//'apiConfig' => true,
-	
-	# 开启用户触发cron,主要用于无法加到系统计划任务的虚拟主机,必须安装manage组件,谨慎开启,会稍微影响程序执行效率
-	//'cron' => true,
-);
-
-# 模板配置
-$config['template'] = array
-(
-	# 是否启用静态资源域名动态化,启用之后,静态资源的域名将动态加载,适合使用多个域名或publish启用
-	'domain' => true,
-
-	# 是否开启强制刷新页面缓存
-	'shell' => 'temp',
-	
-	# 是否开启手动更改模板名称,允许通过$_GET的方式来更改当前模板,值为$_GET的key值,默认关闭
-	//'name' => 'template',
-
-	# publish 是否发布,此项开启后,系统不会检测service(意味着不用将service打包上线),适合生产环境,并能对代码起到一定的加密保护。
-	//'publish' => true,
-);
 
 # 数据库配置
 $config['database'] = array
 (
-	# database 中的reuqest的兼容定义,如果启用了该选项,需要自行开发database/compatible目录下相对应的数据表文件中的request方法。
-	//'compatible' => 'model',
-
-	# 是否开启sql自动优化,将sql中的select * 转换为 select a,b形式,将sql中的where条件按照索引从左到右自动排序,必须打开上述的opt选项,数据量大时建议打开。
-	//'sql' => true,
-
-	# 关闭自助建表,生产环境建议开启,开启之后无法对数据表结构进行更新操作
-	//'create' => true,
-
-	# 是否开启mysql自助优化功能,开启后,会记录所有where条件和order的字段,可以方便的在后台进行分析、增加索引,必须安装manage组件
-	'opt' => true,
-
 	# 默认数据库配置
 	'default' => array
 	(
@@ -82,161 +17,6 @@ $config['database'] = array
 		'password' => '123456',
 		'charset' => 'utf8',
 	),
-
-	'mongo' => array
-	(
-		'type' => 'mongo',
-		'host' => 'server-mongodb:27017',
-		'database' => 'dever',
-		'username' => 'root',
-		'password' => '123456',
-		'charset' => 'utf8',
-	),
-);
-
-# 缓存配置
-$config['cache'] = array
-(
-	# 启用mysql数据库缓存,这个缓存是根据表名自动生成,dever::load形式和service的all、one形式均自动支持,无需手动添加
-	'mysql' => 0,
-	# 启用页面缓存 会根据当前的url来生成缓存,相当于页面静态化。
-	'html' => 0,
-	# 启用数据级别缓存 这个缓存是程序员自定义的:Dever::cache('name', 'value', 3600);
-	'data' => 3600,
-	# 启用load加载器缓存,一般不加载
-	'load' => 0,
-	# 启用load加载器的远程加载缓存
-	'curl' => 3600,
-
-	# 缓存精细控制,可以根据缓存的key(mysql为表名、service为小写类名,规则是模糊匹配),来控制每一条缓存
-	'loadKey' => array
-	(
-		# 定义缓存名为auth.data的缓存时间
-		'auth.data' => 200,
-	),
-	
-	# 缓存清理的参数名,请通过shell=clearcache执行
-	'shell' => 'clearcache',
-
-	# 是否启用key失效时间记录,启用之后,将会记录每个key的失效时间
-	'expire' => true,
-
-	# 缓存类型
-	'type' => 'memcache',//memcache、redis
-
-	# 缓存保存方式,支持多个数据源、多台缓存服务器
-	'store' => array
-	(
-		/*
-		array
-		(
-			'host' => 'server_memcached',
-			'port' => '11211',
-			'weight' => 100,
-		),
-
-		array
-		(
-			'host' => 'server_memcached',
-			'port' => '11212',
-			'weight' => 100,
-		),
-		*/
-	),
 );
 
-# debug配置
-$config['debug'] = array
-(
-	# 开启错误提示 生产环境建议禁止
-	'error' => true,
-	
-	# 错误日志记录,为空则不开启,为数组则为socket等服务
-	'log' => array('type' => 'file', 'host' => 'host', 'port' => 'port'),
-	# 是否开启记录超时时间,单位为秒
-	'overtime' => 3,
-
-	# 开始访问报告
-	# 生产环境建议禁止或添加ip限制,多个ip用逗号隔开
-	# 如禁止,值为false,下述shell也将失效
-	# 值为2,则开启强制模式,任何输出都将打印debug
-	'request' => Dever::ip(),
-
-	# 设定打印访问报告的指令
-	'shell' => 'debug',
-	# 以上指令,请通过&shell=debug来执行,如果你想设置断点或者打印当前业务逻辑下的sql,请直接用Dever::debug();打印数据
-
-);
-$local = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost';
-# 本地可用这个
-$host = 'http://'.$local . '/';
-
-# 定义assets的域名
-$assets = DEVER_APP_HOST . 'assets/';
-if (DEVER_APP_NAME == 'manage') {
-	$assets = $host . 'dever_package/manage/assets/';
-}
-
-# host 设置
-$config['host'] = array
-(
-	# 跟域名
-	'base' 	=> DEVER_APP_HOST,
-
-	# cookie 域名
-	'cookie' => '',
-	
-	# assets网络路径,会自动将assets替换为assets/模板
-	'assets' => $assets,
-	# public
-	'public' => $assets . 'public/',
-	'css' => $assets . 'css/',
-	'js' => $assets . 'js/',
-	'img' => $assets . 'img/',
-	'images' => $assets . 'images/',
-	'lib' => $assets . 'lib/',
-
-	# 后台管理系统的assets路径
-	'manage' => $host . 'dever_package/manage/assets/public/',
-	
-	# 合并之后的网络路径,填写之后自动合并资源,不填写则不合并,适合把资源放到云端
-	'merge' => $host . 'wechat/data/assets/' . DEVER_PROJECT . '/',
-	
-	# 上传系统的上传路径的域名(不带action)
-	'upload'=> $host . 'wechat/upload/?save',
-	# 上传系统的资源访问地址
-	'uploadRes'	=> $host . 'wechat/data/upload/',
-
-	# 域名替换,支持*通配符
-	/*
-    'domain' => array
-    (
-        'rule' => function()
-        {
-            $source = $desc = 'http://';
-            if(function_exists('isHttps') && isHttps())
-            {
-                $desc = 'https://';
-            }
-
-            return array($source, $desc);
-        },
-        'replace' => array('*.selfimg.com.cn')
-    ),
-    */
-	
-	# 是否启用代理功能
-	//'proxy' => $host . 'dever/application/applet/main/?data.proxy?',
-
-	# 项目定义,Dever::load将自动转为这个配置,替换掉data/project/default.php里的数据
-	'project' => array
-	(
-		//'main' => array('url' => 'ff'),
-	),
-);
-
-if (DEVER_APP_NAME == 'manage') {
-	$config['host']['merge'] = false;
-}
-
 return $config;

+ 2 - 2
main/database/project.php

@@ -2,8 +2,8 @@
 
 $type = array
 (
-	1 => '服务号',
-	2 => '订阅号',
+	//1 => '保留',
+	2 => '公众号',
 	3 => '小程序',
 	4 => '小游戏',
 	5 => '第三方平台',

+ 55 - 11
main/lib/Wechat.php

@@ -39,17 +39,24 @@ class Wechat
 			if ($appid) {
 				$project = Dever::db('main/project')->one(array('option_type' => $type, 'option_appid' => $appid));
 			}
+
+			/*
+			if (!$project) {
+				$project = Dever::db('main/project')->one(array('option_type' => $type));
+			}
+			*/
+
 			if (!$project) {
 				$project = Dever::input('project', 1);
 			}
 		}
 
-		if (!$project) {
-			Dever::alert('project is not exits!');
+		if (is_numeric($project)) {
+			$project = Dever::db('main/project')->one(array('option_type' => $type, 'option_id' => $project));
 		}
 
-		if (is_numeric($project)) {
-			$project = Dever::db('main/project')->one($project);
+		if (!$project) {
+			Dever::alert('project is not exits!');
 		}
 
 		$this->project = $project;
@@ -77,6 +84,7 @@ class Wechat
 
 	/**
 	 * 更新数据库
+	 * state true为强制更新数据库中的token数据
 	 * 
 	 * @return mixed
 	 */
@@ -129,9 +137,9 @@ class Wechat
 
 		if (is_array($value) || (is_string($value) && strstr($value, 'http://'))) {
 			if ($refresh) {
-				$result = $this->curl(false, $value, false);
+				$result = $this->curl(false, $value, false, $type);
 			} else {
-				$result = $this->curl(false, $value);
+				$result = $this->curl(false, $value, true, $type);
 			}
 			
 
@@ -191,9 +199,9 @@ class Wechat
 	 * 
 	 * @return mixed
 	 */
-	public function ticket($value = false, $expires = false, $interval = 200)
+	public function ticket($value = false, $expires = false, $interval = 200, $state = false)
 	{
-		$result = $this->save('ticket', $value, $expires, $interval);
+		$result = $this->save('ticket', $value, $expires, $interval, false, $state);
 		return $result['value'];
 	}
 
@@ -267,7 +275,7 @@ class Wechat
 	 * 
 	 * @return mixed
 	 */
-	public function curl($method, $param = array(), $alert = true)
+	public function curl($method, $param = array(), $alert = true, $type = false)
 	{
 		//return array();
 		if (is_string($param)) {
@@ -280,8 +288,13 @@ class Wechat
 			$result = json_decode(Dever::curl($param['url'], $param['param'], $param['method'], $param['json']), true);
 			$this->log($result, $param['name'], $param['url'], $param['param']);
 		}
-		//print_r($param);die;
 		if (isset($result['errcode']) && $result['errcode'] != 0) {
+			/*
+			if ($result['errcode'] == 40001) {
+				$token = $this->token(false, false, 2000, true);
+				return $this->curl($type, array(), $alert);
+			}
+			*/
 			$result = $param + $result;
 			Dever::log($result);
 			if ($alert) {
@@ -428,14 +441,45 @@ class Wechat
 	 */
 	public function signature($ticket, $url, $timestamp, $noncestr)
 	{
+		/*
 		$info = array();
 		$info['jsapi_ticket'] = $ticket;
 		$info['url'] = $url;
 		$info['timestamp'] = $timestamp;
 		$info['noncestr'] = $noncestr;
 		ksort($info);
+		*/
 
-		$signature_string = substr(http_build_query($info), 0, -1);
+		$signature_string = "jsapi_ticket=$ticket&noncestr=$noncestr&timestamp=$timestamp&url=$url";
+
+		//$signature_string = substr(http_build_query($info), 0, -1);
 		return sha1($signature_string);
 	}
+
+	/**
+	 * 获取sign签名数据包
+	 * 
+	 * @return mixed
+	 */
+	public function sign($url)
+	{
+		$ticket = $this->ticket();
+		if (!$url) {
+			$url = Dever::url();
+		} else {
+			$url = htmlspecialchars_decode($url);
+		}
+		$timestamp = time();
+		$noncestr = $this->nonce();
+		$signature = $this->signature($ticket, $url, $timestamp, $noncestr);
+
+		$sign = array();
+		$sign['appId'] = $this->project['appid'];
+		$sign['nonceStr'] = $noncestr;
+		$sign['timestamp'] = $timestamp;
+		$sign['url'] = $url;
+		$sign['signature'] = $signature;
+		return $sign;
+		
+	}
 }