java版+支付宝支付和微信支付(二)详解编程语言

微信支付

上一篇文章介绍了支付宝支付的介入,今天来填坑,说一下微信支付的具体方法。
微信支付我用的是扫码支付,具体开通方法就不赘述,具体可以看官方文档,我用的是模式二,具体流程官方说的很清楚,很遗憾的是我没有找到官方的java版扫码支付的demo,因为时间紧任务重,就没有自己一点点研究,看了很多博客和资料,最后参考了一个博客文章,连接是:http://blog.csdn.net/u010449283/article/details/52195117,这位大神已经遇到了很多坑,给了很多解决方案,省了我很多事,在这我主要说说我遇到的坑和解决办法。

微信回调

参考上面的博客我们可以得到微信扫码支付的二维码,可以向微信支付了,但是支付成功后的回调我们返给微信时费了不少时间,因为和支付宝不同的是,微信支付用的xml进行传参,所以在支付成功后要给微信返回xml的返回结果。

    /** 
     * 微信支付订单 
     * @return 
     * @throws Exception  
     */ 
    @ResponseBody 
    @RequestMapping(value = "pay/wxPayOrder", method = RequestMethod.POST, produces = "application/xml") 
    public String wxPayOrder(HttpServletRequest request,HttpServletResponse response) throws Exception { 
        LOGGER.info("微信支付订单"); 
        。。。//处理支付逻辑 
        。。。 
//支付成功 
return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"; 
 
//支付失败 
return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[NO]]></return_msg></xml>";

支付成功页面跳转

由于微信支付只有异步通知没有同步通知,所以页面跳转需要用我们自己去跳转,我用的方法时js轮训查询订单支付情况,当订单支付后进行页面跳转,直接上代码

<script> 
    $(function(){ 
        getWeixinImage(); 
    }); 
 
    var num = 45; 
    var timer1;//检查订单状态 
    var timer2;//超时提醒 
    function weixinImageTimeout(){ 
        num = num-1; 
        if (1 <= num) { 
            $("#num").text(num); 
        } else if (1 > num){ 
            $('.sytTable_p').html('二维码已过期,<a href="javascript:getWeixinImage();"><span>刷新</a>页面重新获取二维码。'); 
            $("#weixinImageURL").attr("src","${staticPath }/static/images/timeout.png"); 
            //clearInterval(timer1); 
            clearInterval(timer2); 
        } 
    } 
 
    function getWeixinImage(){ 
        num=45; 
        $("#weixinImageURL").attr("src","createQRCode?orderNo="+'${orderNo}'); 
        $('.sytTable_p').html('距离二维码过期还剩<span id="num">45秒,过期后请刷新页面重新获取二维码。'); 
        timer1 = setInterval(function(){ 
            queryOrderState('${orderNo}'); 
        }, 3000);//设置3秒循环查询 
        // 二维码超时提醒 
        timer2 = setInterval(weixinImageTimeout, 1000);   
    } 
 
    function queryOrderState(orderNo){ 
        $.ajax({ 
            type: "POST", 
            url: "wxCheckOrderState", 
            data: {orderNo:orderNo}, 
            dataType: "json", 
            /* timeout: 4000, 
            async:false, */ 
            success: function(result) { 
                if(result.obj==1){ 
                    //直接跳到成功页 
                    window.location.href="pay/payStatus?orderNo="+orderNo; 
                } 
            } 
        }); 
    }    
 
    </script> 
 
<!--收银台--> 
<div class="sytCon"> 
  <div class="syt_div"> 
    <p>请您及时付款,以便订单尽快处理!订单号:${orderNo}</p> 
    <h3>应付金额:<span>${fee}</span></h3> 
  </div> 
  <table width="1000" class="sytTable"> 
    <tr> 
      <td class="sytTable_tit">微信支付</td> 
      <td colspan="2" class="sytTable_p">距离二维码过期还剩<span id="num">45</span>秒,过期后请刷新页面重新获取二维码。</td> 
      <!-- <a href="javascript:getWeixinImage();">获取失败 点击重新获取二维码  </a> --> 
    </tr> 
    <tr> 
      <td>&nbsp;</td> 
      <td width="294"><span class="sytTable_ewm"><img id="weixinImageURL" src="${staticPath }/static/images/loading.gif" /></span></td><!-- loading.gif --> 
      <td rowspan="2" class="sytTable_img"></td> 
    </tr> 
    <tr> 
      <td>&nbsp;</td> 
      <td><img src="${staticPath }/static/images/syt_ico.gif" /></td> 
    </tr> 
    <tr> 
      <!-- <td colspan="3" class="sytTable_link"><a href="#">选择其它支付方式</a></td> --> 
    </tr> 
  </table> 
</div>

效果图为
这里写图片描述

因为微信支付链接过期是时间2小时,我自己设置的是45秒,过了45秒之后换一个二维码,具体页面参照的是京东的微信支付页面。
由于最近比较忙,只是简单的记录了一下接入方式,如果有问题可以加qq454578193进行交流学习,也欢迎指正我的错误或提出更好的解决方案,谢谢。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/13973.html

(0)
上一篇 2021年7月19日 16:21
下一篇 2021年7月19日 16:26

相关推荐

发表回复

登录后才能评论