2017-11-08 09:00:48 towtotow 阅读数 965
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27842 人正在学习 去看看 秦子恒

前面我们已经知道,

上传永久视频时,

需要添加视频的标题和介绍。


有时候我们的标题和介绍中会包含中文,

在使用php对它们进行json编码时,

当php版本小于5.3时,

会出现unicode编码,

而不是中文。


38forever_jsong.jpg


这里需要我们自己编程代码实现,

这一节微信开发教程中,

子恒老师带你实现,

还可以解决json中多级中文的情况,

这个功能在微信后面的微信菜单开发中也会用到…

微信公众号开发,json里有中文unicode的解决方法视频教程在线观看

http://edu.csdn.net/course/detail/2860/48493

2017-11-01 10:28:06 lohannes 阅读数 661
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27842 人正在学习 去看看 秦子恒
$(document).ready(function(){
  		$('.select_one').change(function(){
  			var cli = $('.select_one').val();
  			if(cli != "0"){
	  			$('.dis_one').val('');
	  			$('.regain_one').val('0');
	  			$('#key_one').attr('disabled',false);
	  			$('.dis_one').attr('disabled',true);
	  			$('.dis_one').attr('placeholder',"二级菜单已失效!");
  			}else{
  				$('#key_one').attr('disabled',true);
	  			$('.dis_one').attr('disabled',false);
	  			$('.dis_one').attr('placeholder',"二级菜单已生效!");
  			}
  		});
  		$('.select_two').change(function(){
  			var cli = $('.select_two').val();
  			if(cli != "0"){
	  			$('.dis_two').val('');
	  			$('.regain_two').val('0');
	  			$('#key_two').attr('disabled',false);
	  			$('.dis_two').attr('disabled',true);
	  			$('.dis_two').attr('placeholder',"二级菜单已失效!");
  			}else{
  				$('#key_two').attr('disabled',true);
	  			$('.dis_two').attr('disabled',false);
	  			$('.dis_two').attr('placeholder',"二级菜单已生效!");
  			}
  		});
  		$('.select_three').change(function(){
  			var cli = $('.select_three').val();
  			if(cli != "0"){
	  			$('.dis_three').val('');
	  			$('.regain_three').val('0');
	  			$('#key_three').attr('disabled',false);
	  			$('.dis_three').attr('disabled',true);
	  			$('.dis_three').attr('placeholder',"二级菜单已失效!");
  			}else{
  				$('#key_three').attr('disabled',true);
	  			$('.dis_three').attr('disabled',false);
	  			$('.dis_three').attr('placeholder',"二级菜单已生效!");
  			}
  		});
  		
  		
  		$('#create').click(function(){
  			var name_one = $('#name_one').val();
	  		var name_one_one = $('#name_one_one').val();
	  		var name_one_two = $('#name_one_two').val();
	  		var name_one_three = $('#name_one_three').val();
	  		var name_one_four = $('#name_one_four').val();
	  		var name_one_five = $('#name_one_five').val();
	  		
	  		var name_two = $('#name_two').val();
	  		var name_two_one = $('#name_two_one').val();
	  		var name_two_two = $('#name_two_two').val();
	  		var name_two_three = $('#name_two_three').val();
	  		var name_two_four = $('#name_two_four').val();
	  		var name_two_five = $('#name_two_five').val();
	  		
	  		var name_three = $('#name_three').val();
	  		var name_three_one = $('#name_three_one').val();
	  		var name_three_two = $('#name_three_two').val();
	  		var name_three_three = $('#name_three_three').val();
	  		var name_three_four = $('#name_three_four').val();
	  		var name_three_five = $('#name_three_five').val();
	  		
	  		var select_one = $('.select_one').val();
	  		var select_one_one = $('.select_one_one').val();
	  		var select_one_two = $('.select_one_two').val();
	  		var select_one_three = $('.select_one_three').val();
	  		var select_one_four = $('.select_one_four').val();
	  		var select_one_five = $('.select_one_five').val();
	  		
	  		var select_two = $('.select_two').val();
	  		var select_two_one = $('.select_two_one').val();
	  		var select_two_two = $('.select_two_two').val();
	  		var select_two_three = $('.select_two_three').val();
	  		var select_two_four = $('.select_two_four').val();
	  		var select_two_five = $('.select_two_five').val();
	  		
	  		var select_three = $('.select_three').val();
	  		var select_three_one = $('.select_three_one').val();
	  		var select_three_two = $('.select_three_two').val();
	  		var select_three_three = $('.select_three_three').val();
	  		var select_three_four = $('.select_three_four').val();
	  		var select_three_five = $('.select_three_five').val();
	  		
	  		var key_one = $('#key_one').val();
	  		var key_one_one = $('#key_one_one').val();
	  		var key_one_two = $('#key_one_two').val();
	  		var key_one_three = $('#key_one_three').val();
	  		var key_one_four = $('#key_one_four').val();
	  		var key_one_five = $('#key_one_five').val();
	  		
	  		var key_two = $('#key_two').val();
	  		var key_two_one = $('#key_two_one').val();
	  		var key_two_two = $('#key_two_two').val();
	  		var key_two_three = $('#key_two_three').val();
	  		var key_two_four = $('#key_two_four').val();
	  		var key_two_five = $('#key_two_five').val();
	  		
	  		var key_three = $('#key_three').val();
	  		var key_three_one = $('#key_three_one').val();
	  		var key_three_two = $('#key_three_two').val();
	  		var key_three_three = $('#key_three_three').val();
	  		var key_three_four = $('#key_three_four').val();
	  		var key_three_five = $('#key_three_five').val();
	  		
	  		
	  		
	  		var json = [];
	  		json.push('{');
	  		json.push('"button":[');
	  		/* 菜单一 json begin*/  
	  		if(name_one != ""){
		  		if (select_one != '0' && name_one != "") {
			  		json.push('{"type":"'+select_one+'",');
			  		json.push('"name":"'+name_one+'",');
			  		if (select_one == 'click'){
			  			json.push('"key":"'+key_one+'"}');
			  		}
			  		if (select_one == 'view') {
			  			json.push('"url":"'+key_one+'"}');
			  		}
			  		if(name_two == "" && name_three == ""){
			  			json.push(']');
			  		}
		  		}
		  		if (select_one == '0' && name_one != ""){
		  			json.push('{"name":"'+name_one+'",');
		  			json.push('"sub_button":[');
		  			if (select_one_one != '0') {
		  		  		json.push('{"type":"'+select_one_one+'",');
		  		  		json.push('"name":"'+name_one_one+'",');
		  		  		if (select_one_one == 'click'){
		  		  			json.push('"key":"'+key_one_one+'"}');
		  		  		}
		  		  		if (select_one_one == 'view') {
		  		  			json.push('"url":"'+key_one_one+'"}');
		  		  		}
		  	  		}
		  			if (select_one_two != '0') {
		  		  		json.push(',{"type":"'+select_one_two+'",');
		  		  		json.push('"name":"'+name_one_two+'",');
		  		  		if (select_one_two == 'click'){
		  		  			json.push('"key":"'+key_one_two+'"}');
		  		  		}
		  		  		if (select_one_two == 'view') {
		  		  			json.push('"url":"'+key_one_two+'"}');
		  		  		}
		  		  	   }
		  		   if (select_one_three != '0') {
		  			   json.push(',{"type":"'+select_one_three+'",');
		  		  	   json.push('"name":"'+name_one_three+'",');
		  		  	   if (select_one_three == 'click'){
		  		  		   json.push('"key":"'+key_one_three+'"}');
		  		  	   }
		  		  	   if (select_one_three == 'view') {
		  		  		   json.push('"url":"'+key_one_three+'"}');
		  		      }
		  		   }
		  		   if (select_one_four != '0') {
		  			   json.push(',{"type":"'+select_one_four+'",');
		  		  	   json.push('"name":"'+name_one_four+'",');
		  		  	   if (select_one_four == 'click'){
		  		  		   json.push('"key":"'+key_one_four+'"}');
		  		  	   }
		  		  	   if (select_one_four == 'view') {
		  		  		   json.push('"url":"'+key_one_four+'"}');
		  		      }
		  		   }
		  		   if (select_one_five != '0') {
		  			   json.push(',{"type":"'+select_one_five+'",');
		  		  	   json.push('"name":"'+name_one_five+'",');
		  		  	   if (select_one_five == 'click'){
		  		  		   json.push('"key":"'+key_one_five+'"}');
		  		  	   }
		  		  	   if (select_one_five == 'view') {
		  		  		   json.push('"url":"'+key_one_five+'"}');
		  		      }
		  	  	   }
			  	   json.push(']');
		  	   	   json.push('}');
		  		}
	  		}
	  		/* 菜单一 json end*/  
	  	   	/* 菜单二 json begin*/
	  		if(name_two != ""){
		  		if (select_two != '0' && name_two != "") {
		  			if (name_one != "") {
		  				json.push(',');
		  			}
			  		json.push('{"type":"'+select_two+'",');
			  		json.push('"name":"'+name_two+'",');
			  		if (select_two == 'click'){
			  			json.push('"key":"'+key_two+'"}');
			  		}
			  		if (select_two == 'view') {
			  			json.push('"url":"'+key_two+'"}');
			  		}
			  		if(select_two == "0"){
			  			json.push(']');
			  		}
		  		}
		  		if(select_two == '0' && name_two != ""){
		  			if (name_one != "") {
		  				json.push(',');
		  			}
		  			json.push('{"name":"'+name_two+'",');
		  			json.push('"sub_button":[');
		  			if (select_two_one != '0') {
		  		  		json.push('{"type":"'+select_two_one+'",');
		  		  		json.push('"name":"'+name_two_one+'",');
		  		  		if (select_two_one == 'click'){
		  		  			json.push('"key":"'+key_two_one+'"}');
		  		  		}
		  		  		if (select_two_one == 'view') {
		  		  			json.push('"url":"'+key_two_one+'"}');
		  		  		}
		  	  		}
		  			if (select_two_two != '0') {
		  		  		json.push(',{"type":"'+select_two_two+'",');
		  		  		json.push('"name":"'+name_two_two+'",');
		  		  		if (select_two_two == 'click'){
		  		  			json.push('"key":"'+key_two_two+'"}');
		  		  		}
		  		  		if (select_two_two == 'view') {
		  		  			json.push('"url":"'+key_two_two+'"}');
		  		  		}
		  		  	   }
		  		   if (select_two_three != '0') {
		  			   json.push(',{"type":"'+select_two_three+'",');
		  		  	   json.push('"name":"'+name_two_three+'",');
		  		  	   if (select_two_three == 'click'){
		  		  		   json.push('"key":"'+key_two_three+'"}');
		  		  	   }
		  		  	   if (select_two_three == 'view') {
		  		  		   json.push('"url":"'+key_two_three+'"}');
		  		      }
		  		   }
		  		   if (select_two_four != '0') {
		  			   json.push(',{"type":"'+select_two_four+'",');
		  		  	   json.push('"name":"'+name_two_four+'",');
		  		  	   if (select_two_four == 'click'){
		  		  		   json.push('"key":"'+key_two_four+'"}');
		  		  	   }
		  		  	   if (select_two_four == 'view') {
		  		  		   json.push('"url":"'+key_two_four+'"}');
		  		      }
		  		   }
		  		   if (select_two_five != '0') {
		  			   json.push(',{"type":"'+select_two_five+'",');
		  		  	   json.push('"name":"'+name_two_five+'",');
		  		  	   if (select_two_five == 'click'){
		  		  		   json.push('"key":"'+key_two_five+'"}');
		  		  	   }
		  		  	   if (select_two_five == 'view') {
		  		  		   json.push('"url":"'+key_two_five+'"}');
		  		      }
		  	  	   }
			  	   json.push(']');
		  	   	   json.push('}');
		  		}
	  		}
	  		/* 菜单二 json end*/
	  		/* 菜单三 json begin*/
	  		if(name_three != ""){
		  		if (select_three != '0' && name_three != "") {
		  			if (name_two != "" || name_one != "") {
		  				json.push(',');
		  			}
			  		json.push('{"type":"'+select_three+'",');
			  		json.push('"name":"'+name_three+'",');
			  		if (select_three == 'click'){
			  			json.push('"key":"'+key_three+'"}');
			  		}
			  		if (select_three == 'view') {
			  			json.push('"url":"'+key_three+'"}');
			  		}
			  		if(select_three == "0"){
			  			json.push(']');
			  		}
		  		}
		  		if (select_three == '0' && name_three != "") {
		  			if (name_two != "" || name_one != "") {
		  				json.push(',');
		  			}
		  			json.push('{"name":"'+name_three+'",');
		  			json.push('"sub_button":[');
		  			if (select_three_one != '0') {
		  		  		json.push('{"type":"'+select_three_one+'",');
		  		  		json.push('"name":"'+name_three_one+'",');
		  		  		if (select_three_one == 'click'){
		  		  			json.push('"key":"'+key_three_one+'"}');
		  		  		}
		  		  		if (select_three_one == 'view') {
		  		  			json.push('"url":"'+key_three_one+'"}');
		  		  		}
		  	  		}
		  			if (select_three_two != '0') {
		  		  		json.push(',{"type":"'+select_three_two+'",');
		  		  		json.push('"name":"'+name_three_two+'",');
		  		  		if (select_three_two == 'click'){
		  		  			json.push('"key":"'+key_three_two+'"}');
		  		  		}
		  		  		if (select_three_two == 'view') {
		  		  			json.push('"url":"'+key_three_two+'"}');
		  		  		}
		  		  	   }
		  		   if (select_three_three != '0') {
		  			   json.push(',{"type":"'+select_three_three+'",');
		  		  	   json.push('"name":"'+name_three_three+'",');
		  		  	   if (select_three_three == 'click'){
		  		  		   json.push('"key":"'+key_three_three+'"}');
		  		  	   }
		  		  	   if (select_three_three == 'view') {
		  		  		   json.push('"url":"'+key_three_three+'"}');
		  		      }
		  		   }
		  		   if (select_three_four != '0') {
		  			   json.push(',{"type":"'+select_three_four+'",');
		  		  	   json.push('"name":"'+name_three_four+'",');
		  		  	   if (select_three_four == 'click'){
		  		  		   json.push('"key":"'+key_three_four+'"}');
		  		  	   }
		  		  	   if (select_three_four == 'view') {
		  		  		   json.push('"url":"'+key_three_four+'"}');
		  		      }
		  		   }
		  		   if (select_three_five != '0') {
		  			   json.push(',{"type":"'+select_three_five+'",');
		  		  	   json.push('"name":"'+name_three_five+'",');
		  		  	   if (select_three_five == 'click'){
		  		  		   json.push('"key":"'+key_three_five+'"}');
		  		  	   }
		  		  	   if (select_three_five == 'view') {
		  		  		   json.push('"url":"'+key_three_five+'"}');
		  		      }
		  	  	   }
			  	   json.push(']');
		  	   	   json.push('}');
		  		}
	  		}
	  		/* 菜单三 json end*/ 
	  		if(select_one == "0"){
	  			json.push(']');
	  		}
	  	       json.push('}');
	  		   var menu = json.join('');
	  		   var param = {"menu" : menu};
	  		   console.log(param);
	  		   var url = 'MenuManagerServlet';
	  		   $.post(url, {"menu" : menu}, function(data){
  			   console.log(data);
  		   });
  	   });
  	});
