ecstore-短信忽然发送不了了

周一,客服反馈商城的注册短信收不到。

检查了一下发现确定发送不了,但是代码都没改,怎么会这样子呢?第一个感觉就是会不会是通道的问题。

所以上网问同样用平台的人,答案是可以发送的。

那么问题就是我们自己的问题了。

所以,写个测试例子调试吧。

随便在控制器写个调用吧,代码如下:

$messengerModel = kernel::single('b2c_mdl_member_messenger');
$mobile = '15959******';
$tmpl = 'account-lostPw';
$data = array(
	'vcode'         => time(),
);
$sendType = 'notice';
$sender = 'b2c_messenger_sms';
$tmpl_name = 'messenger:b2c_messenger_sms/'.$tmpl;
$messengerModel->_send($sender,$tmpl_name,$mobile,$data,$tmpl,$sendType);
exit('OK...');

因为这个调用时没有反馈的,我们需要在调用的时候将通道反馈的信息打印出来,需要做些调试方式。具体就根据个人的喜欢调试吧。

最终,得到结果是短信通道的密码错误。

汗~

确定没有改呀。算了,重置吧。

然后,需要使用“清除系统中原有的与shopex用户中心关联的数据”来清除关联数据。

看这个名字有点怕怕,最后新建一个新站测试发现是没问题的,仅仅是清除关联激活的信息,其他的数据完整保留哈。

这个数据就是:全新安装ecstore后会出现要激活的账号跟密码,是免费注册的一个账号。激活了才会进入后台管理界面。

下面附上调试过程中的一些重点文件,记录一下,省的以后还要重新跟。

在app\b2c\lib\messenger\sms.php中的send($to,$title,$message,$config)方法是短信发送的封装方法,自动添加签名等信息。

在app\b2c\lib\messenger\smschg.php中的send($contents,$config,&$msg)方法是主要方法,这边就是最终的调用短信通道接口的所在,所以,需要返回接口的错误信息,需要在这边调试输出。

在app\base\lib\enterprise.php中的方法关系到账户密码的获取方法。而这些数据是保存在表sdb_base_setting中,获取的SQL语句是:

SELECT * FROM `sdb_base_setting` WHERE `key` LIKE ‘ecos.enterprise_info’

我直接将加密串更新进去,然后,测试就可以了。

END

 

MySQL-怎么备份数据库的表

自从使用上了阿里的RDS之后,公司的MySQL服务器就彻底的歇菜了,特别是出现重大问题的时候,我根本没办法直接用备份数据还原生产环境中的数据。

主要原因是MySQL服务器环境跟RDS的备份文件环境不符合,特意去搭建一个吧,太麻烦。

现在每次有需要使用的时候,都是使用备份克隆一个实例,数据量大了,那个克隆的速度是越来越慢了。

最近正好有空想了一下这个解决方法,记录一下吧。

我经常使用phpmyadmin来管理数据库的数据,所以,我经常会做一个操作:

要操作某个表的时候,我一定是先复制一个表,重命名后当做备份,出现问题的时候我就直接重命名就好了。

那么,我可以将重要的表及表结构给按照一定的时间自动备份吗?

当然可以了哈~定时任务怎么使用我就不多说了,就说说SQL怎么写吧。

一、复制结构,数据

CREATE TABLE `ecs_backup`.`20180109_1809-sdb_b2c_goods` AS SELECT * FROM `ecs`.`sdb_b2c_goods`

二、复制结构,数据,索引

CREATE TABLE `ecs_backup`.`20180109_1809-sdb_b2c_goods` LIKE `ecs`.`sdb_b2c_goods`;
INSERT `ecs_backup`.`20180109_1809-sdb_b2c_goods` SELECT * FROM `ecs`.`sdb_b2c_goods`;

随便挑一种适合自己的方法,只需要自动生成前缀就可以执行了。

那么这类的文件肯定会越来越多的,怎么删除呢?

简单,只需要用下面的SQL获取响应的表名,然后,执行删除操作不就行了?

SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = "ecs_backup" AND CREATE_TIME < "2018-01-09 18:19"

然后,坐等出现问题后直接改名字恢复吧。

这个方法,好处就不说了,大家自己体会吧。

怎么获取手机端的页面信息

