支付模塊

功能介紹:前端

1.支付寶對接nginx

2.支付回調express

3.查詢支付狀態tomcat

 

學習目標:服務器

1.熟悉支付寶對接核心文檔,調通支付寶支付功能官方Demo網絡

2.解析支付寶SDK對接源碼app

3.RSA1和RSA2驗證簽名及加解密異步

4.避免支付寶重複通知和數據校驗工具

5.natapp外網穿透和tomcat remote debug學習

6.生成二維碼,並持久化到圖片服務器

7.支付寶回調,會放在request中,再從request中取出來,放在map中,再對map進行處理,打印的日誌就是map中的內容

 

接口:

1./order/pay.do  支付訂單

入參:orderNo,要支付的訂單號

返回值:將持久化到ftp服務器上的二維碼(經過nginx反向代理解析出來的url)和orderNo返回

2./order/query_order_pay_status.do  查詢訂單

入參:orderNo,要查詢的訂單號

用戶付款後,收到支付寶確認成功的一個回調,就能夠實時查到這個訂單是否已經付款成功。

3./order/alipay_callback.do   支付寶回調

將回調地址/order/alipay_callback.do配置在項目中,以及支付寶官方配置,參數是ServerletRequest,從中拿到各類參數,並進行RSA2的簽名

 

 

一些重要的官方文檔:

1.沙箱登陸

https://openhome.alipay.com/platform/appDaily.htm

2.沙箱環境使用說明和如何使用沙箱環境

https://support.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.KDBNpH&treeId=193&articleId=105311&docType=1#s0

3.當面付產品介紹、掃碼支付接入指引、當面付快速接入、當面付接入必讀、當面付進階功能、當面付異步通知-僅用於掃碼支付、當面付SDK&DEMO

https://support.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.rRQbV1&treeId=193&articleId=105072&docType=1

4.服務端SDK

 https://docs.open.alipay.com/54/103419

5.生成RSA密鑰

 https://docs.open.alipay.com/291/105971

6.線上建立應用說明

 https://docs.open.alipay.com/200/105310

 

沙箱調試環境:

受權回調地址:線上url,這裏我是申請了的nat,在咱們發起請求時,要把這個url做爲參數傳給服務器。

AES密鑰:在傳輸數據時,進行加密,支付寶經過AES密鑰,對數據進行解密。

 

內部生成一個訂單號,即選完商品後提交訂單的那個操做;而後向支付寶請求預下單信息,裏面包括外部訂單號(out_trade_number,是針對支付寶來講的,但實際上是咱們的內部訂單號)、驗籤、公鑰等;而後,支付寶返回二維碼信息(http協議的信息),拿到信息後能夠利用工具生成二維碼,以base64的方式傳給前端,或以圖片的形式持久化到ftp服務器,而後以http協議(nginx反向代理)的形式傳給前端;支付寶錢包掃碼後,會收到兩次支付寶回調信息,第一次是支付寶返回的支付詳情,第二次是在輸入完密碼後的帳單詳情。

支付寶掃碼支付重要的字段:

關鍵入參:

參數名稱 參數說明
out_trade_no 用戶訂單號,須要保證不重複
total_amount 訂單金額
subject 訂單標題
store_id 商戶門店編號
timeout_express 交易超時時間

關鍵出參:

參數名稱 參數說明
qr_code 訂單二維碼圖片地址

其餘重要字段:

參數名稱 參數說明
trade_status 交易目前所處的狀態
total_amount 本次交易支付的訂單金額,單位爲元
receipt_amount 商家在交易中實際收到的款項,單位爲元
buyer_pay_amount 用戶在交易中支付的金額,單位爲元

交易狀態說明:

枚舉名稱 枚舉說明 觸發條件描述 觸發條件默認值
WAIT_BUYER_PAY 交易建立,等待賣家付款 交易建立 false(不觸發)
TRADE_CLOSED 未付款交易超時關閉,或支付完成後全額退款 交易關閉 false(不觸發)
TRADE_SUCCESS 交易支付成功 支付成功 true(觸發)
TRADE_FINISHED 交易結束,不可退款 交易完成 false(不觸發)

 

支付寶掃碼支付重要細節:

1.主動輪詢和回調的區別

2.避免單邊帳

3.同步請求的加簽和驗籤

加簽方法(若是不用SDK調用,推薦用該方法加簽):

/*
    params     請求支付寶生成訂單時的參數,參數列表,key是參數名稱,value是參數值
    privateKey     加簽私鑰
    charset     加簽字符集,統一用utf-8
*/
String AlipaySignature.rsaSign(Map<String, String> params, String privateKey, String charset);

驗籤方法(同步請求時,若是不用SDK調用,推薦用該方法驗籤):

/*
    content     待驗簽字符串
    sign     簽名值
    publicKey     驗籤公鑰
    charset     驗簽字符集,統一用utf-8
*/
boolean AlipaySignature.rsaCheckContent(String content, String sign, String publicKey, String charset);

4.回調的驗證(簽名、金額、訂單號、訂單狀態、交易狀態、商戶id)

5.過濾掉重複的通知

6.必定要驗證並確保可接受的異步通知是支付寶發出的

驗籤方法(例如異步通知的時候,用戶須要用到驗籤方法):

/*
    params     支付寶的回調參數,參數列表(包括待驗籤參數和簽名值sign),key是參數名稱,value是參數值
    publicKey     驗籤公鑰
    charset     驗簽字符集,統一用utf-8
   返回boolean類型,根據這個來判斷是否接受這個異步通知
*/ boolean AlipaySignature.rsaCheckV2(Map<String, String> params, String publicKey, String charset);

7.回調請求的返回

商城給支付寶的返回數據。給支付寶返回時,應在response中把"success"放進去,返回的規則:

程序執行完後必須打印輸出"success"(不包含引號),若是商戶反饋給支付寶的字符不是success這7個字符,支付寶服務器會不斷重發通知,直到超過24小時22分鐘,通常狀況下,25小時內完成8次通知。(通知的間隔頻率通常是:4m,10m,1h,2h,6h,15h)。

 

 

支付寶掃碼支付對接技巧:

1.回調的調試方式

支付寶怎麼調到我,由於支付寶是在網絡中的,因此至少我應該是能夠上外網的。因此有如下幾種方案:

1)路由器設置開放本地到外網(不推薦)

2)外網遠程debug:例如當前商城部署在阿里雲上,阿里雲對外是有一個固定的ip或域名,回調地址設置成阿里雲的這個服務器,而後保證本地代碼和阿里雲上的代碼是一致的,而後開放一個遠程debug的端口,在本機進行遠程debug。這樣在支付寶送回請求時,能夠在本地進行debug。注意:(1)保持遠端代碼版本和本地代碼保持一致。(2)及時關閉開放的debug端口。

3)內網穿透(natapp)

經過這個natapp軟件,能夠獲得一個外網能夠訪問的域名,訪問這個域名與訪問本機是同樣的。

相關文章
相關標籤/搜索