2016-12-27 16:31:38 getluo 阅读数 1358
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

首先需要公众号有模板消息的权限,这里不多说明了。


要实现的功能就是在第三方网站通过调用接口在对给用户发消息,当然也可以给用户标签组群发消息。


获取access_token代码:

$weixin_appid = "";
$weixin_secret = "";
$weixin_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$weixin_appid."&secret=".$weixin_secret;
$weixin_return = get_url_contents ( $weixin_url );
$weixin = json_decode ( $weixin_return );
$access_token = $weixin->access_token;
//模板ID
$template_id = "";

发送消息代码:

				$dataarray = array(
						"touser"=>$openid,//用户的openid
						"template_id"=>$template_id,//消息模板id
						"url"=>$_POST['yanbao_url'],
						"data"=>array(
						    "first"=>array(
				                       "value"=>$_POST['yanbao_title'],
				                       "color"=>"#173177"
				                    ),
				                    "keyword1"=>array(
				                       "value"=>$_POST['yanbao_name'],
				                       "color"=>"#173177"
				                    ),
				                    "keyword2"=>array(
				                       "value"=>$_POST['yanbao_desc'],
				                       "color"=>"#173177"
				                    ),
				                    "remark"=>array(
				                       "value"=>$_POST['yanbao_more'],
				                       "color"=>"#173177"
				                    )
								)
				            );
				$data = json_encode($dataarray);
				$output = json_decode(do_post($url,$data));//do_post是模拟post的函数,请自行定义
				if($output->errcode == '0'){
					echo '<div class="updated"><p>发送成功!</p></div>';
				}else{
					echo '<div class="error"><p>发送失败!错误码:'.$output->errcode.'</p></div>';
				}

获取用户标签代码:

				<tr valign="top">
					<th scope="row"><label>用户标签</label></th>
					<td>
						<select name="yanbao_user_tag" id="yanbao_user_tag" style="min-width: 150px">
							<option value="">请选择</option>
							<option value="all">所有用户</option>
							<?php 
								$yanbao_user_tag_url = "https://api.weixin.qq.com/cgi-bin/tags/get?access_token=".$access_token;
								$yanbao_user_tag_return = get_url_contents ( $yanbao_user_tag_url );
								$yanbao_user_tag = json_decode ( $yanbao_user_tag_return );
								$tags = $yanbao_user_tag->tags;
								foreach ($tags as $tag) {
									echo '<option value="'.$tag->id.'">'.$tag->name.'('.$tag->count.')</option>';
								}
							?>		
						</select>
						<span class="description">(选择了用户标签就是<strong>群发</strong>给该标签下的用户)</span>
					</td>
				</tr>

获取用户代码:

<tr valign="top">
					<th scope="row"><label>用户</label></th>
					<td>
						<select name="yanbao_user" id="yanbao_user">
							<option selected="selected" value="">请选择</option>
							<?php 
								/*
								$yanbao_user_url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$access_token."&next_openid=";
								$yanbao_user_return = get_url_contents ( $yanbao_user_url );
								$yanbao_user = json_decode ( $yanbao_user_return );
								$openids = $yanbao_user->data->openid;
								foreach ($openids as $openid) {
									$added_user = Moge_check_weixin_user_added($openid);
									if($added_user){
										echo '<option value="'.$openid.'">'.$added_user->nickname.'</option>';
									}else{
										$user = Moge_weixin_get_user_info($access_token,$openid);
										$wpdb->query("insert into ".$wpdb->prefix."erphp_weixin_users (openid,nickname) values('".$openid."','".$user->nickname."')");
										echo '<option value="'.$openid.'">'.$user->nickname.'</option>';
									}
								}*/
								
								$weixin_users = Moge_get_weixin_users();//获取本地数据库里的微信用户函数
								if($weixin_users){
									foreach ($weixin_users as $user) {
										echo '<option value="'.$user->openid.'">'.$user->nickname.'</option>';
									}
								}
								
							?>
						</select>
						<span class="description">(若已选择了用户标签,此项选择就无效了。)</span>
					</td>
				</tr>


