微信开发处理超时5s(java),异步发送客服消息

标签: 微信 开发 5s | 发表时间:2015-08-11 21:38 | 作者:pdh822407904
出处:http://blog.csdn.net

在微信开发中我们会经常遇到在处理业务逻辑超过5s的情况,在超时时,微信会重新请求,总共请求三次,这样就会导致一系列的问题,怎样避免这些问题呢?
通过研究发现在微信官方文档清楚写着,如下:

假如服务器无法保证在五秒内处理并回复,必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复),否则,将出现严重的错误提示。详见下面说明:

1、直接回复空串(指字节长度为0的空字符串,而不是XML结构体中content字段的内容为空)
2、直接回复success


针对微信的官方文字,大家的疑问想必就2个

1、如何直接回复空串或者回复success来避免超时现象呢?

2、如何利用客服接口发送消息?


针对以上2个问题我一一作答

第一个问题很简单可以解决:

即在程序中直接return "";即可,具体实例在下面奉上


第二个问题:

客服接口发送消息想必很多人都会,不细讲,不过下面会奉上实例

然后异步发送可能很多人有疑问,我使用线程的方式实现,做法如下:

public static Object handle(final TextMessage text) {
        //超时5s,进行异步发送客服消息
        Thread insertDbThread = new Thread(new Runnable() {
            @Override
            public void run() {
                String token=TokenManager.getAccessToken();
                ToolCustomerService.connectWeiXinInterface(token,text.getFromUserName(),GetKey.getContent(text));
            }
        });
        insertDbThread.start();
      //避免超时时微信重新请求
        return "";
    }


代码如下:

以被动回复消息为例子


import com.asiainfo.wechat.manager.TokenManager;
import com.asiainfo.wechat.model.message.TextMessage;
import com.asiainfo.whall.tools.GetKey;
import com.asiainfo.whall.tools.ToolCustomerService;

public class TextMessageHandle {
	
	public static Object handle(final TextMessage text) {
		//超时5s,进行异步发送客服消息
		Thread insertDbThread = new Thread(new Runnable() {
			@Override
			public void run() {
				String token=TokenManager.getAccessToken();
				ToolCustomerService.connectWeiXinInterface(token,text.getFromUserName(),GetKey.getContent(text));
			}
		});
		insertDbThread.start();
		//避免超时时微信重新请求
		return "";
	}
	
	
}

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.log4j.Logger;


public class ToolCustomerService {
	private static final Logger LOG = Logger.getLogger(ToolCustomerService.class);
	
	public static  void connectWeiXinInterface(String token,String toUser,String content){

        URL url;

       try {
    	   String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+token;
   		   String json = "{\"touser\": \""+toUser+"\",\"msgtype\": \"text\", \"text\": {\"content\": \""+content+"\"}}";
   		   LOG.info("json:"+json);

           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();

       }

    }
}




作者:pdh822407904 发表于2015/8/11 13:38:50 原文链接
阅读:118 评论:0 查看评论

相关 [微信 开发 5s] 推荐:

微信开发处理超时5s(java),异步发送客服消息

- - CSDN博客综合推荐文章
在微信开发中我们会经常遇到在处理业务逻辑超过5s的情况,在超时时,微信会重新请求,总共请求三次,这样就会导致一系列的问题,怎样避免这些问题呢. 通过研究发现在微信官方文档清楚写着,如下:. 假如服务器无法保证在五秒内处理并回复,必须做出下述回复,这样微信服务器才不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复),否则,将出现严重的错误提示.

微信开发入门

- - 行业应用 - ITeye博客
【做微信平台开发需要以下步骤,wx.zip示例可以参考,修改配置即可】. 1.申请一个公众号(订阅号或者服务号). 2.需要有自己的服务器(建议使用花生壳做内网映射). * 检查是否是微信发送的请求. * @param signature 签名. * @param timestamp 时间戳. * @param nonce 随机数.

微信公众平台开发(一)

- - BlogJava-首页技术区
  开始微信公众平台的开发,我们首先要了解微信平台可以帮助我们做哪些事情. 使用您的公众账号登陆http://mp.weixin.qq.com/,选择菜单--高级功能-开发模式--查看文档,即能看到微信公众平台目前所能开发的功能. 接受用户发送给您公众账号的消息. 需要特别说明的是,发送消息和回复消失是一个连贯的过程,只能在一个对话中完成.

如何成为微信开发者

- - 神刀网
要成为微信开发者,准备工作如下:. a.这个可以自己购买,如果之前已有网站,可直接使用其服务器,这样也不用再购买域名了. b.也可以使用免费的服务器,搜索一下,有很多. c.还可以使用 百度云开发平台或者 新浪云平台,是免费的. a.如果服务器自己购买,也需要购买域名,然后要设置域名DNS,将域名绑定到购买的服务器.

微信公众平台接口开发

- - CSDN博客互联网推荐文章
随着微信公众平台的开放,微信营销推广也越发受到重视. 现在企业越来越注重求职者是否拥有“微信公众平台接口开发”的经验. 现在参考资料介绍下微信公众平台接口开发模式:. 首先你得有个微信公众平台账号,注册地址:http://mp.weixin.qq.com/. 开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:.

微信公众平台开发入门

- - Web前端 - ITeye博客
在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯、及HTTP/XML/CSS/JS等基础. 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务:. 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据库作为程序运行环境.

Vue2 全家桶与微信开发

- - IT瘾-dev
此项目本身有一个APP了,为了方便将APP和微信端数据打通,需要用户微信和APP用户绑定. 在开发的过程中单页面的模式在微信JS API的配置踩了很多坑,特别是IOS. 由于本人表述能力和篇幅有限Orz,这里只介绍关键的实现步骤和代码,有些安全的地方和路由地方处理当时比较暴力没有细化,还望交流指导.

如何基于微信开放接口开发企业的微信 CRM?

- - 极客公园-GeekPark
我是极客公园黑板报认证值日生. [核心提示]企业要开发微信 CRM,首先要从业务架构上进行设计清楚. 微信 CRM 的本质,是在微信渠道上利用微信的特点和接口而扩展的 CRM 系统. 业内一直都在传说 微信是天生的 CRM,可是没有人看到过微信 CRM 的真容. 随着微信最新公众平台的改版和开放接口的微信认证开放,微信 CRM 离企业越来越近.

微信公众平台开发(三)--位置信息的识别

- - BlogJava-首页技术区
位置识别这是实际应用经常应用的消息,特别是很多商家,通过了解用户位置,给用户提供特别的产品或是商场的推荐. 其中用户可能发送两种类型的消息:. 2.路名、标志性建筑或是商场名称. 认识一下,微信地理位置消息,包含一些什么信息. . 包含的主要信息有经度纬度和Label的位置.

摩拜单车微信小程序开发技术总结

- - SegmentFault 最新的文章
摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈. 本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 微信小程序没有HTML的常用标签,而是类似. React的微信自定义组件,比如. window变量,但微信提供了. React的state)来改变视图展现.