开启左侧

[其它] 小猪pigcmg微信自定义菜单操作失败,35:错误号:35,未知错误补丁

[复制链接]
发表于 2015-5-16 10:34:08 | 显示全部楼层 |阅读模式
                                                                                                                                              
  说明:此补丁针对,某猪微信公众平台最新加盟版7.1.X  - 7.8源码等自定义菜单添加的时候提示:操作失败,35:错误号:35,未知错误 只要是出现这个错误的,基本上通过下午大批量的给网友修复已经正式没有任何问题。
-----------------------2015-3-2自定义菜单外部链接修改方法--------------------------
错误代码41001,微信返回错误信息:缺少access_token!!!!先看看你 第三方平台上面 AppID 和 AppSecret 你后面有没有空格!!!这类不认真的错误,不帮忙解决!
错误代码48001 这个看看你的帐号订阅号是不是,认证了么!

-----------------------2015-1-27自定义菜单外部链接修改方法--------------------------
由于时间匆忙没有考虑到自动跳转外部菜单失效,现在拿出来解决方案。
这个是针对一些低版本,不写关键词 就不能添加 修改菜单的版本,【再次说明一些高版本,不需要覆盖,下用下面的diymen的代码覆盖,注意编码,下面的成功了,如果不能使用外链的在考虑修改这个。】!
使用方法:关键词不用写,直接写外部链接就可以了。
路径:\PigCms\Lib\Model\User\Diymen_classModel.class.php
找到:array('keyword','require','关键词必须填写',1),
改成://array('keyword','require','关键词必须填写',1),


--------------------2015-1-24修复方案主要修改这个上面的根据情况来修改-----------------------
找到程序根目录   
PigCms\Lib\Action\User
覆盖DiymenAction.class.php 覆盖前请先备份原始文件 个别源码会报错,几率百分之1,复制前请把文件编码弄对,(UTF-8 无BOM编码)如果出现乱码,可以联系:499826210 月牙熊,要源代码,提前说在五哥空间看到的,不然他是要收费的。
这个文件我们已经把程序给修复好了,你们直接覆盖就OK
---------------DiymenAction.class.php代码---------
  1. <?php
  2. class DiymenAction extends UserAction{
  3.        public $thisWxUser;
  4.        public function _initialize() {
  5.               parent::_initialize();
  6.               $where=array('token'=>$this->token);
  7.               $this->thisWxUser=M('Wxuser')->where($where)->find();
  8.               if (!$this->thisWxUser['appid']||!$this->thisWxUser['appsecret']){
  9.                      $diyApiConfig=M('Diymen_set')->where($where)->find();
  10.                      if (!$diyApiConfig['appid']||!$diyApiConfig['appsecret']){
  11.                             $this->error('请先设置AppID和AppSecret再使用本功能,谢谢','?g=User&m=Index&a=edit&id='.$this->thisWxUser['id']);
  12.                      }else {
  13.                             $this->thisWxUser['appid']=$diyApiConfig['appid'];
  14.                             $this->thisWxUser['appsecret']=$diyApiConfig['appsecret'];
  15.                      }
  16.               }
  17.        }
  18.        //自定义菜单配置
  19.        public function index(){
  20.               $data=M('Diymen_set')->where(array('token'=>$_SESSION['token']))->find();
  21.               $this->assign('diymen',$data);
  22.               if(IS_POST){
  23.                      $_POST['token']=$_SESSION['token'];
  24.                      if($data==false){
  25.                             $this->all_insert('Diymen_set');
  26.                      }else{
  27.                             $_POST['id']=$data['id'];
  28.                             $this->all_save('Diymen_set');
  29.                      }
  30.                      M('Wxuser')->where(array('token'=>$this->token))->save(array('appid'=>trim($this->_post('appid')),'appsecret'=>trim($this->_post('appsecret'))));
  31.               }else{
  32.                      $class=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>0))->order('sort desc')->select();//dump($class);
  33.                      foreach($class as $key=>$vo){
  34.                             $c=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>$vo['id']))->order('sort desc')->select();
  35.                             $class[$key]['class']=$c;
  36.                      }
  37.                      $this->assign('class',$class);
  38.                      $this->display();
  39.               }
  40.        }
  41.        public function  class_add(){
  42.               if(IS_POST){
  43.                      $_POST['url'] = $this->checkUrl($_POST['url']);
  44.                      $this->all_insert('Diymen_class','/index');
  45.               }else{
  46.                      $class=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>0))->order('sort desc')->select();
  47.                      $this->assign('class',$class);
  48.                      $this->assign('wxsys',$this->_get_sys());
  49.                      $this->display();
  50.               }
  51.        }
  52.        public function  class_del(){
  53.               $class=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>$this->_get('id')))->order('sort desc')->find();
  54.               //echo M('Diymen_class')->getLastSql();exit;
  55.               if($class==false){
  56.                      $back=M('Diymen_class')->where(array('token'=>session('token'),'id'=>$this->_get('id')))->delete();
  57.                      if($back==true){
  58.                             $this->success('删除成功');
  59.                      }else{
  60.                             $this->error('删除失败');
  61.                      }
  62.               }else{
  63.                      $this->error('请删除该分类下的子分类');
  64.               }
  65.        }
  66.        public function  class_edit(){
  67.               $this->assign('wxsys',$this->_get_sys());
  68.               if(IS_POST){
  69.                      $_POST['id']=$this->_get('id');
  70.                      $_POST['url'] = $this->checkUrl($_POST['url']);
  71.                      $this->all_save('Diymen_class','/index?id='.$this->_get('id'));
  72.               }else{
  73.                      $data=M('Diymen_class')->where(array('token'=>session('token'),'id'=>$this->_get('id')))->find();
  74.                      if($data==false){
  75.                             $this->error('您所操作的数据对象不存在!');
  76.                      }else{
  77.                             $class=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>0))->order('sort desc')->select();//dump($class);
  78.                             $this->assign('class',$class);
  79.                             $this->assign('show',$data);
  80.                      }
  81.                      $this->display();
  82.               }
  83.        }
  84.       
  85.        function _get_sys($type='',$key=''){
  86.               $wxsys        = array(
  87.                             '扫码带提示',
  88.                             '扫码推事件',
  89.                             '系统拍照发图',
  90.                             '拍照或者相册发图',
  91.                             '微信相册发图',
  92.                             '发送位置',
  93.               );
  94.       
  95.               if($type == 'send'){
  96.                      $wxsys        = array(
  97.                                    '扫码带提示'=>'scancode_waitmsg',
  98.                                    '扫码推事件'=>'scancode_push',
  99.                                    '系统拍照发图'=>'pic_sysphoto',
  100.                                    '拍照或者相册发图'=>'pic_photo_or_album',
  101.                                    '微信相册发图'=>'pic_weixin',
  102.                                    '发送位置'=>'location_select',
  103.                      );
  104.                      return $wxsys[$key];
  105.                      exit;
  106.               }
  107.               return $wxsys;
  108.        }
  109.         private function unicode2utf8_2($str) { // 关于unicode编码转化的第二个函数,用于显示emoji表情
  110.             $str = '{"result_str":"' . $str . '"}'; // 组合成json格式
  111.             $strarray = json_decode ( $str, true ); // json转换为数组,利用 JSON 对 \uXXXX 的支持来把转义符恢复为 Unicode 字符(by 梁海)
  112.             return $strarray['result_str'];
  113.         }      
  114.       
  115.        public function  class_send(){
  116.               if(IS_GET){
  117.                      //dump($api);
  118.                      $url_get='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->thisWxUser['appid'].'&secret='.$this->thisWxUser['appsecret'];
  119.                      $json=json_decode($this->curlGet($url_get));
  120.                      if (!$json->errmsg){
  121.                             //return array('rt'=>true,'errorno'=>0);
  122.                      }else {
  123.                             $this->error('获取access_token发生错误:错误代码'.$json->errcode.',微信返回错误信息:'.$json->errmsg);
  124.                      }
  125.                     
  126.                      $data = '{"button":[';
  127.                      $class=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>0,'is_show'=>1))->limit(3)->order('sort desc')->select();//dump($class);
  128.                      $kcount=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>0,'is_show'=>1))->limit(3)->order('sort desc')->count();
  129.                      $k=1;
  130.                     
  131.                      foreach($class as $key=>$vo){
  132.                             //主菜单
  133.                                 if ($vo['emoji_code'] != '') {
  134.                                         $vo['title'] =  $this->unicode2utf8_2 ( '\u' . $vo['emoji_code']).$vo['title'];
  135.                                 }
  136.                             $data.='{"name":"'.$vo['title'].'",';
  137.                             $c=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>$vo['id'],'is_show'=>1))->limit(5)->order('sort desc')->select();
  138.                             $count=M('Diymen_class')->where(array('token'=>session('token'),'pid'=>$vo['id'],'is_show'=>1))->limit(5)->order('sort desc')->count();
  139.                             //子菜单
  140.                             $vo['url']=str_replace(array('{siteUrl}','&','&wecha_id={wechat_id}'),array($this->siteUrl,'&','&diymenu=1'),$vo['url']);
  141.                             if($c!=false){
  142.                                    $data.='"sub_button":[';
  143.                             }else{
  144.                                    if($vo['keyword']){
  145.                                           $data.='"type":"click","key":"'.$vo['keyword'].'"';
  146.                                    }else if($vo['url']){
  147.                                           $data.='"type":"view","url":"'.$vo['url'].'"';
  148.                                    }else if($vo['wxsys']){
  149.                                           $data.='"type":"'.$this->_get_sys('send',$vo['wxsys']).'","key":"'.$vo['wxsys'].'"';
  150.                                    }
  151.                             }
  152.                            
  153.                             $i=1;
  154.                             foreach($c as $voo){
  155.                                         if ($voo['emoji_code'] != '') {
  156.                                             $voo['title'] =  $this->unicode2utf8_2 ( '\u' . $voo['emoji_code']).$voo['title'];
  157.                                         }
  158.                                    $voo['url']=str_replace(array('{siteUrl}','&','&wecha_id={wechat_id}'),array($this->siteUrl,'&','&diymenu=1'),$voo['url']);
  159.                                    if($i==$count){
  160.                                           if($voo['keyword']){
  161.                                                  $data.='{"type":"click","name":"'.$voo['title'].'","key":"'.$voo['keyword'].'"}';            
  162.                                           }else if($voo['url']){
  163.                                                  $data.='{"type":"view","name":"'.$voo['title'].'","url":"'.$voo['url'].'"}';
  164.                                           }else if($voo['wxsys']){
  165.                                                  $data.='{"type":"'.$this->_get_sys('send',$voo['wxsys']).'","name":"'.$voo['title'].'","key":"'.$voo['wxsys'].'"}';
  166.                                           }
  167.                                    }else{
  168.                                           if($voo['keyword']){
  169.                                                  $data.='{"type":"click","name":"'.$voo['title'].'","key":"'.$voo['keyword'].'"},';            
  170.                                           }else if($voo['url']){
  171.                                                  $data.='{"type":"view","name":"'.$voo['title'].'","url":"'.$voo['url'].'"},';
  172.                                           }else if($voo['wxsys']){                                                
  173.                                                  $data.='{"type":"'.$this->_get_sys('send',$voo['wxsys']).'","name":"'.$voo['title'].'","key":"'.$voo['wxsys'].'"},';
  174.                                           }
  175.                                    }
  176.                                    $i++;
  177.                             }
  178.                             if($c!=false){
  179.                                    $data.=']';
  180.                             }
  181.                             if($k==$kcount){
  182.                                    $data.='}';
  183.                             }else{
  184.                                    $data.='},';
  185.                             }
  186.                             $k++;
  187.                      }
  188.                      $data.=']}';
  189.                      file_get_contents('https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='.$json->access_token);
  190.                      $url='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$json->access_token;
  191.                      $rt=$this->api_notice_increment($url,$data);
  192.                      if($rt['rt']==false){
  193.                             $errmsg=GetErrorMsg::wx_error_msg($rt['errorno']);
  194.                             $this->error('操作失败,'.$rt['errorno'].':'.$errmsg);
  195.                      }else{
  196.                             $this->success('操作成功');
  197.                      }
  198.                      exit;
  199.               }else{
  200.                      $this->error('非法操作');
  201.               }
  202.        }
  203.        function api_notice_increment($url, $data){
  204.               $ch = curl_init();
  205.               $header = "Accept-Charset: utf-8";
  206.               curl_setopt($ch, CURLOPT_URL, $url);
  207.               curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  208.               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  209.               curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  210.               curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
  211.               curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  212.               curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  213.               curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  214.               curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  215.               curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  216.               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  217.               $tmpInfo = curl_exec($ch);
  218.               $errorno=curl_errno($ch);
  219.               if ($errorno) {
  220.                      return array('rt'=>false,'errorno'=>$errorno);
  221.               }else{
  222.                      $js=json_decode($tmpInfo,1);
  223.                      if ($js['errcode']=='0'){
  224.                             return array('rt'=>true,'errorno'=>0);
  225.                      }else {
  226.                             $errmsg=GetErrorMsg::wx_error_msg($js['errcode']);
  227.                             $this->error('发生错误:错误代码'.$js['errcode'].',微信返回错误信息:'.$errmsg);
  228.                      }
  229.               }
  230.        }
  231.        function curlGet($url){
  232.               $ch = curl_init();
  233.               $header = "Accept-Charset: utf-8";
  234.               curl_setopt($ch, CURLOPT_URL, $url);
  235.               curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
  236.               curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  237.               curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  238.               curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
  239.               curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  240.               curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  241.               curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  242.               curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  243.               curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  244.               curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  245.               $temp = curl_exec($ch);
  246.               return $temp;
  247.        }
  248.        protected function checkUrl($url)
  249.        {
  250.               if(strpos($url, "wecha_id") !== false){
  251.                      if (strpos($url, "{wechat_id}") === false) {
  252.                             $this->error('链接中设置的wecha_id ,不合法请从功能库选择链接');
  253.                      }
  254.               }
  255.               return $url;
  256.        }
  257. }
  258.        ?>
复制代码



平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

 
QQ在线咨询
售前咨询热线
0532-88371356
售后服务微信
pingduwangzhan
快速回复 返回顶部 返回列表