欢迎指教,有更好的方法请评论谢谢!
2017-05-26 11:16:54 xz1414682954 阅读数 438
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27842 人正在学习 去看看 秦子恒

首先呢,在弄这方面的时候,需要有自己的服务器资源,想玩的童鞋,可以到各种阿里云,

百度云等等上面去买一个云服务器资源.(价格很低.) 1M带宽完全够用的(只用于微信开发的话).


然后配置好自己的服务器IIS,FTP文件共享等.不懂的童鞋自行问度娘.


这里为了方便直接创建aspx项目.

	public string token = "123456"; //自定义的token
	
        protected void Page_Load(object sender, EventArgs e)
        {

            if (string.IsNullOrEmpty(token))
            {
                return;
            }

            string echoString = HttpContext.Current.Request.QueryString["echoStr"];
            string signature = HttpContext.Current.Request.QueryString["signature"];
            string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
            string nonce = HttpContext.Current.Request.QueryString["nonce"];

            //验证signature
            bool result = getMessage(timestamp, nonce, signature);
	    //日志记录验证结果
            LogHelper.WriteLog(string.Format("result:{0}", result), LogLevel.DEBUG);

            if (result)
            {
                if (!string.IsNullOrEmpty(echoString))
                {
                    HttpContext.Current.Response.Write(echoString);
                    HttpContext.Current.Response.End();
                }
            }
        }
	/// <summary>
        /// //验证signature
        /// </summary>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <param name="signature"></param>
        /// <returns></returns>
	 private bool getMessage(string timestamp, string nonce,string signature)
        {
            //字典排序
            string[] ss = { token, timestamp, nonce };
            var list = ss.OrderBy(x => x, StringComparer.Ordinal).ToArray();
            string resultEchoString = string.Join("", list);

            //sha1加密
            resultEchoString = FormsAuthentication.HashPasswordForStoringInConfigFile(resultEchoString, "SHA1");
            if (resultEchoString != null)
            {
                resultEchoString = resultEchoString.ToLower();
                //LogHelper.WriteLog(string.Format("resultEchoString:{0}", resultEchoString), LogLevel.DEBUG);
                return resultEchoString == signature;
            }
            return false;

        }

