• 在上篇文章实现微信扫码获取带指定参数时,微信公众号后台启用了服务器配置,导致之前设置好的微信自定义菜单失效。 开启了服务器配置,就无法用之前的方式在微信公众平台配置自定义菜单 此时,我们要通过接口来...

    在上篇文章实现微信扫码获取带指定参数时,微信公众号后台启用了服务器配置,导致之前设置好的微信自定义菜单失效。
    这里写图片描述
    开启了服务器配置,就无法用之前的方式在微信公众平台配置自定义菜单
    此时,我们要通过接口来配置微信自定义菜单,微信自定义菜单接口链接

    这里写图片描述

    首先,我们打开微信公众平台接口调试工具 接口调试工具
    1.通过appid以及secret来获取access_token,
    这里写图片描述

    2.组织创建菜单内容。微信提供了许多不同功能的按钮类型,可根据实际需求组织创建。
    这里简单的创建两个1级view类型按钮:即用户点击按钮实现跳转URL。

    {
        "button": [
            {
                "type": "view", 
                "name": "百度", 
                "url": "http://www.baidu.com"
            }, 
            {
                "type": "view", 
                "name": "淘宝", 
                "url": "http://www.taobao.com"
            }
        ]
    }

    3.在接口调试工具- - -选择 ‘自定义菜单’的接口类型,填入access_token,以及刚刚构建好的菜单内容。

    这里写图片描述

    点击检查问题,如果填写参数正确,则请求成功。
    这里写图片描述

    此时,重新打开或重新关注公众号,即能看到刚刚构建的自定义菜单已经生效。

    展开全文
  • 微信接口自定义菜单在线客服微信支付
  • var map = require('../router-config').getMapping() , wechat = require('wechat') , fs = require('fs'); var API = wechat.API , appid = 'xxx' , secret = 'xxxx';...var api = new API(appid,...
    var map = require('../router-config').getMapping()
      , wechat = require('wechat')
      , fs = require('fs');
    
    var API = wechat.API
      , appid = 'xxx'
      , secret = 'xxxx';
    var api = new API(appid, secret);
    
    var router = express.Router();
      router.use('/', wechat('wechatToken', function(req, res, next) {
        var menu = fs.readFileSync('./node-app/config/wechat-menu.json');
        if(menu) {
          menu = JSON.parse(menu);
        }
        api.createMenu(menu, function(err, result){});
    
        // 微信输入信息都在req.weixin上
        var message = req.weixin;
        var msgType = message.MsgType;
        if(msgType == 'event'){
          var eventType = message.Event;
          if(eventType) {
            eventType = eventType.toLowerCase();
          }
          if(eventType == 'subscribe') {
              // 新用户关注/订阅事件
              subscribeEvent(res);
          } else if(eventType == 'click') {
            clickEvent(message, res);
          } else {
            notFoundEvent(eventType, res);
          }
        }

     

     

    wechat-menu.json

    {
      "button": [
        {
          "name": "我的账号",
          "sub_button": [
            {
              "type": "click",
              "name": "我的帐户",
              "key": "V1001_MY_ACCOUNT"
            },
            {
              "type": "click",
              "name": "已投项目",
              "key": "V1002_BID_PROJECTS"
            },
            {
              "type": "click",
              "name": "回款计划",
              "key": "V1003_RETURN_PLAN"
            },
            {
              "type": "click",
              "name": "交易明细",
              "key": "V1004_TRANS_DETAIL"
            },
            {
              "type": "click",
              "name": "注册/绑定",
              "key": "V1005_REGISTER_BIND"
            }
          ]
        },
        {
          "type": "view",
          "name": "马上投资",
          "url": "http://qiaole.sinaapp.com/"
        },
        {
          "name": "送钱活动",
          "sub_button": [
            {
              "type": "view",
              "name": "注册送红包",
              "url": "http://qiaole.sinaapp.com/"
            },
            {
              "type": "click",
              "name": "邀请好友一起赚钱",
              "key": "V1001_GOOD"
            },
            {
              "type": "view",
              "name": "加入我们",
              "url": "http://qiaole.sinaapp.com/"
            },
            {
              "type": "view",
              "name": "APP下载",
              "url": "http://qiaole.sinaapp.com/"
            }
          ]
        }
      ]
    }

     

    展开全文
  • 微信开发自定义菜单

    2017-07-12 14:19:42
    微信开发的过程中,我们发现有很多的权限我们个人的订阅号是没有的,所以呢,我们采用测试号来进行开发。测试号有它自己的ID和密码,有自己的URL绑定地址以及绑定域名的地方,注意绑定域名不要加http://,只包括自己...

    微信开发的过程中,我们发现有很多的权限我们个人的订阅号是没有的,所以呢,我们采用测试号来进行开发。测试号有它自己的ID和密码,有自己的URL绑定地址以及绑定域名的地方,注意绑定域名不要加http://,只包括自己的域名,例如 xx.duapp.com  其余什么都不要。


    下面是JSSDK中对于php语言的sample.phpde 的改写内容,注意,需要修改的只有APPID 和APPSECRET(从测试号赋值过来即可)。另外一点注意,如果你的accesstoken是调用一次API就获取一次的话,那么尽量只自己测试,权限次数虽然写着2000,但是实际只有100次左右,不要让太多的人频繁的点击测试。

    测试录音接口需要将音频的id传递给playvoice,需要设置一个变量,进行传递~~~


    <?php
    require_once "jssdk.php";
    $jssdk = new JSSDK("你的appid", "你的APPsecret");
    $signPackage = $jssdk->GetSignPackage();
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initital-scale=1">
      <title>腾讯API</title>
    </head>
    <body>
      <button id="btn">点击显示总部</button>
      <button id="ve1">开始录音</button>
      <button id="ve2">停止录音</button>
      <button id="ve3">播放录音</button>
      
    </body>
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script>

      /*
       * 注意:
       * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
       * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
       * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
       *
       * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
       * 邮箱地址:weixin-open@qq.com
       * 邮件主题:【微信JS-SDK反馈】具体问题
       * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
       */
      wx.config({
        debug: true,
        appId: '<?php echo $signPackage["appId"];?>',
        timestamp: <?php echo $signPackage["timestamp"];?>,
        nonceStr: '<?php echo $signPackage["nonceStr"];?>',
        signature: '<?php echo $signPackage["signature"];?>',
        jsApiList: [
          // 所有要调用的 API 都要加到这个列表中
     
     "onMenuShareAppMessage",
     "openLocation",
     "startRecord",
     "stopRecord",
     "playVoice"
     
        ]
      });
      wx.ready(function () {
        // 在这里调用 API
    wx.onMenuShareAppMessage({
        title: '分享标题', // 分享标题
        desc: '分享描述', // 分享描述
        link: 'http://www.baidu.com', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: 'http://1995zp.duapp.com/demo.jpg', // 分享图标
        type: 'link', // 分享类型,music、video或link,不填默认为link
        dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
        success: function () { 
            // 用户确认分享后执行的回调函数
    alert("ok");
        },
        cancel: function () { 
            // 用户取消分享后执行的回调函数
    alert("false");
        }
    });
    document.getElementById("btn").onclick = function(){
    wx.openLocation({
             latitude: 65.4, // 纬度,浮点数,范围为90 ~ -90
            longitude: 70.7, // 经度,浮点数,范围为180 ~ -180。
             name: '北京', // 位置名
            address: '北京昌平区金利全D区', // 地址详情说明
            scale: 20, // 地图缩放级别,整形值,范围从1~28。默认为最大
             infoUrl: 'http://wwww.baidu.com/' // 在查看位置界面底部显示的超链接,可点击跳转
           });

    }

    var ve1 = document.getElementById("ve1");
            var ve2 = document.getElementById("ve2");
            var ve3 = document.getElementById("ve3");
            ve1.onclick = function () {
                wx.startRecord();
            }
            var vv = null;
            ve2.onclick = function () {
                wx.stopRecord({
                    success: function (res) {
                        var localId = res.localId;
                        vv = localId;
                    }
                });
            }
            ve3.onclick = function () {
                wx.playVoice({
                    localId: vv // 需要播放的音频的本地ID,由stopRecord接口获得
                });
            }



    });
    </script>
    </html>



    展开全文
  • 最近几个月一直从事微信开发,从刚开始的懵懂渐渐成长了一点。今天觉得微信底部自定义菜单,如果能在html的页面上也能显示就好了. 记得以前看过某个网页有类似效果.查找了该网页的css. ok现在html css 实现微信自定义...

             最近几个月一直从事微信开发,从刚开始的懵懂渐渐成长了一点。今天觉得微信底部自定义菜单,如果能在html的页面上也能显示就好了.

    记得以前看过某个网页有类似效果.查找了该网页的css.  ok现在html css 实现微信自定义菜单效果.

    不多说直接上代码。

    /**
     * 仿微信自定义菜单
     * 
     * @author xuyw
     * @email xyw10000@163.com
     * @date 2014-07-27
     */


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
     <head>
      <title> New Document </title>
      <meta name="Generator" content="EditPlus">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <link rel="stylesheet" type="text/css" href="menu.css" media="all">
     </head>
    
     <body>
     <div class="bg">
    				<img src="imgs/home-default17.jpg" width="100%" height="100%;">
    			</div>
    <div data-role="widget" data-widget="nav4" class="nav4">
    			<nav>
    				<div id="nav4_ul" class="nav_4">
    					<ul class="box">
    								<li>
    																	<a href="javascript:;" class=""><span>关于我们</span></a>
    																	
    								
    																	<dl>
    																					<dd>
    																									<a href="#"><span>电话</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>地址</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>在线客服</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>在线QQ</span></a>
    																							</dd>
    																			</dl>
    															</li>
    																									<li>
    																	<a href="javascript:;" class=""><span>电商</span></a>
    																	
    								
    																	<dl>
    																					<dd>
    																									<a href="#"><span>微信会员卡</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>微社区</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>微投票</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>微调研</span></a>
    																							</dd>
    																			</dl>
    															</li>
    																										<li>
    																	<a href="javascript:;" class="on"><span>会员专区</span></a>
    																	
    								
    																	<dl>
    																					<dd>
    																									<a href="#"><span>微商城</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>微餐饮</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>微团购</span></a>
    																							</dd>
    																					<dd>
    																									<a href="#"><span>微汽车</span></a>
    																							</dd>
    																			</dl>
    															</li>
    																							
    												</ul>
    				</div>
    			</nav>
    			<div id="nav4_masklayer" class="masklayer_div on"> </div>
    			<script src="nav4.js"></script>
    			<script type="text/javascript">
    				nav4.bindClick(document.getElementById("nav4_ul").querySelectorAll("li>a"), document.getElementById("nav4_masklayer"));
    			</script>
    		</div>
    																
     </body>
    </html>
    

    css

    *{padding:0; margin:0;}
    .bg {
    position: absolute;
    z-index: -1;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    opacity: 0.8;
    }
    ul, ol, li, dl {
    list-style-type: none;
    }
    .box {
    width: 100%;
    display: -webkit-box;
    display: -moz-box;
    -webkit-box-orient: horizontal;
    -moz-box-orient: horizontal;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    }
    .box > * {
    -webkit-box-flex: 1;
    -moz-box-flex: 1;
    }
    a:link, a:visited {
    color: #575757;
    text-decoration: none;
    }
    a {
    text-decoration: none;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0.35);
    }
    a:link, a:visited {
    color: #575757;
    text-decoration: none;
    }
    a {
    text-decoration: none;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0.35);
    }
    
    .nav4{
    	height:45px;
    }
    .nav4 ul{
    	position:fixed;
    	z-index:200;
    	bottom:0;
    	left:0;
    	width:100%
    }
    .nav4 li{
    	border:1px solid rgba(190,190,190,1);
    	height:45px;
    	border-bottom:0;
    	border-right:0;
    	position:relative;
    	-webkit-box-shadow:inset 0 0 3px #fff;
    }
    .nav4 li:nth-of-type(1){border-left;0;}
    .nav4 li>a{
    	font-size:15px;
    	-webkit-box-sizing:border-box;
    	box-sizing:border-box;
    	/*border:1px solid #f9f8f9;*/
    	-webkit-tap-highlight-color:rgba(0,0,0,0);
    	border-bottom:0;
    	display:block;
    	line-height:45px;
    	text-align:center;
    	background:-webkit-gradient(linear, 0 0, 0 100%, from(#f1f1f1), to(#dcdcdc), color-stop(35% ,#ededed), color-stop(50%, #e3e3e3) );
    }
    .nav4 li>a:only-child span{
    	background:none;
    	padding-left:0;
    }
    .nav4 li>a.on + dl{
    	display: block;
    }
    .nav4 li>a span{
    	color: #4f4d4f;
    	display: inline-block;
    	padding-left: 15px;
    	background: url(imgs/1.svg#2) no-repeat 4px 18px;
    	-webkit-background-size: 9px auto;
    	text-shadow:0px 1px 0px #ffffff;
    }
    /***********************/
    .nav4 dl{
    	display:none;
    	position:absolute;
    	z-index:220;
    	bottom:60px;
    	left:50%;
    	width:100px;
    	margin-left:-50px;
    	background:red;
    	/*min-height:100px;*/
    	background:#e4e3e2;
    	/*border:1px solid #afaeaf;*/
    	border-radius:5px;
    	-webkit-box-shadow:inset 0 0 3px #fff;
    	background:url(imgs/2.svg#3) no-repeat center center;
    	-webkit-background-size:100%;
    	background-size:100%;
    }
    /*, .nav4 dl:after*/
    .nav4 dl:before{
    	content:"";
    	display:inline-block;
    	position:absolute;
    	z-index:240;
    	bottom:0;
    	left:50%;
    	/*width:0;
    	height:0;
    	border:8px solid red;
    	border-color:#afaeaf transparent transparent transparent;
    	margin-left:-8px;
    	margin-bottom:-16px;*/
    	width:10px;
    	height:8px;
    	background: url(imgs/1.svg#2) no-repeat center -55px;
    	-webkit-background-size: 10px auto;
    	bottom: -7px;
    	margin-left: -5px;
    }
    /*.nav4 dl:after{
    	z-index:241;
    	border-color:#e4e3e2 transparent transparent transparent;
    	margin-bottom:-15px;
    }*/
    .nav4 dl dd{
    	line-height:45px;
    	text-align:center;
    	background:-webkit-gradient(linear, 0 0, 100% 0, from(rgba(194,194,194,0.8)), to(rgba(194,194,194,0.8)), color-stop(50%, rgba(194,194,194,0.8)));
    	background-size:80% 1px;
    	background-repeat:no-repeat;
    	background-position: center bottom;
    	/*background: url(imgs/3.svg#4) no-repeat center bottom;
    	-webkit-background-size:100px 1px;*/
    }
    .nav4 dl dd:last-of-type{
    	background:none;
    }
    .nav4 dl dd a{
    	font-size: 15px;
    	display:block;
    	color:#4f4d4f;
    	text-shadow:0px 1px 0px #ffffff;
    	white-space: pre;
    	overflow: hidden;
    	text-overflow: ellipsis;
    }
    .nav4 .masklayer_div{
    	display: none;
    	position: fixed;
    	top: 0;
    	left: 0;
    	width: 100%;
    	height: 100%;
    	z-index: 180;
    	background: rgba(0,0,0,0);
    }
    .nav4 .masklayer_div.on{display: block;}
    js

    var nav4 =(function(){
    	bindClick = function(els, mask){
    		if(!els || !els.length){return;}
    		var isMobile = "ontouchstart" in window;
    		for(var i=0,ci; ci = els[i]; i++){
    			ci.addEventListener("click", evtFn, false);
    		}
    
    		function evtFn(evt, ci){
    			ci =this;
    			for(var j=0,cj; cj = els[j]; j++){
    				if(cj != ci){
    					console.log(cj);
    					cj.classList.remove("on");
    				}
    			}
    			if(ci == mask){mask.classList.remove("on");return;}
    			switch(evt.type){
    				case "click":
    					var on = ci.classList.toggle("on");
    					mask.classList[on?"add":"remove"]("on");
    				break;
    			}
    		}
    		mask.addEventListener(isMobile?"touchstart":"click", evtFn, false);
    	}
    	return {"bindClick":bindClick};
    })();


    微信自定义菜单

    效果图

    附上下载链接 http://download.csdn.net/detail/a714115852/7684935

    展开全文
  • 微信开发自定义回复文本&lt;?php namespace Home\Controller; use Think\Controller; use LaneWeChat\Core\Curl; class AutoreplyController extends Controller { private $mp; public function _initialize...

    微信开发自定义回复文本

    <?php
    namespace Home\Controller;
    use Think\Controller;
    use LaneWeChat\Core\Curl;
    
    class AutoreplyController extends Controller
    {
    	private $mp;
    	public function _initialize(){
    		$mp = getCurrentMp();
    		if(empty($mp)){
    			$this->error('无使用的公众号',U('mp/index'));
    			exit;
    		}else{
    			$this->mp = $mp;
    		}
    	}
    
    	public function index(){
             $this->display('replytext');
    	}
    	//回复文本消息
    	public function replytext(){
    		$data['content'] = I('content');
    		$replyid = M('mp_reply_text')->add($data);
    		if($replyid){
    		$mp = $this->mp;
    		$arr['mp_id'] = $mp['id'];
    		$arr['type'] = 'text';
    		$arr['keyword'] = I('keyword');
    		$arr['reply_id'] = $replyid;
    
    		$ret = M('mp_rule')->add($arr);
    		if($ret){
    			$this->ajaxReturn(array('msg'=>'添加成功','url'=>U('keyword',['type'=>'text'])));
    		}else{
    				$this->ajaxReturn(array('msg'=>$ret));
    			
    		}
    		}else{
    				$this->ajaxReturn(array('msg'=>$ret));
    		}
    	}
    }

    自定义菜单点击文本回复在wechatquest.php中设置为

     public static function eventClick(&$request){
            //获取该分类的信息
            $eventkey = $request['eventkey'];
            $request['content'] = $eventkey;
            return self::text($request);
            // $content = '收到点击菜单事件,您设置的key是' . $eventKey;
            // return ResponsePassive::text($request['fromusername'], $request['tousername'], $content);
        }

    展开全文
  • 每个微信用户对于每个公众号,有一个唯一的OpenID。对于其它公众号,OpenID是不同的 用途: 通过 OpenID,能访问到用户的基本信息跟后台应用(比如商品销售)配合,可以管理用户的订单等数据 获取方法 1...
  • 快捷生成json格式的微信公众号自定义菜单;Quickly generate the WeChat public custom menu in json format
  • 微信公众号自定义菜单编辑器,适用于认证订阅号、服务号和测试公众号。使用NwJs NodeJs AngularJs开发成桌面版,可配置、查询、编辑、发布公众号菜单
  • 微信企业号自定义菜单创建
  • 微信公众号开发5-自定义菜单-微信开发php讲师介绍: 秦子恒,CEO/董事长/总经理,大秦电商创始人,专注网络技术的电商应用。已经出品《1小时快速建站》《微博营销实战》《PHP采集》《网络招商系统》课程介绍: ...
  • 微信开发时候如果按照接口调试工具进行自定义菜单的设置非常麻烦而且容易出错,尤其是使用测试号进行测试的时候,由于测试后没有自定义菜单的设置功能,我们可以自己封装一个自定义菜单的方法对其进行自定义菜单的...
  • 微信开发 自定义菜单 菜单事件推送
  • 很久以前写的微信自定义菜单由于当时没有保存源码,现在再写服务器后台发布页面又要写一遍(在网上搜了一遍没有找到这方面UI和交互的,也没有尝试去扒微信公众平台的),花了些时间又写了一个,除了没有更换菜单位置...
  • 最近弄了几天微信自定义菜单开发,对比着接口文档写了一段时间,但是一直都有错误,我用了接口在线调试工具https://mp.weixin.qq.com/debug/看到了一个菜单的初级效果,在实现自定义菜单开发中主要参考了这篇...
  • 此文件可以直接使用,采用Jquery和H5结合实现微信公众号自定义菜单功能
  • Exception in thread "main" java.lang.IllegalArgumentException at java.net.URI.create(URI.java:841) at org.apache.http.client.methods.HttpPost.(HttpPost.java:76) at com.pccw.util.WeixinUtil.doPostSt
  • 微信开发交流群:148540125系列文章参考地址 极速开发微信公众号欢迎留言、转发 项目源码参考地址 点我点我–欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开发者,重源码分析消息是如何...
1 2 3 4 5 ... 20
收藏数 15,563
精华内容 6,225