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

相关推荐

发表回复

登录后才能评论