前天修改了ECSTORE商城的转向,实现根据上网终端,自动将访问地址转向正确的链接,简单的说就是给你一个PC端的链接,你用手机访问,就能自动切换到手机端的链接上。

然后,我擦就出现了今天这个问题,之前用file_get_contents获取WAP端的内容并获取手张图片的代码忽然不能工作了。

经过排查,手机端调用的时候全部都访问PC端的页面了,我擦,数据不正确是正常的。

那么,怎么处理?

下面就是增加手机端访问的代码,其实很简单的。

参考网址:php 模拟手机访问页面并抓取数据

其实就是偷懒,去那边拿了一个手机头部定义哈~感激

// 定义常用的变量
$timeout = 60;
 $url = 'http://www.shanmai.cn/wap/article-1364.html';
 $header = array(
 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4'
 ); 
 
 // 方法 1.用curl
 $ch = curl_init(); 
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 curl_setopt($ch, CURLOPT_URL, $url);
 $contents = curl_exec($ch);
 print_r($contents);
 
 // 方法 2.用file_get_contents
 $opts = array(
 'http'=>array(
 'method'=>'GET',
 'timeout'=>$timeout,
 'header'=>$header
 )
 );
 $cx = stream_context_create($opts);
 $contents = file_get_contents( $url, false, $cx );
 print_r($contents);

当然,还有其他方法,如fsockopen等,不过不常用就不写了。

参考链接:

 

 

ECSTORE-后台管理视图详情的翻页功能扩展

ECSTORE系统后台的管理视图是很方便我们的功能开发,唯一不足的是,如果我们的详情的内容有翻页,那么就必须在管理控制器里面写ajax_html方法,然后来调用传入的方法,生成翻页内容。

延伸:可以查看会员列表中的预存款里面的翻页,只要记录大于10项就可以看到了

可是,实际上,在finder的定义中我们已经写过一次代码了,完全没必要再写一次代码,但是,如果直接将连接指向finder内的方法的话,我们会发现,tab的表头一直再重复,很麻烦,怎么办呢?

二次开发呗~

我们的目标是:将那个表头去掉。

找到文件:

\app\desktop\lib\finder\builder\detail.php

找到行

if( count($this->detail_pages)>1){
echo $tab_header;
}

修改为下面代码:

if( count($this->detail_pages)>1 && ($_GET['noshow']==false) )
{
echo $tab_header;
}

保存。

然后,只要在翻页的地方将连接上增加&noshow=true然后就可以实现将表头去掉的功能了。

其他调用就看你自己的了咯~

2017.08.18 续

解决完这个问题后,同事有开发了一个详情页,然后按照这个逻辑操作,结果发现,tab切换的第一屏是有tab表头的,但是!当点击下一页的时候却发现表头消失了。

很诡异噢,实在没有时间检查一直拖到今天下午才检查,才发现,原来,这是一个误伤。

根本不需要重新二开呀,本来功能就是可以翻页的。

问题出在之前的同事开发的时候不知道从哪里找了一个模板,模板里面有一个开头:

<div>
<div container='true'>
...
</div>
</div>

只需要将这两行开头的去掉,问题就解决了,就不会出现重复的问题了,原因是因为加载的机制决定了这个是不能出现的,出现就会嵌套进去了。

Warning: http_build_query(): Parameter 1 expected to be Array or Object. Incorrect value given in …

今天,在开发微信公众号发送模板消息的时候调用ECSTORE系统的发送模块base_httpclient类。结果死活出错误,一直提示:

Warning: http_build_query(): Parameter 1 expected to be Array or Object.  Incorrect value given in /data/ECS_Site/Demo/app/base/lib/curl.php on line 31

其他时候基本上没有,没有看到错误,可能也许大概没有错误,但是增加模板调用就会出现错误,所以调试一圈发现没有涉及到相关的其他调用,完全是系统本身的调用,不知道哪里涉及到了,没时间一步步的调试了。

根据错误提示:

参数1预计的参数是数组或者对象,错误的值在…

好吧翻译的有点问题但是基本的意思我们懂啦,查看手册发现http_build_query()这个方法的参数1是:可以是数组或包含属性的对象。

那么问题就在于调用的时候不是这两类的类型。

查看错误代码所在的上下文发现,这个参数的来源可能是null类型,好吧,所以增加一个判断,问题解决。

至于会不会造成其他的错误那就不好说了噢。