单笔订单满 30元, 送礼物 送建站之家VIP会员 全店消费满30元就送建站之家VIP会员!千套精品源码下载!网址:www.jianzhan01.com 代码开源无加密,由于源码具有可复制性不能退款,请仔细查看演示站满意后再拍,做不到完美无Bug,追求完美者勿拍。恶意差评将收录至联盟黑名单,感谢您的理解支持!Ecshop甜心100多级分销2016旗舰版模板+WX支付接口+推广二维码+APP安卓苹果源码+附详细安装调配文档一、只是/源码,不需要咨询和技术服务:拍1件二、源码+安装:拍10件三、源码+安装+使用指导:拍30件 客户案例:PC端:http://www.365tsm.com手机端:http://www.365tsm.com/mobile/WX端:WX号:rryytx同时也请使用本系统的客户也可以将你们的网址发给我,我贴在此处,凡是/本店销售出去的,经核实返现金5元!我们将后台面板进行了升级,升级到了最新的模板堂面板界面,同时集成了APP安卓苹果源码,并针对支付方式进行了完善和修正等等!教程展示 APP教程(包含反编译教程)亲测演示截图 问题锦集(论坛收集) A. 分销中心直接获取二维码的实现1、找到文件:mobile/distribute.php 找到如下代码 // 第三方登录接口elseif($action == 'oath') 在上方添加如下代码 //推广二维码 elseif($action == 'qrcode') { include_once(ROOT_PATH . '../wechat/callback-ent.php'); //WX接口类 $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 = 'https://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 = 'https://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 找到如下代码
修改店铺名 在以上代码下面添加代码
我的二维码 继续找到 在以上代码上面添加代码
- 二维码推广三部曲:
- 1、长按下方二维码图片,保存图片到手机相册。
- 2、发送二维码图片到朋友圈或WX好友!
- 3、WX好友通过你发送出去的二维码成功关注xxxWX公众号,并进入商城,自动成为你的会员。你的所有会员消费,你都可以获得分佣提成!
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,功能实现过程到此结束。(要 注意的是/,如果你有修改过二维码图片、或字体等,请根据你现在的程序来进行修改。此版本是/完全根据甜心安装付费二维码功能后的初始程序代码上写的,有很多 付费功能的私有类、方法等!请悉知。)。此功能实现的二维码图片和甜心官方提供的WX菜单获取到的二维码图片是/一样的效果,生成的图片也是/一样的。用户进 入商城后,只要是/具有分销商权限都可以获取到二维码,当然,没有分销商权限也是/无法看到查询菜单的。由于代码是/从别的项目上移植过来的,所以可能会有冗 余,懂的人自己去处理吧! B.“该公众号暂时无法提供服务”付费二维码终极解决方案需要实现功能的几个核心参数值分别是/:access_token(原则上来讲,这个是/不应该考虑在内的,因为所有WX消息功能都需要用到这个参数值,但实际上安装后其他功能是/能够正常返回的。),ticket(用于WX创建场景二维码后取回二维码必须用到的参数值),media_id(这个是/用于取回媒体{图片}上传到WX服务器后,取回媒体的核心参数)。经 过调试,前两个参数都是/没有问题的,可以正常输出(由于没有接触过WX二次开发,所以这里调试的方法,我用的是/甜心的文本消息回复接口的方式来进行调试 的)。但是/后面的这个media_id无论如何都无法返回,那基本上可以确定是/程序在上传二维码到WX服务器的过程中出现了问题!实际上,在程序上传二维 码到WX服务器之前是/有将最终的二维码存储到数据库的这么一个过程。代码如下: $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服务器上,我们文件的路径格式为:\a\b\c\aaa.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数据表的意思)我们再来测试取二维码!恩,果然能正常返回二维码了。。。其实这也应该是/为什么有的坛友每次遇到二维码取不到找到甜心修复后,过一段时间又出现同样问题的根本原因了,虽然我还未仔细去研究为什么会这样,但是/情况似乎就是/这样。问题来了,我们不能每次出现问题都去执行下清空数据表吧,毕竟这些数据不单单只存放了取图片二维码的消息数据,还有其它的!那我给大家的建议是/,如果你的消息请求较频繁,也可以说是/你WX粉丝量较大的时候,可以将$this -> insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);这句代码注释或删除掉,是/不会影响功能自身和其它功能使用的。因为我们取完二维码后,在后台所看到的,也仅仅就是/一串字符(media_id)而已,所以,对于大部分坛友而言这个是/可有可无的。C.付费推广二维码自定义修改及普遍问题 1、首先能生成二维码的发送指令是/两个,一个是/ qrcode,另一个是/ tianxin100 。这里我们动的是/后面那个,打开wechat\callback-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个数字分别对应二维码的长跟宽,后者下面的是/头像的长宽,这里改成需要调整的大小尺寸。由于生成的图片采用的是/压缩格式,所以如果我们设计的宣传图过小的话,会导致相应生成的二维码以及头像也会变小,从而影响到部分机子长按图片无法出现关注选项!根据反复测试,机子的屏幕尺寸不同,是/直接影响着是/否有选项出现的关键!我一般建议用WX的分享封面尺寸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://dwz.cn/J4Isu ,另外坐标度,跟图片不是/一样的量多方法,这个我不说了,自己好好摸索一下,还是/那句,我不能什么都全说simsun.ttf 这个替换成设计中相应的字体文件,需要就覆盖它好了,统统弄好后,反复测试吧!1、 为什么生成的二维码和头像没对齐那是/你的坐标量度有问题了,好好改改再生成吧。2、为什么回复关键字显示 无法提供服务这个问题有点复杂,从代码里看,生成的步骤是/这样的,先是/判定是/否有生成,如果没有的话就会调取参数,这个如果参数都OK没改动过的话,第一先查生成目录是/否有读写权限,第二查一下WX的参数是/否填写正确,尤其是/TOKEN,千万不要像某位童鞋一样,几个公众号都指向分销系统了,这样会造成回调错乱。第三查一下公众号里回调地址有没有填写正确,没认证的公众号是/不行的哦。第四查那个帐号是/否在分销系统启用前还是/后注册的,如果是/以前老系统的话,那由于数据表结构不同,同样会产生数据调取失败的。这项建议找不到原因的童鞋好好从MYSQL中去分析一下。第五才是/常说的帐号有否绑定。3、有头像没二维码,或者反过来的。前者大多跟WX公众号参数有问题,可以把TOKEN替换一下试试。反过来情况的那是/因为数据库中没有头像地址,这个去MYSQL看看,如果真没有那可以解绑帐号再重新绑定一次。或者重新关注一次。