然后发布自己的项目,上传到服务器,IIS发布出去,得到URL地址.

到接口测试号配置那里配置,

填写URL地址,Token 要和自己的Token一样,否则验证失败.

在服务器上日志里也可以查看是否验证成功.

本篇文章 适合才入门微信开发的人员浏览,大腿请无视.

有问题欢迎大家提出来.喜欢的可以收藏





2015-01-19 10:56:36 Jahnng 阅读数 1140
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27842 人正在学习 去看看 秦子恒

1、微信公众平台开发通讯机制


微信用户发送微信消息给服务号的时候,消息先发送至微信的服务器,然后微信服务器在把消息推送公众号配置好的接口,第三方后台通过接口接收微信推送过来的消息,根据业务逻辑处理之后,在返回给微信服务器,微信服务器在把第三方返回来的数据发送给微信用户

2、微信后台接口配置 在微信后台的开发者中心中,启用服务器配置,如图所示 

然后修改配置



URL是开发者用来接收微信消息和事件的URL(只支持80端口); TOKEN用来验证签名; EncodingAESKey用来加密消息。 配置好了之后,点击提交的时候,必须要在服务器端正确响应微信的消息,通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

1. 将token、timestamp、nonce三个参数进行<b>字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

下面是php代码:

<?php
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];    
    $token = 'sdfsd';
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ){
        echo $_GET['echostr'];
    }else{
    eccho 'fail';
    }
