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>刷新</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</span>秒,过期后请刷新页面重新获取二维码。');
        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进行交流学习,也欢迎指正我的错误或提出更好的解决方案,谢谢。


由于个人原因,写完本文就很少上csdn,没想到这么多同学留言要源码,十分惶恐,十分内疚,恐怕是误导和耽误了很多同学,本人亦是讨厌留文不留码的行为,现在将源码献上,不过已经过了4年,支付功能已经改版多次,此源码仅供参考,更多的还是要看官方demo。
下载地址:https://download.csdn.net/download/qukaiwei/12091787

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值