ecshop甜心100多级分销2016旗舰版+支付+推广二维码+APP源码
- 风格类型:电子商务
- 源码类型:PHP源码
- 服务类型:网页/页面设计
Ecshop甜心100多级分销2016旗舰版模板+支付接口+推广二维码+APP安卓苹果源码+附详细安装调配文档
客户案例:
PC端:http://picimg.witcp.com/pic/www.365tsm.com
端:http://picimg.witcp.com/pic/www.365tsm.com/mobile/
我们将后台面板进行了升级,升级到了最新的模板堂面板界面,同时集成了APP安卓苹果源码,并针对支付方式进行了完善和修正等等!
教程展示
APP教程(包含反编译教程)
亲测演示截图
问题锦集(论坛收集)
A. 分销中心直接获取二维码的实现
1、找到文件:mobile/distribute.php 找到如下代码
// 第三方登录接口
elseif($action == 'oath')
在上方添加如下代码
//推广二维码
elseif($action == 'qrcode')
{
include_once(ROOT_PATH . '../wechat/callback-ent.php'); //wei信接口类
$objClass = new wechatCallbackapi();
$user_id = $_GET['affiliate'];
//$user_id = $_SESSION['user_id'];
$affiliate = unserialize($GLOBALS['_CFG']['affiliate']);
$level_register_up = (float)$affiliate['config']['level_register_up'];
$rank_points = $GLOBALS['db']->getOne(SELECT rank_points FROM . $GLOBALS['ecs']->table('users').where user_id=.$_SESSION[user_id]);
//检查分销商权限
if($rank_points > $level_register_up || $rank_points == $level_register_up)
{
if(!empty($user_id)){
$scene_id = $user_id;
$affiliate = $user_id;
$type = 'tj';
$user_name = $db->getOne(SELECT `user_name` FROM .$GLOBALS['ecs']->table('users'). WHERE `user_id`='$scene_id');
$base_url = $db->getOne(SELECT `cfg_value` FROM `wxch_cfg` WHERE `cfg_name`='baseurl');
$scene = $user_name;
$qr_path = $db->getOne(SELECT `qr_path` FROM `wxch_qr_tianxin100` WHERE `scene_id`='$scene_id');
if(!empty($qr_path))
{
$surl = $base_url.'wechat/qrcode/'.$qr_path;
}else{
$action_name = QR_LIMIT_SCENE;
$json_arr = array('action_name'=>$action_name,'action_info'=>array('scene'=>array('scene_id'=>$scene_id)));
$filepath = json_encode($json_arr);
$objClass->access_token($db);
$ret = $db->getRow(SELECT `access_token` FROM `wxch_config`);
$access_token = $ret['access_token'];
if(strlen($access_token) >= 64)
{
$url = 'http://picimg.witcp.com/pic/api.weixin.qq.com/cgi-bin/qrcode/create@access_token='.$access_token;
$res_json = $objClass->curl_grab_page($url, $filepath);
$json = json_decode($res_json);
}
$ticket = $json->ticket;
if($ticket)
{
$ticket_url = urlencode($ticket);
$ticket_url = 'http://picimg.witcp.com/pic/mp.weixin.qq.com/cgi-bin/showqrcode@ticket='.$ticket_url;
$imageinfo = $objClass->downloadimageformweixin($ticket_url);
$time = time();
$path = '../images/qrcode/'.$time.'.jpg';
$surl = $base_url.'images/qrcode/'.$time.'.jpg';
$local_file = fopen($path,'a');
$h_path = '../images/qrcode/head/'.$time.'.jpg';
$h_local_file = fopen($h_path,'a');
$headimgurl = $db->getOne(SELECT `headimgurl` FROM `wxch_user` WHERE `uname`='$user_name');
$h_imageinfo = $objClass->downloadimageformweixin($headimgurl);
if(false !== $local_file)
{
if(false !== fwrite($local_file, $imageinfo) && false !== fwrite($h_local_file, $h_imageinfo))
{
fclose($local_file);
$insert_sql = INSERT INTO `wxch_qr` (`type`, `action_name`, `ticket`, `scene_id`, `scene`, `qr_path`, `function`, `affiliate`, `endtime`, `dateline`) VALUES ('$type', '$action_name', '$ticket', '$scene_id', '$scene', '$surl', '$function', '$affiliate', '$endtime', '$dateline');
$db->query($insert_sql);
}
}
}
$imgsrc = ../images/qrcode/.$time..jpg;
$h_imgsrc = $time..jpg;
$width = 200;
$height = 200;
$time = time();
$name = $objClass->resizejpg($imgsrc,$width,$height,$time);
//echo $name;exit;
$imgs = $name;
$width = 60;
$height = 60;
$h_time = $time._1;
$h_name = $objClass->resizejpg($h_imgsrc,$width,$height,$h_time);
$h_imgs = $h_name;
$target = '../qrcode/tianxin100.jpg';//背景图片
$target_img = Imagecreatefromjpeg($target);
$source = Imagecreatefromjpeg($imgs);
$h_source = Imagecreatefromjpeg($h_imgs);
imagecopy($target_img,$source,165,392,0,0,200,200);
imagecopy($target_img,$h_source,60,28,0,0,60,60);
$fontfile = ../wechat/simsun.ttf;
$nickname = $db->getOne(SELECT `nickname` FROM `wxch_user` WHERE `uname`='$scene');
$textcolor = imagecolorallocate($target_img, 0, 0, 255);
imagettftext($target_img,18,0,268,59,$textcolor,$fontfile,$nickname);
imagejpeg($target_img,'../wechat/qrcode/'.$time.'.jpg');
$s_data = $time..jpg;
$surl = $base_url.'wechat/qrcode/'.$s_data;
$insert_sql = INSERT INTO `wxch_qr_tianxin100` (`qr_path`, `scene`, `scene_id`, `nickname`) VALUES ('$s_data', '$scene', '$scene_id', '$nickname');
$db->query($insert_sql);
}
}
}else{
show_message('您还不是分销商,不能获取二维码', '请先购买商品获取权限', 'distribute.php', 'error');
}
$smarty->assign('qrcode', $surl);
$smarty->display('distribute.dwt');
}
找到文件mobile/distribute.php
/* 显示页面的action列表 */
$ui_arr = array('register', 'login', 'profile','dianpu', 'act_dianpu', 'order_list',
修改为
/* 显示页面的action列表 */
$ui_arr = array('register', 'login', 'profile','dianpu', 'qrcode', 'act_dianpu', 'order_list',
2、找到文件:mobile/themes/miqinew/distribute.dwt 找到如下代码
<li onclick=location.href='user.php@act=dianpu'><span class=icon> </span><span>修改店铺名</span> <i></i></li>
在以上代码下面添加代码
<li onclick=location.href='distribute.php@act=qrcode&affiliate={$user_id}'><span class=icon> </span><span>我的二维码</span> <i></i></li>
继续找到 <!-- /一级分销 S--> <!-- {if $action eq 'fenxiao1'} -->
在以上代码上面添加代码
<!-- 我的二维码 S -->
<!-- {if $action eq 'qrcode'} -->
<header id=header>
<div class=header_l header_return> <a class=ico_10 href=distribute.php> 返回 </a> </div>
<h1> 我的二维码</h1>
</header>
<div class=m-wrap>
<div class=common-wrapper>
<dl class=text-descript>
<dt>二维码推广三部曲:</dt>
<dd>1、长按下方二维码图片,保存图片到相册。</dd>
<dd>2、发送二维码图片到朋友圈或wei信好友!</dd>
<dd>3、wei信好友通过你发送出去的二维码成功关注xxxwei信公众号,并进入商城,自动成为你的会员。你的所有会员消费,你都可以获得分佣提成!</dd>
</dl>
</div>
<div class=qr-img>
<img alt=我的推广二维码 src={$qrcode} />
</div>
</div>
<!-- {/if} -->
<!-- 我的二维码 E -->
3、找到文件:wechat/callback-ent.php 搜索如下代码
private function resizejpg($imgsrc,$imgwidth,$imgheight,$time)
修改为 function resizejpg($imgsrc,$imgwidth,$imgheight,$time)
继续搜索 header(Content-type: image/jpg);
将其修改为 //header(Content-type: image/jpg);
OK,功能实现过程到此结束。(要 注意的是,如果你有修改过二维码图片、或字体等,请根据你现在的程序来进行修改。此版本是完全根据甜心安装付费二维码功能后的初始程序代码上写的,有很多 付费功能的私有类、方法等!请悉知。)。此功能实现的二维码图片和甜心官方提供的wei信菜单获取到的二维码图片是一样的效果,生成的图片也是一样的。用户进 入商城后,只要是具有分销商权限都可以获取到二维码,当然,没有分销商权限也是无法看到查询菜单的。由于代码是从别的项目上移植过来的,所以可能会有冗 余,懂的人自己去处理吧!
B.“该公众号暂时无法提供服务”付费二维码终极解决方案
需要实现功能的几个核心参数值分别是:access_token(原则上来讲,这个是不应该考虑在内的,因为所有wei信消息功能都需要用到这个参数值,但实际上安装后其他功能是能够正常返回的。),ticket(用于wei信创建场景二维码后取回二维码必须用到的参数值),media_id(这个是用于取回媒体{图片}上传到wei信服务器后,取回媒体的核心参数)。
经 过调试,前两个参数都是没有问题的,可以正常输出(由于没有接触过wei信二次开发,所以这里调试的方法,我用的是甜心的文本消息回复接口的方式来进行调试 的)。但是后面的这个media_id无论如何都无法返回,那基本上可以确定是程序在上传二维码到wei信服务器的过程中出现了问题!实际上,在程序上传二维 码到wei信服务器之前是有将最终的二维码存储到数据库的这么一个过程。代码如下:
$insert_sql = INSERT INTO `wxch_qr_tianxin100` (`qr_path`,`scene`,`scene_id`, `nickname`) VALUES
('$s_data','$scene', '$scene_id','$nickname');
在上一句代码之前还有一句代码如下: $data=dirname(__FILE__).qrcode/.$time..jpg;
上面这一句代码看上去是没有任何问题的,将最终二维码在服务器中的绝对路径赋值给变量$data(这个是处理二维码上传的关键变量。)输出结果如:/www/web/xxx/xxxxqrcode/123123123.jpg;输出的结果少了一个斜杠“/”,dirname(__FILE__) 这个PHP中的常数是取当前文件的部分路径的意思,而它返回的结果是不包含斜杠“/”的。至于这里甜心为什么要这么写,这里就涉及到一个问题。在Windows服务器上,我们文件的路径格式为:abcaaa.jpg 这种格驶而在Linux服务器上,我们文件的路径格式为:/a/b/c/aaa.jpg 这种格驶修改如下:
$data = dirname(__FILE__)./.qrcode/.$time..jpg; //这里有几处需要修改,自己文件中搜索关键代码“dirname(__FILE__)”全部修改即可。修改的文件是wechat目录下的 callback-ent.php文件。如果你在修改完后发现依然不能解决问题,那就可能是你服务器的问题了,我这里针对的是Linux服务器,如果你的 是Windows服务器,就根据我上面说的,尝试将路径符号修改为“”。
如果还不能解决问题,那肯定问题就出现在回复二维码图片给用户这里了!
$msgType = image;
$iipp = $_SERVER[REMOTE_ADDR];
$phone_state = $_SERVER[HTTP_USER_AGENT];
$contentStr = $json->media_id; //取回media_id
$resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
//将用户提交信息的返回数据存入数据库中
$this -> insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);
$this -> universal($fromUsername, $base_url);
echo $resultStr;
注释上面代码片段中的下面这两句代码:
//$this -> insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);
//$this -> universal($fromUsername, $base_url);
二维码正常调出!
另外:
但是,我们只是通过注释来测试的啊,并不知道这两句在程序中所扮演的角色!通过跟踪代码,最终,我锁定了这句代码:
$this -> insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);
我们来取消刚刚的注释,这段代码的意思我已经在代码中写了注释,对的,经过跟踪 insert_wmessage() 这个函数,我们得知,这是处理将用户提交信息的返回数据存入数据库中。简单点说,就是用作我们在后台管理中查看粉丝管理的消息记录显示用的,对应的数据表是 wxch_message。
这 时候我们打开自己的wxch_message数据表看看,应该少说有几万条记录,看到这些堆积如山的消息 数据。顿时脑洞大开!由于我们知道,这些数据都是存放于我们本地服务器数据库中的,所以如果不是非常重要的消息,我们几乎可以忽略不管,你也可以把这些数 据理解为聊天记录,知道了这点,所以我毫不犹豫,TRUNCATE 清空数据表再说(在mysql中执行sql语句 TRUNCATE TABLE wxch_message 即为清空wxch_message数据表的意思)
我们再来测试取二维码!恩,果然能正常返回二维码了。。。其实这也应该是为什么有的坛友每次遇到二维码取不到找到甜心修复后,过一段时间又出现同样问题的根本原因了,虽然我还未仔细去研究为什么会这样,但是情况似乎就是这样。
问题来了,我们不能每次出现问题都去执行下清空数据表吧,毕竟这些数据不单单只存放了取图片二维码的消息数据,还有其它的!
那我给大家的建议是,如果你的消息请求较频繁,也可以说是你wei信粉丝量较大的时候,可以将$this -> insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);这句代码注释或删除掉,是不会影响功能自身和其它功能使用的。因为我们取完二维码后,在后台所看到的,也仅仅就是一串字符(media_id)而已,所以,对于大部分坛友而言这个是可有可无的。
C.付费推广二维码自定义修改及普遍问题
1、首先能生成二维码的发送指令是两个,一个是 qrcode,另一个是 tianxin100 。这里我们动的是后面那个,打开wechatcallback-ent.php 搜索代码: elseif ($keyword == 'tianxin100') {
从这里开始以下的就是要修改的主要区域,我们继续搜索
$imgsrc = ../images/qrcode/.$time..jpg;
$h_imgsrc=$time..jpg;
$width = 200;
$height = 200;
$time=time();
$name=$this->resizejpg($imgsrc,$width,$height,$time);
$imgs = $name;
//处理头像
$width = 60;
$height = 60;
前面的2个数字分别对应二维码的长跟宽,后者下面的是头像的长宽,这里改成需要调整的大小尺寸。由于生成的图片采用的是压缩格尸所以如果我们设计的宣传图过小的话,会导致相应生成的二维码以及头像也会变小,从而影响到部分机子长按图片无法出现关注选项!根据反复测试,机子的屏幕尺寸不同,是直接影响着是否有选项出现的关键!我一般建议用wei信的分享封面尺寸900作为图片宽度,这样比较符合推送到任何平板以及当中!而在900尺寸下,二维码生成的长宽不能低于280,否则会出现没选项。
2、继续搜索代码部分
$target = '../qrcode/tianxin100.jpg';//背景图片
$target_img = Imagecreatefromjpeg($target);
$source = Imagecreatefromjpeg($imgs);
$h_source = Imagecreatefromjpeg($h_imgs);
imagecopy($target_img,$source,165,392,0,0,200,200);
imagecopy($target_img,$h_source,60,28,0,0,60,60);
$fontfile = simsun.ttf;
#水印文字
$nickname = $db->getOne(SELECT `nickname` FROM `wxch_user` WHERE `wxid`='$fromUsername');
#打水印
$textcolor = imagecolorallocate($target_img, 0, 0, 255);
imagettftext($target_img,18,0,268,59,$textcolor,$fontfile,$nickname);
背景图片,这个不用说,如果要改成其他图片的话,可以覆盖,又或者另存为其他图片,但切记如果更改图片名称的话,代码这里相应更改为与图片名称一样的,否则会出现生成失败。
imagecopy 的两行,第一行对应的是二维码生成的坐标以及大小,前面2个数字是X轴跟Y轴,最后2个是长宽。下面一行代码同理,那个是头像的。有的童鞋会问,我怎么取 得X轴跟Y轴呢,其实这个并不难,这里我卖一个关子,大家可以研究一下QQ截图那个小工具,具体我不多说了。我不能什么都白说,不是吗。。呵呵
$textcolor 对应的数字部分,后面三个数字就是颜色,代码是用RGB代表的。RGB哪里能看,PS调色板或者是QQ截图工具就可以,什么还是这工具,不行,我得好好研究一下才行。
imagettftext 对应的4个数字,分别是尺寸,透明度,坐标X轴跟Y轴。。这里要注意的是,前面的尺寸不是像素,而是PHP水印特有的镑,那怎么折算呢,这个可以去翻 http://picimg.witcp.com/pic/dwz.cn/J4Isu ,另外坐标度,跟图片不是一样的量多方法,这个我不说了,自己好好摸索一下,还是那句,我不能什么都全说
simsun.ttf 这个替换成设计中相应的字体文件,需要就覆盖它
好了,统统弄好后,反复测试吧!
1、 为什么生成的二维码和头像没对齐
那是你的坐标量度有问题了,好好改改再生成吧。
2、为什么回复关键字显示 无法提供服务
这个问题有点复杂,从代码里看,生成的步骤是这样的,先是判定是否有生成,如果没有的话就会调取参数,这个如果参数都OK没改动过的话,第一先查生成目录是否有读写权限,第二查一下wei信的参数是否填写正确,尤其是TOKEN,千万不要像某位童鞋一样,几个公众号都指向分销系统了,这样会造成回调错乱。第三查一下公众号里回调地址有没有填写正确,没认证的公众号是不行的哦。第四查那个帐号是否在分销系统启用前还是后注册的,如果是以前老系统的话,那由于数据表结构不同,同样会产生数据调取失败的。这项建议找不到原因的童鞋好好从MYSQL中去分析一下。第五才是常说的帐号有否绑定。
3、有头像没二维码,或者反过来的。
前者大多跟wei信公众号参数有问题,可以把TOKEN替换一下试试。反过来情况的那是因为数据库中没有头像地址,这个去MYSQL看看,如果真没有那可以解绑帐号再重新绑定一次。或者重新关注一次。
-
最近销售:已售出1 掌柜:dfq2099¥240 元
-
最近销售:已售出0 掌柜:dfq2099¥300 元
-
最近销售:已售出0 掌柜:dfq2099¥150 元
-
最近销售:已售出0 掌柜:dfq2099¥150 元
-
最近销售:已售出0 掌柜:dfq2099¥240 元