这里主要遇到一个问题就是如果高效快速的获取用户列表的昵称(nickname),通过以下的接口

https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

只能获取用户的openid,我尝试过针对每个用户获取其详细资料,结果页面直接卡死了(用户数量太多)。虽然看到有批量获取资料,但是不适合用,最后没办法,只能先循环获取然后存在本地数据库,定期获取更新下数据库了,有个弊端就是取消关注的人还是会在本地数据库里。

2015-12-29 10:23:45 rwb0123 阅读数 9762
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

1、什么是模板消息?

微信为防止服务号对用户进行恶意骚扰和营销,而服务号在某些场景又必须给用户发送消息时(如购物成功、支付成功),这时候就可以应用微信提供的模板消息来给用户进行提醒。

比如:


2、怎么添加模板消息?

在微信公众号后台菜单里面有模板消息一栏,点击进去后可以看到模板库,可以根据自己的实际需要添加自己需要的模板消息,模板涵盖各行各业,暂不可自己编辑模板。



 

微信限制最多只能选择8个模板,应该也够用了。选中模板后就可以看到模板ID、标题等,这里已购买成功为列,查看详情时:



 可以看到该模板需要提供的相关参数,这样就可以拼装请求的参数了。

这一步主要是要拿到模板的ID和该模板需要的参数名。

3、怎么请求发送模板?

 
第一步:获取模板ID
通过在模板消息功能的模板库中使用需要的模板,可以获得模板ID。
第二步:请求接口
请注意,URL置空,则在发送后,点击模板消息会进入一个空白页面(ios),或无法点击(android)。
POST请求
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

 其中的POST请求中需要两个基本的技术要点:

    1、获取ACCESS_TOKEN。

    2、如何提交POST请求。

具体请参考开发教程系列获取ACCESS_TOKEN篇,http://kangliang.iteye.com/admin/blogs/21617

然后组装需要的JSON信息:

如:

 

Json代码  收藏代码
  1. {  
  2.     "touser""OPENID",  
  3.     "template_id""ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",  
  4.     "url""http://weixin.qq.com/download",  
  5.     "topcolor""#FF0000",  
  6.     "data": {  
  7.         "firstData": {  
  8.             "value""恭喜您购物成功!",  
  9.             "color""#173177"  
  10.         },  
  11.         "product": {  
  12.             "value""韩版西服",  
  13.             "color""#173177"  
  14.         },  
  15.         "price": {  
  16.             "value""149元",  
  17.             "color""#173177"  
  18.         },  
  19.         "time": {  
  20.             "value""2014-12-04 13:09:17",  
  21.             "color""#173177"  
  22.         },  
  23.         "remark": {  
  24.             "value""感谢您的光临,我们将尽快发货!",  
  25.             "color""#173177"  
  26.         }  
  27.     }  
  28. }  

 因模板消息属于固定格式,可在代码中写死拼装方式:

 

 

   组装json信息:

 

Java代码  收藏代码
  1. /** 商品购买成功 
  2.  * templateId 模板ID 
  3.  * orderId  订单id 
  4.  *  
  5.  */  
  6. String toTemplateMsgText(String orderId,String templateId){  
  7.     OrderResponse response=getOrderByOrderId(orderId);  
  8.     //查询订单信息  
  9.     Order order=response.getOrder();  
  10.     String first="您好,欢迎在新礼特购物!";  
  11.     String remark="您的收货信息:"+order.getReceiver_name()+" 电话:" +order.getReceiver_mobile()+" 地址:"+order.getReceiver_city()+order.getReceiver_zone()+order.getReceiver_address()+" 我们将尽快发货,祝您购物愉快!";  
  12.     String jsonText="{\"touser\":\"OPENID\",\"template_id\":\"templateId\",\"url\":\"\",\"topcolor\":\"#FF0000\",\"data\":{\"first\": {\"value\":\"firstData\",\"color\":\"#173177\"},\"product\": {\"value\":\"productData\",\"color\":\"#173177\"},\"price\": {\"value\":\"priceData\",\"color\":\"#173177\"},\"time\": {\"value\":\"timeData\",\"color\":\"#173177\"},\"remark\": {\"value\":\"remarkData\",\"color\":\"#173177\"}}}";  
  13.     jsonText= jsonText.replace("firstData", first).replace("templateId", templateId).replace("OPENID", order.getBuyer_openid()).replace("productData", order.getProduct_name()).replace("priceData",order.getOrder_total_price()/100f+"元").replace("timeData", order.getOrder_create_time()).replace("remarkData", remark);  
  14.      return jsonText;  
  15.     }  

 

 

