微信返回超时处理,改为多线程处理主动返回消息

     最近在做一个关于通过公众号扫描二维码计算密码然后返回,中间需要调用公司用金蝶云平台做的erp,在访问erp系统时jar包中的某个post方法,处理时间过长,导致超时,试了各种方法,就干脆改为提前返回一个提示,比如说:正在处理,请稍后,然后处理完连接erp系统后,新建线程返回处理后的消息。(受某个银行公众号启发)

大致流程:

  1 微信扫描后进入处理方法 

  2 开启多线程,一个线程返回为空或提示正在处理,稍后返回,另一个线程处理业务

  3 业务处理完毕后,新建微信连接,将处理结果返回

 在这把步骤3记一下:

     这里的WxMpXmlMessage是微信数据封装的实体类 ,自己定义,这里主要是为了取到openId作为要返回消息的微信号的唯一凭证。

 /**
     * 与微信建立连接并返回消息
     *
     * @param token     用户凭证
     * @param wxMessage 向公众号发送请求的用户,openID
     * @param text      指公众号主动向用户发送的消息文本      
     */
    public static void post(String token, WxMpXmlMessage wxMessage, String text) {
        String action = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + token;
        String json = "{\"touser\": \"" + wxMessage.getFromUser() + "\",\"msgtype\": \"text\", \"text\": {\"content\": \"" + text + "\"}}";
        logger.info("json:" + json);
        URL url = null;
        try {
            url = new URL(action);
            //将url以open方法返回的urlConnection,连接强转为HttpURLConnectioon连接
            //此时http为一个待连接对象,待连接中
            HttpURLConnection http = (HttpURLConnection) url.openConnection();
            http.setRequestMethod("POST");
            // 设置请求头里面的各个属性 (以下为设置内容的类型)
            // application/x-javascript text/xml->xml数据
            // application/x-javascript->json对象
            // application/x-www-form-urlencoded->表单数据
            // text/plain->raw格式
            // 当选择json数据时,charset=utf-8 必须要,不然会出现乱码
            // 该样例使用json对象进行请求
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            //设置连接输出流为true,默认false(post是以流的方式隐士的传递参数)
            http.setDoOutput(true);
            //设置连接输入流为true
            http.setDoInput(true);
            //连接超时30秒
            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
            //读取超时30秒
            System.setProperty("sun.net.client.defaultReadTimeout", "30000");
            //建立连接
            http.connect();

            //创建输入输出流,用于往连接里面输出携带的参数,设置参数编码格式为utf-8
            OutputStream os = http.getOutputStream();
            os.write(json.getBytes("UTF-8"));

            InputStream is = http.getInputStream();
            int size = is.available();
            byte[] jsonBytes = new byte[size];
            String result = new String(jsonBytes, "UTF-8");
            logger.info("请求返回结果" + result);
            //输出完成后刷新并关闭流
            os.flush();
            os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值