微信,支付寶,支付異步通知驗簽,notify_url


在支付接口開發中

,當用戶支付完成之后,阿里或者微信會向我們服務器發送一個支付結果的通知,里邊帶有一系列參數;其中特殊的是簽名類型,和簽名(他們根據這些參數做出來的簽名)。

我們的得到這些參數之后要去除簽名類型和簽名(他們根據這些參數做出來的簽名);之后我們再用這些參數做好排序生成一個簽名,與他們返回來的這個簽名做比較。

支付寶SDK里邊有一套驗簽工具,微信方面可以自行做一個驗簽。

1、支付寶驗簽文檔:https://help.alipay.com/lab/help_detail.htm?help_id=243094

支付寶的驗簽:AlipaySignature.rsaCheckV1();這個方法是支付寶sdk里自帶的。alipay-sdk-java20170725114550版本的

https://docs.open.alipay.com/54/103419這個地址可以下載支付寶給出的SDK。

2、下單之后支付寶和微信都會在下單返回的數據中放置一個支付二維碼內容的鏈接,我們可以用這個鏈接自行生成一個二維碼供用戶支付。

3、接收微信服務器發送過來的通知數據:

// 讀取參數
Map<String, Object> items = HttpUtil.convertModel(request);
InputStream inputStream;
StringBuffer sb = new StringBuffer();
inputStream = request.getInputStream();
String s;
BufferedReader in = new BufferedReader(new InputStreamReader(
inputStream, "UTF-8"));
while ((s = in.readLine()) != null) {
sb.append(s);
}
in.close();
inputStream.close();

其中的sb即是接收過來的xml數據;后續我們可以通過自己工程里的xml解析工具即可解析得到map格式的數據或者json格式的數據,以供之后的驗簽,存儲等業務操作。

4、接收阿里返回通知的數據

Map<String, String> params = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
}
// 亂碼解決,這段代碼在出現亂碼時使用。如果mysign和sign不相等也可以使用這段代碼轉化
// valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
params.put(name, valueStr);
}

// 獲取支付寶的通知返回參數,可參考技術文檔中頁面跳轉同步通知參數列表(以下僅供參考)//
// 商戶訂單號
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");

可以通過這塊代碼得到通知的數據,轉換之后的map數據在params 里邊,也可以直接從request里讀取數據如上的訂單號。

之后我們就可以根據這些參數做驗簽,存儲,更新等的操作了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM