支付宝生成二维码在本地测试正常,放到Tomcat服务器上总是报异常?

发布于 2022-09-06 02:09:24 字数 3367 浏览 35 评论 0

  1. 列表项目

clipboard.png

clipboard.png

clipboard.png
是服务器的tomcat哪块的配置不对么
这是生成二维码的代码
public String qrPay(Yyopregist_PC yy) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //逾期时间
    String time_expire= sdf.format(System.currentTimeMillis()+24*60*60*1000);
    
    StringBuilder sb = new StringBuilder();
    sb.append("{\"out_trade_no\":\"" + yy.getOutTradeNo() + "\",");
    sb.append("\"total_amount\":\""+yy.getMoney()+"\",\"discountable_amount\":\"0.00\",");
    sb.append("\"subject\":\""+yy.getPayName()+"\",\"body\":\"\",");
    sb.append("\"goods_detail\":[{\"goods_id\":\""+yy.getOutTradeNo() +"\",\"goods_name\":\""+yy.getPayName()+"\",\"goods_category\":\"\",\"price\":\""+yy.getMoney()+"\",\"quantity\":\"1\"},{\"goods_id\":\""+yy.getOutTradeNo()+"\",\"goods_name\":\""+yy.getPayName()+"\",\"goods_category\":\"\",\"price\":\""+yy.getMoney()+"\",\"quantity\":\"1\"}],");
    sb.append("\"operator_id\":\"\",\"store_id\":\"\",\"terminal_id\":\"\",");
    sb.append("\"time_expire\":\""+time_expire+"\"}");
    logger.info("支付宝生成二维码的参数"+sb.toString());

// AlipayClient alipayClient = AlipayAPIClientFactory.getAlipayClient();

    AlipayClient alipayClient = AlipayAPIClientFactory.getAlipayClientRSA2();
    // 使用SDK,构建群发请求模型
    AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
    request.setBizContent(sb.toString());//plus.reallycare.cn/sdey_pc
    request.setNotifyUrl(url+"/backend/api/v1/taizhouPcBookingOrder/alipayNotify");

// request.putOtherTextParam("ws_service_url", "http://unitradeprod.t15032aqcn.alipay.net:8080");

    AlipayTradePrecreateResponse response = null;
    try {
        // 使用SDK,调用交易下单接口
        logger.info("支付宝生成二维码的包含回调的参数"+request);
        response = alipayClient.execute(request);

        logger.info("支付宝生成二维码的body为:"+response.getBody());
        logger.info("支付宝生成二维码得到成功:"+response.isSuccess()+"");
        logger.info("支付宝生成二维码的返回信息为:"+response.getMsg());
        // 这里只是简单的打印,请开发者根据实际情况自行进行处理
        if (null != response && response.isSuccess()) {
            if (response.getCode().equals("10000")) {
                logger.info("商户订单号:"+response.getOutTradeNo());
                logger.info("二维码值:"+response.getQrCode());//商户将此二维码值生成二维码,然后展示给用户,用户用支付宝手机钱包扫码完成支付
                return response.getQrCode();
                //二维码的生成,网上有许多开源方法,可以参看:http://blog.csdn.net/feiyu84/article/details/9089497
                
            } else {
                //打印错误码
                logger.info("错误码:"+response.getSubCode());
                logger.info("错误描述:"+response.getSubMsg());
            }
        }
    } catch (AlipayApiException e) {
        e.printStackTrace();
        logger.info("错误描述:"+e.getErrMsg());
        logger.info("支付宝生成二维码接口进入异常:---"+e.getMessage()+"====异常case为===="+e.getCause());
    }
    
    return null;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

耳钉梦 2022-09-13 02:09:25
 connection timeout = 5000(创建连接超时时间)
 read timeout = 3000 (返回读取超时时间)

贴个工具类给你:

 private static String post(HttpPost post, Integer connTimeout, Integer readTimeout) throws Exception {
        Object client = null;
        String result = "";

        try {
            Builder customReqConf = RequestConfig.custom();
            if(connTimeout != null) {
                customReqConf.setConnectTimeout(connTimeout.intValue());
            }

            if(readTimeout != null) {
                customReqConf.setSocketTimeout(readTimeout.intValue());
            }

            post.setConfig(customReqConf.build());
            HttpResponse res;
            if(post.getURI().toString().startsWith("https")) {
                client = createSSLInsecureClient();
                res = ((HttpClient)client).execute(post);
            } else {
                client = client;
                res = ((HttpClient)client).execute(post);
            }

            result = IOUtils.toString(res.getEntity().getContent(), Consts.UTF_8.toString());
        } finally {
            post.releaseConnection();
            if(post.getURI().toString().startsWith("https") && client != null && client instanceof CloseableHttpClient) {
                ((CloseableHttpClient)client).close();
            }

        }

        return result;
    }

------------------补充

可以试试通过设置tomcat下conf文件夹的server.xml文件,对请求超时时间进行设置。

<Connector port="8080" protocol="HTTP/1.1" 
              connectionTimeout="20000" 
              redirectPort="8443" acceptCount="500" maxThreads="400" />
素年丶 2022-09-13 02:09:24

你最后一个是socketTimeoutException,优先考虑下网络问题,比如内外网,防火墙,是否将一些特殊端口的请求拦截了

你与昨日 2022-09-13 02:09:24

尝试加大timeout时间

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文