銀聯支付Java開發

銀聯的demo寫的不錯,基本上可以直接使用。
首先是對acp_sdk.properties的內容修改,注意這個文件的文件名不能進行修改。
對於文件內的證書路徑以及證書對應的密碼進行修改。

修改完這個文件後,需要對DemoBase這個類中的frontUrl,backUrl進行修改,這個是銀聯支付後向服務器通知的前臺以及後臺地址。
frontUrl主要處理的前臺界面展示,backUrl主要處理後臺業務邏輯。

注意:這兩個地址需要是外網地址,否則將無法收到回調信息。

然後對於Form_6_2_FrontConsume類中的信息進行相應的修改,直接訪問服務,會返回給你一段html字符串,把這段html直接傳到前臺加到頁面上。這段代碼會自動提交數據,會彈出銀聯支付的界面。

注意:測試環境下,微信瀏覽器無法彈出支付界面,需要換生成環境的證書才能正常的彈出支付界面。

支付成功後,銀聯會向你設置的backUrl發送成功信息,具體接受方法如下:

String encoding = req.getParameter(SDKConstants.param_encoding);
        // 獲取銀聯通知服務器發送的後臺通知參數
        Map<String, String> reqParam = getAllRequestParam(req);
        System.out.println("reqParam----->" + reqParam.toString());
        LogUtil.printRequestLog(reqParam);

        Map<String, String> valideData = null;
        if (null != reqParam && !reqParam.isEmpty())
        {
            Iterator<Entry<String, String>> it = reqParam.entrySet().iterator();
            valideData = new HashMap<String, String>(reqParam.size());
            while (it.hasNext())
            {
                Entry<String, String> e = it.next();
                String key = (String) e.getKey();
                String value = (String) e.getValue();
                value = new String(value.getBytes(encoding), encoding);
                valideData.put(key, value);
            }
        }

        //重要!驗證簽名前不要修改reqParam中的鍵值對的內容,否則會驗籤不過
        if (!AcpService.validate(valideData, encoding))
        {
            LogUtil.writeLog("驗證簽名結果[失敗].");
            //驗籤失敗,需解決驗籤問題
        }
        else
        {
            LogUtil.writeLog("驗證簽名結果[成功].");
        }
public static Map<String, String> getAllRequestParam(final HttpServletRequest request)
    {
        Map<String, String> res = new HashMap<String, String>();
        Enumeration<?> temp = request.getParameterNames();
        if (null != temp)
        {
            while (temp.hasMoreElements())
            {
                String en = (String) temp.nextElement();
                String value = request.getParameter(en);
                res.put(en, value);
                //在報文上送時,如果字段的值爲空,則不上送<下面的處理爲在獲取所有參數數據時,判斷若值爲空,則刪除這個字段>
                //System.out.println("ServletUtil類247行  temp數據的鍵=="+en+"     值==="+value);
                if (null == res.get(en) || "".equals(res.get(en)))
                {
                    res.remove(en);
                }
            }
        }
        return res;
    }

支付成功後,界面會有一個返回商戶的按鈕,那個按鈕返回的界面就是在frontUrl設置。獲取回調信息的方法與上面相同,就是在後面需要把界面導向你想要顯示的界面,順便帶上返回的參數。

這樣就順利的完成了銀聯支付的流程。

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