There are questions remain, We'll search for the answers together. But one thing we known for sure,the future is not set!

【原创文章】Ecmobile修改进阶篇一-详解追踪ecmobile app首页不显示分类、搜索提示网络错误的原因及分享剖析思路

ecmobile 百蔬君 8302℃ 已收录 9评论

ecmobileindexnocatagery

今天,对广州来说是一个风和日丽的日子,有阳光,温度适中,没有雾霾。这几天折腾ecmobile,遇到一些很有意思的东西,想写下来,算是一个见证。转眼间在蔬菜种子电商这行业已经摸爬滚打很多年,很多很多年前,花了3个月的时间修改pc端的ecshop程序,添加产品,这么多年来修修补补,升级更新。经过这么多年的准备,在内容、资料、产品、货源、物流等各方面的准备已经成熟,最近重新升级了ecshop pc端,同时也做了wap端和app端。最近弄这个app端比较曲折有意思,记录下来,以备后用,也和朋友们分享。

最开始并不知道还有这种开源的针对ecshop的开源APP源码,一直在网上搜索资料,本来还准备自己试试的,没想到还有这种开源项目,在看到的那一刻,我也是惊呆了。立马下载,着手研究这个代码。首先介绍下这个ecmobile,从官方资料及他们微博来看,技术骨干就是从ecshop团队出来的技术人员,难怪做了这么一个app开源项目,ecshop使用量这么大,他们的这个开源是非常有前瞻性的。ecshop,ectouch,ecmobile,现在全部都是开源代码。源码可以在他们的官网http://www.ecmobile.me,或者https://github.com/GeekZooStudio下载。源码包总共有4个部分,包括Android端,苹果端及php端代码。

Snap1

 

ECMobile_Universal-master:这是基本框架,ECMobile_iOS-master:苹果端源代码,ECMobile_PHP-master:php端源代码,也就是需要放到你ecshop网站的代码,ECMobile_Android-master:Android端app源代码。

 

下载这个源代码之后,那么就需要一个环境来修改代码、编译代码,生成APP,这里我使用的eclipse来编译的,至于这个,有一个详细教程,http://bbs.ecmobile.cn/read.php?tid=315&fid=25,说明的非常清楚,怎样架设的过程就不一一赘述了,但是有两个地方要注意,就是eclipse的两个设置问题,不弄好可能编译不成功。第一个是“打开eclipse 后,菜单【window】-【Preferences】-【General】-【Workspace】-【Text file encoding】-【Other】选择UTF-8  ”,第二个是“继续上一步操作菜单【window】-【Preferences】-【Android】-【LInt Error Checking】-【Correctness Messages】-【MissingTranslatior】右下【Severity】-【Warning】“。我是中文版的eclipse,那么位置就是菜单中的”窗口“-”首选项“-”常规“-”工作空间“,第二个是”首选项”是android。

Snap4

Snap2

导入项目的时候先导入框架ECMobile_Universal-master,再导入ECMobile_Android-master。项目弄好后,他这个需要“构建路径”,原始项目文件中的android-support-v4.jar的路径是错误的,他不是windows路径,需要修改为正确的路径,这个jar在它自带的alipay_lib\libs下面 就有,重新定位就好了。

 

Snap5

 

之后就可以噼噼啪啪的生成APK文件了。

 

拖到android手机测试了一下,结果如下

 

7184800

 

 

 

 

7184956

 

 

 

首页只是显示动画的三个照片和促销产品,没有目录信息。点击“搜索”,总是弹出“网络错误,请检查网络设置”的提示。于是由此开始我一个星期查找原因的道路。

由于对这种架构模式不是很熟悉,刚刚开始还不知道从何开始,他既不是纯粹的php语言,也不是c++类似的语言。刚刚一开始不知道从哪里下手。由于ecmobile可能刚刚开始网上的资料基本为零,项目本身的文档就是一个简单的介绍,就像ecmobile本身宣传所说:由 Web 站生成一个原生移动商城需要几步?ECMobile 的回答是:“我只需要一个文件夹”,确实放一段代码,就可以生成一个相应的APP。然而离真真使用还是有相当一个距离的。于是我在官方论坛及Q交流群咨询,官方论坛是一片死寂,没有一个人回复,没有任何交流与讨论。QQ群有人热心帮忙,可以我仔细查看之后,并不是原因,所在。于是自己开始一遍一遍的摸索ecmobile的运行原理,查看代码,想追踪到原因。要找到原因,首先要知道APP是怎样和pc端的php代码交互的,可是这并不容易。从直观思维来看,app首页不正常,那么我首先是检查app代码的首页相关代码,翻了几遍官方的ECMobile_Android_UI.pdf,和首页有关的java及xml是:B0_IndexFragment.java,B0_IndexAdapter.java,b0_index.xml,b0_index_banner.xml,b0_index_banner_cell.xml,b0_index_hot_cell.xml,b0_index_category_cell.xml,这些地方没有动过,迷茫不知从何下手。

 

app是怎样post信息的没有搞明白,于是想去看看php端是怎get信息的。偶然发现了ecmobile的接口测试工具/ecmobile/test/,我测试每一个接口,在这里发现了问题。

 

当提交/home/data时返回数据正常

15_1807_9163fe5020683cd

当提交/home/category时返回了首页的数据,明显错误

15_1807_23f7c574b7707f5

 

从这个接口工具,经过检查对比代码和app首页的产品,搞明白APP post过来的数据是在

ecmobile\controller\home\data.php

ecmobile\controller\home\category.php

这两个程序处理的,只是data.php返回了正确的数据,而category.php则返回了错误。由于代码没有动过,基本无从下手。由于category.php的编码是gbk,开始还以为是编码的问题,可是编码改为utf之后问题依旧。

经过无数次测试和检查代码,也从这个错误返回信息意识到,他这个post的信息首先是交给了ecmobile/index.php,然后再派给了home来处理,

经过n天的测试,在这里发现ecmobile/test/index.php传给ecmobile/index.php?url=的数据是错误的。

index.php中get新的代码为

$url = _GET(‘url’);

当post home/data.php时,ecmobile/index.php接受的是home/data,所以这里地址正确,在这里地址拼接为controller/home/data.php

但是当post home/category时,接受的url为home/index.php,他的地址就变为了controller/home/index.php.php

这样肯定是没有数据的,路径错误。当时非常奇怪,为什么其他所有的数据都接受正常,只有是home/category的时候就成了index.php。

首先是检查了 _GET函数,以为这个函数做了什么错误处理,在这个函数中发现$ _GET接受过来的数据也是index.php。

一阵阵的崩溃,既然这里接受的数据是错误的,那么按理说就应当是发送时出问题了,从test/index.php发送过来的值就已经是index.php。

于是开始一遍一遍研究test下面的文件 ecmobile.json和index.php,json是java的脚本文件,研究了整个脚本的结构和数据,home/category与其他接口在结构和数据上没有任何差别。

于是研究index.php,通过各种测试,发现在ajax的error函数处总是被激活。

Snap6

在error处的url数据是正确的,在整个index.php中所有的url截获过来的值都是home/category。在某一天稍微休息好的情况下,猛然想起,要看这个index.php   post的值是不是正确,抓包不就可以了吗?Snap1

post的数据是home/categery,没问题的。经过了差不多一周的糊弄,也许是那天比较清醒。我直接ecmobile/index.php?url=home/category测试,从index.php中截获url的值,竟然也是index.php!!!!!!

这个时候才搞明白这个问题与ecmobile没有关系,多么痛的领悟啊!!

 

不是ecmobile的问题,那是什么问题?这个时候我才猛然想起那个ISAPI_Rewrite,马上翻开httpd.ini

RewriteRule ^(.*)/category$ $1/index\.php

 

问题就在这里了,# 掉这个规则,世界马上美好了,真是成也伪静态,败也伪静态!!!!APP端也正常了。

 

7184755

 

在这里简单记录下怎样截获变量值

 $logofile =’log.html’;
file_put_contents($logofile, $data.”<br>”,FILE_APPEND);

 

其他的log’函数测试了好多个都不成功,这个还是相当好用滴。把“file_put_contents($logofile, $data.”<br>”,FILE_APPEND);”插入任何一个想截获变量的地方,就可以获取想要的值了。

 

好吧,一个痛苦的5天,记录下来,也算搞明白了ecmobile一个简单的post,get数据的流程,或许可以让您少一个不眠的5天呢。

 

 

 

 

 

 

 

 

 

转载请注明:百蔬君 » 【原创文章】Ecmobile修改进阶篇一-详解追踪ecmobile app首页不显示分类、搜索提示网络错误的原因及分享剖析思路

喜欢 (5)or分享 (0)
发表我的评论
取消评论

请证明您不是机器人(^v^):

表情
(9)个小伙伴在吐槽
  1. 我配置好之后,用测试用具测试,只读到图片了,其他数据都是NULL,这该怎么解决?
    Meatball2015-11-20 17:02 回复
    • 你这个极有可能是编码的原因。ecshop是utf-8的编码吗?专门针对那个data/home.php测试下
      baishu2015-11-20 20:12 回复
      • 找到原因了,就是ecshop的问题,用的是GBK版本的,换了utf-8就好了。不过出现了json乱码的情况,再去研究一下了。
        Meatball2015-11-21 10:13 回复
        • \u624b\u673a\u7c7b\u578b 出现这种乱码,找半天找不到json_encode在哪
          Meatball2015-11-21 11:23 回复
          • 应当还是编码的事情,对于乱码情况,99%的原因是编码的事情
            baishu2015-11-22 14:12
          • json这个是ecmobile使用的啊,与这个关系不大,去找ecshop文件的原因应当靠谱点
            baishu2015-11-22 14:14
  2. 不好意思 大神 我没发现大神讲过这个问题 所以在这个页面提一下 忘解决一下 我用68ecshop小京东4.1或者4.2多入驻商测试 发现ecmobile的结算页面没有数据 支付和配送方式没有可以选择的方式 点击配送方式还崩溃
    tansuo2016-08-24 15:03 回复
    • 怎么解决的??
      46516121562016-11-29 15:17 回复
    • 小京东的架构和这个不同的
      百蔬君2016-12-13 23:54 回复