?>

结果如下图所示:


2015-08-28 15:42:14 u010773333 阅读数 5612
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27842 人正在学习 去看看 秦子恒

      上几篇文章基本是介绍有手机客户端触发的事件在先,这种有手机微信客户端触发的请求,咱们的服务器被动响应,这种模式我个人理解为被动发送信息。

但是除此之外我们有时间要让用户推送消息,比如向家长每天发送孩子的作业信息。这就要用到模板消息了

对于模板消息首先要添加

进入模板选择行业之后就要等两天才能用模板消息

能用模板消息之后 根据自己的情况,查看模板选择适用于自己的模板 如果没有可以自己定义 只要微信官方审核通过就可以用(我申请的好像说是7-15天,完成审计,但是好像30分钟就给我发通知说申请成功)

后两个都是我自己申请的模板。

给一个我调用模板的方法

 [WebMethod(Description = "测试优学酷能力报告")]
        public string TestEveryOneWeek(string featherOpenid)
        {
            string url = "http://......";
            string first = "亲爱的家长,您孩子能力报告出炉通知\n";
            var keyword1 = string.Format("英语");
            var keyword2 = "单词、语法很棒哦!听力、口语还不错!差一点就当学霸了,继续加油!\n";
            var remark = "点击“详情”查看";
            //得到所需要的模板数据
            var data = MessageTemplate.NoticeYouxuekuEvery(first, keyword1, keyword2, remark);
            //模板标号
            string templateid = "XakPchhUx1InpJX0pxDqmDKKQz6-ocrPTn682sV5VSw";
            featherOpenid = "............";  //我个人微信的openid
            bool sendsucess = SendTemplateMessageService.SendTemplateMessage(templateid, featherOpenid, url, data);
            if (sendsucess)
            {
                return "成功";
            }
            else
            {
                return "失败";
            }
        }