发送消息:

 

Java代码  收藏代码
  1. /** 
  2.  * 发送模板消息 
  3.  * @param accessToken 
  4.  * @param jsonData 
  5.  */  
  6. public static void sendTemplateMsg(String accessToken,String jsonData){  
  7.     String requestUrl=send_templatemsg_url.replace("ACCESS_TOKEN", accessToken);  
  8.     JSONObject jsonObject = httpRequest(requestUrl, "GET", jsonData);  
  9.     if(jsonObject!=null){  
  10.         if("0".equals(jsonObject.getString("errcode"))){  
  11.             System.out.println("发送模板消息成功!");  
  12.         }else{  
  13.             System.out.println(jsonObject.getString("errcode"));  
  14.         }  
  15.     }  
  16. }  

 

 

另附上httpRequest请求方法:

 

Java代码  收藏代码
  1. /** 
  2.  * 发起https请求并获取结果 
  3.  *  
  4.  * @param requestUrl 请求地址 
  5.  * @param requestMethod 请求方式(GET、POST) 
  6.  * @param outputStr 提交的数据 
  7.  * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
  8.  */  
  9. public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {  
  10.     JSONObject jsonObject = null;  
  11.     StringBuffer buffer = new StringBuffer();  
  12.     try {  
  13.         // 创建SSLContext对象,并使用我们指定的信任管理器初始化  
  14.         TrustManager[] tm = { new MyX509TrustManager() };  
  15.         SSLContext sslContext = SSLContext.getInstance("SSL""SunJSSE");  
  16.         sslContext.init(null, tm, new java.security.SecureRandom());  
  17.         // 从上述SSLContext对象中得到SSLSocketFactory对象  
  18.         SSLSocketFactory ssf = sslContext.getSocketFactory();  
  19.   
  20.         URL url = new URL(requestUrl);  
  21.         HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();  
  22.         httpUrlConn.setSSLSocketFactory(ssf);  
  23.   
  24.         httpUrlConn.setDoOutput(true);  
  25.         httpUrlConn.setDoInput(true);  
  26.         httpUrlConn.setUseCaches(false);  
  27.         // 设置请求方式(GET/POST)  
  28.         httpUrlConn.setRequestMethod(requestMethod);  
  29.   
  30.         if ("GET".equalsIgnoreCase(requestMethod))  
  31.             httpUrlConn.connect();  
  32.   
  33.         // 当有数据需要提交时  
  34.         if (null != outputStr) {  
  35.             OutputStream outputStream = httpUrlConn.getOutputStream();  
  36.             // 注意编码格式,防止中文乱码  
  37.             outputStream.write(outputStr.getBytes("UTF-8"));  
  38.             outputStream.close();  
  39.         }  
  40.   
  41.         // 将返回的输入流转换成字符串  
  42.         InputStream inputStream = httpUrlConn.getInputStream();  
  43.         InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
  44.         BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  45.   
  46.         String str = null;  
  47.         while ((str = bufferedReader.readLine()) != null) {  
  48.             buffer.append(str);  
  49.         }  
  50.         bufferedReader.close();  
  51.         inputStreamReader.close();  
  52.         // 释放资源  
  53.         inputStream.close();  
  54.         inputStream = null;  
  55.         httpUrlConn.disconnect();  
  56.         jsonObject = JSONObject.fromObject(buffer.toString());  
  57.     } catch (ConnectException ce) {  
  58.     } catch (Exception e) {  
  59.     }  
  60.     return jsonObject;  
  61. }  

 

 

事件推送

在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。

1、送达成功时,推送的XML如下:

Xml代码  收藏代码
  1. <xml>  
  2. <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>  
  3. <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]&g;</FromUserName> 
  4. <CreateTime>1395658920</CreateTime> 
  5. <MsgType><![CDATA[event]]></MsgType>  
  6. <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>  
  7. <MsgID>200163836</MsgID>  
  8. <Status><![CDATA[success]]></Status>  
  9. </xml>  

 2、送达由于用户拒收(用户设置拒绝接收公众号消息)而失败时,推送的XML如下:

Xml代码  收藏代码
  1. <xml>  
  2. <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>  
  3. <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName>  
  4. <CreateTime>1395658984</CreateTime>  
  5. <MsgType><![CDATA[event]]></MsgType>  
  6. <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>  
  7. <MsgID>200163840</MsgID>  
  8. <Status><![CDATA[failed:user block]]></Status>  
  9. </xml>  

 

 

在调用模板消息接口后,会返回JSON数据包。正常时的返回JSON数据包示例:

{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}

 

在根据相应的事件监听,就可以获取发送的状态,而及时对消息进行重复或其他的操作。

2015-09-28 15:50:59 ys0798 阅读数 251
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

controller接口:

/**

* @param touser 接收用户openId

* @param template_id 模板Id

* @param url url 调用方需要编码

* @param topcolor topcolor 调用方需要编码

* @param data 模板参数,传过来的是json串  调用方需要编码

* { "first": { "value":"恭喜你购买成功!", "color":"173177"},

* "keynote1":{ "value":"巧克力", "color":"173177"},

* "keynote2": { "value":"39.8元", "color":"173177"},

* "keynote3": { "value":"2014年9月16日", "color":"173177"},

* "remark":{ "value":"欢迎再次购买!", "color":"173177"}}

* @return

*/

@RequestMapping(value="sendMsg",produces = "application/json; charset=utf-8")

public String sendMsg(String touser,String template_id,String url,String topcolor,String data){

if(Strings.isNullOrEmpty(data)||Strings.isNullOrEmpty(touser)||Strings.isNullOrEmpty(template_id)){

return  formatJson(1,"参数错误,请检查参数是否正确!");

}

 

try {

logger.info("模板消息接收参数(解码后):"+data);

data = URLDecoder.decode(data, "UTF-8");

logger.info("模板消息接收参数(解码后):"+data);

url = url==null?"":URLDecoder.decode(url, "UTF-8");

topcolor = topcolor==null?"":URLDecoder.decode(topcolor, "UTF-8");

} catch (UnsupportedEncodingException e) {

return  formatJson(1,"解析参数异常,请检查data,topcolor,url参数");

}

 

 

 

JSONObject obj = null;

try {

obj = JSON.parseObject(data);

} catch (Exception e) {

logger.info("将data转换成json异常,"+e.getMessage());

return  formatJson(1,"解析参数异常,请检查data是否为标准的JOSN串");

}

 

TemplateMsg templateMsg = new TemplateMsg();

templateMsg.touser = touser;

templateMsg.data = obj;

templateMsg.template_id = template_id;

if(!Strings.isNullOrEmpty(url)){

templateMsg.url = url;

}

 

if(!Strings.isNullOrEmpty(topcolor)){

templateMsg.topcolor = topcolor;

}

 

logger.info("接收模板消息:"+templateMsg.toString());

 

SendTemplateMsgResponse sendTemplateMsgResponse  = templateMessageService.sendMsg(templateMsg);

 

if(sendTemplateMsgResponse == null){

return formatJson(1,"发送消息异常!");

}

 

if(sendTemplateMsgResponse.errcode == 0){//发送成功

return  "{\"code\":\"0\",\"result\":\"发送成功\",\"msgid\":\""+sendTemplateMsgResponse.msgid+"\"}";

}else{

return formatJson(1,sendTemplateMsgResponse.errmsg);

}

}

 

service:

public interface TemplateMessageService {

   public SendTemplateMsgResponse sendMsg(TemplateMsg templateMsg);

}

serviceImpl:

