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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章