要给所谓的消息,制成固定格式如下 格式并添加颜色

      public static object NoticeYouxuekuEvery(string first, string keyword1, string keyword2,string remark)
        {
            var data = new
            {
                first = new TemplateDataItem(first, "#000000"),
                keyword1 = new TemplateDataItem(keyword1, "#000000"),
                keyword2 = new TemplateDataItem(keyword2, "#000000"),
                remark = new TemplateDataItem(remark, "#000000")
            };
            return data;
        }

里面的first,keyword1,keyword2,remark都是模板里面的参数。

调用发送消息方法如下

public static bool SendTemplateMessage(string templateId, string openId, string url, object data)
        {
            WeiXinService weixin = new WeiXinService();
            var accessToken = weixin.GetAccessToken();
            var getInfoUrl = string.Format(GetBaseUserInfoApi, accessToken, openId);
            WeiXinUserInfo userInfo = HttpClientHelper.GetResponse<WeiXinUserInfo>(getInfoUrl);
            string resultes=null;
            //判断用户是否关注公众号
            switch (userInfo.Subscribe)
            {
                case 0:
                    break;
                default:
                    var sendUrl = string.Format(SendMessageApi, accessToken);
                    var msg = new TemplateMessage
                    {
                        template_id = templateId,
                        touser = openId,
                        url = url,
                        data = data
                    };
                   //序列化实体为json
                   string json = JsonConvert.SerializeObject(msg, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
                   //调用消息发送接口
                   var result = HttpClientHelper.PostResponse<TemplateMessageResult>(string.Format(sendUrl, accessToken), json);
                   resultes = result.errmsg;
                    break;
            }
            if (resultes=="ok")
            {
                return true;
            }
            else
            {
                return false;
            }
        }

如果知道了用户的openid,这样就可以使用模板消息,主动向手机客户端发送消息了。



没有更多推荐了,返回首页