public class TemplateMessageServiceImpl implements TemplateMessageService {

@Override

public SendTemplateMsgResponse sendMsg(TemplateMsg templateMsg) {

SendTemplateMsgResponse sendTemplateMsgResponse = null;

try {

// https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

//将这里修改为自己调用服务的方式

sendTemplateMsgResponse = Http.post(

"cgi-bin/message/template/send", templateMsg,

SendTemplateMsgResponse.class);

 

} catch (Exception e) {

logger.debug("Send Template Message Exception:" + e.getMessage());

}

 

return sendTemplateMsgResponse;

}

}

 

 

 model:

public class SendTemplateMsgResponse  extends BaseResponse{

        public String msgid;

        public int errcode = 0;

        public String errmsg;

 

@Override

public String toString() {

return "SendTemplateMsgResponse [msgid=" + msgid + ", errcode="

+ errcode + ", errmsg=" + errmsg + "]";

}

 

}

 

 

public class TemplateMsg {

public String touser;

 

public String template_id;

 

public String url;

 

public String topcolor;

 

public JSONObject data;

 

}

2018-10-25 19:38:17 fuhanghang 阅读数 253
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

    我们需要将一些行为的进展消息推送给用户。除了短信,发送微信模板消息也是不错的选择。模板消息免费、精准到达、而且可以引导用户回到网站上来。但它有两个前提条件。1个是认证的服务号,你才能选择模板。2个是被推送的用户必须关注了你的公众号,而且你也拿到了他的openid

先在模板库中找到自己的想要的模板,添加到“我的模板”中。

展开详情,我们可以看到示例。

接下来用PHP代码发送一次:

class Wechat
{

    //首先获取获取access_token
    public static function get_access_token(){
        $ch = curl_init(); //初始化一个CURL对象
        $appId = "xxxxxxxxxxxxxxxxxx"; //微信appid
        $appSecret = "xxxxxxxxxxxxxxxxxx"; //微信appsecret
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_URL,$url); //要访问的地址
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过证书验证
        $data = json_decode(curl_exec($ch));
        if($data->access_token){
            $token_file = fopen("token.txt","w") or die("Unable to open file!");//打开token.txt文件,没有会新建
            fwrite($token_file,$data->access_token);//重写tken.txt全部内容
            fclose($token_file);//关闭文件流
        }else{
            echo $data->errmsg;
        }
        curl_close($ch);
    }
    
    //读取access_token的方法
    public static function read_token(){
        $token_file = fopen("token.txt", "r") or die("Unable to open file!");
        $rs = fgets($token_file);
        fclose($token_file);
        return $rs;
    }
    
    //发送模版消息
    public  function send(){
        $this->build_access_token();
        $ACCESS_TOKEN=$this->read_token();
        $data=array(
            'touser'=>"olfsB1VwJLKYsGbss90z7J-3baE4", //要发送给粉丝的openid
            'template_id'=>"0C3WQsssss8pzMesCyrU5_8pm2Abmags7DydiTaOdUM",//改成自己的模板id,在微信后台模板消息里查看
            'url'=>"http://www.xxxxxxx.com/weixin/", //自己网站链接url
            'data'=>array(
                'first'=>array('value'=>"XXX,你好",'color'=>"#fc0101"),
                'keyword1'=>array('value'=>"XXX门店",'color'=>"#173177"),
                'keyword2'=>array('value'=>"2018-12-12",'color'=>"#173177"),
                'keyword3'=>array('value'=>"美容",'color'=>"#173177"),
                'remark'=>array('value'=>"欢迎光临。",'color'=>"#173177"),
            )
        );

        $json_data=json_encode($data);//转化成json数组让微信可以接收
        $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$ACCESS_TOKEN;//模板消息请求URL
        $res=$this->https_request($url,urldecode($json_data));//请求开始
        $res=json_decode($res,true);
        if($res['errcode']==0 && $res['errcode']=="ok"){
            echo "发送成功!";
        }
    }

     
    //curl请求函数,微信都是通过该函数请求
    function https_request($url,$data = null){
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
}

 

2015-07-08 15:58:32 Truong 阅读数 7461
  • 微信公众平台模板消息开发-微信开发14(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信公众平台模板消息开发是子恒老师《子恒说微信开发》视频教程的第14部。详细讲解了用php开发微信公众平台模板消息。内容包含设置模板所属行业,获取微信模板ID,用公众号发送微信模板消息等等。欢迎反馈,微信号:QQ68183131

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

在微信开发中,利用微信的接口主动给微信关注用户发送消息。这个主要是利用微信的客服接口来实现该功能,具体的实现如下:

    /**

     * 微信公共账号发送给账号

     * @param content 文本内容

     * @param toUser 微信用户  

     * @return

     */

    public  void sendTextMessageToUser(String content,String toUser){

       String json = "{\"touser\": \""+toUser+"\",\"msgtype\": \"text\", \"text\": {\"content\": \""+content+"\"}}";

       //获取access_token

       GetExistAccessToken getExistAccessToken = GetExistAccessToken.getInstance();

       String accessToken = getExistAccessToken.getExistAccessToken();

       //获取请求路径

       String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+accessToken;

       System.out.println("json:"+json);

       try {

           connectWeiXinInterface(action,json);

       } catch (Exception e) {

           e.printStackTrace();

       }

   }

    /**

     * 微信公共账号发送给账号(本方法限制使用的消息类型是语音或者图片)

     * @param mediaId 图片或者语音内容

     * @param toUser 微信用户  

     * @param messageType 消息类型

     * @return

     */

    public  void sendPicOrVoiceMessageToUser(String mediaId,String toUser,String msgType){

        String json=null;

        if(msgType.equals(REQ_MESSAGE_TYPE_IMAGE)){

             json = "{\"touser\": \""+toUser+"\",\"msgtype\": \"image\", \"image\": {\"media_id\": \""+mediaId+"\"}}";

        }else if(msgType.equals(REQ_MESSAGE_TYPE_VOICE)){

            json = "{\"touser\": \""+toUser+"\",\"msgtype\": \"voice\", \"voice\": {\"media_id\": \""+mediaId+"\"}}";

        }

        //获取access_token

       GetExistAccessToken getExistAccessToken = GetExistAccessToken.getInstance();

       String accessToken = getExistAccessToken.getExistAccessToken();

       //获取请求路径

       String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+accessToken;

       try {

           connectWeiXinInterface(action,json);

       } catch (Exception e) {

           e.printStackTrace();

       }

   }

    /**

     *  发送图文给所有的用户

     * @param openId 用户的id

     */

    public  void sendNewsToUser(String openId){

        MediaUtil mediaUtil = MediaUtil.getInstance();

        ArrayList<Object> articles = new ArrayList<Object>();

       Article a = new Article();

       articles.add(a);

       String str = JsonUtil.getJsonStrFromList(articles);

        String json = "{\"touser\":\""+openId+"\",\"msgtype\":\"news\",\"news\":" +

                "{\"articles\":" +str +"}"+"}";

        json = json.replace("picUrl", "picurl");

        System.out.println(json);

        //获取access_token

       String access_token = mediaUtil.getAccess_token();

       //获取请求路径

       String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+access_token;

       try {

           connectWeiXinInterface(action,json);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

    /**

     * 连接请求微信后台接口

     * @param action 接口url

     * @param json  请求接口传送的json字符串

     */

    public  void connectWeiXinInterface(String action,String json){

        URL url;

       try {

           url = new URL(action);

           HttpURLConnection http = (HttpURLConnection) url.openConnection();

           http.setRequestMethod("POST");

           http.setRequestProperty("Content-Type",

                   "application/x-www-form-urlencoded");

           http.setDoOutput(true);

           http.setDoInput(true);

           System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒

           System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒

           http.connect();

           OutputStream os = http.getOutputStream();

           os.write(json.getBytes("UTF-8"));// 传入参数

           InputStream is = http.getInputStream();

           int size = is.available();

           byte[] jsonBytes = new byte[size];

           is.read(jsonBytes);

           String result = new String(jsonBytes, "UTF-8");

           System.out.println("请求返回结果:"+result);

           os.flush();

           os.close();

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

转载地址:http://jingyan.baidu.com/article/b907e627b1e4bb46e7891cf0.html

欢迎访问我的技术群425783133



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