小實驗目標
對接支付寶,實現支付、轉賬功能。上一次做實驗已經接通了支付、轉賬以及相關的查詢接口,但是沒有接上同步通知與異步通知。今天的小實現目標就是把這2個也接通!
小實驗約束
由於涉及到轉賬功能,所以採用了目前阿里螞蟻金服最高級別的RSA2進行驗籤。
小實驗參考資料
電腦網站支付 Demo
https://docs.open.alipay.com/270/106291/
那些年我們踩過的坑
神坑之一:SHA256WithRSA vs SHA1WithRSA
本次小實驗的坑在於支付寶提供的rsaCertCheckV2無法正常驗籤,RSA2對就的是SIGN_SHA256RSA_ALGORITHMS(SHA256WithRSA),而支付寶sdk對應的rsaCertCheckV2使用的卻是SIGN_ALGORITHMS(SHA1WithRSA),不明白這個坑是怎麼挖出來的。通過二次組裝skd提供的方法,實現了一個能正常驗籤的rsaCertCheckV2。
神坑之二:SignCheckContent到底是V1還是V2
按RSA2對應V2的直觀感受,拿AlipaySignature.getSignCheckContentV2獲取得到待簽名的內容,結果簽名通不過,使用AlipaySignature.getSignCheckContentV1反而通過了。
神坑之三:換java jar包
ps:有網友說要替換local_policy.jar、US_export_policy.jar,因爲我之前已經換過了,所以沒有踩到這個坑~
實驗成果
異常通過接口(Nofity),調通,拿到可供測試的參數:
{"gmt_create":"2019-09-16 17:57:47","charset":"UTF-8","gmt_payment":"2019-09-16 17:57:51","notify_time":"2019-09-16 17:57:51","subject":"醉麼商城訂單Zuime1568627848379","sign":"CcQEj2Jm6vk2ECjXxsD0Dq7kJVd9c6OZb8QtSnL39GvpXf+nLpMBlsFjnkBQOfVLLX8Nl3cZ6aND47hIujgl3FB2TWJwxOoPCNpv+VSlKQJvwEE9vdycQV+iQ8CZE4ibX6yXdd4VVF+TyjrwJExYbxSvMa6VAprzEcGUkpVYOpV1BUGWuKK/7k1F6eNj6RbEDG34rBet96G7rYGLQs2f3CPpxuBrOhfzVAgNEbpX9blX+LwjMEYPhXAJpqykHUxIs953sEnwIHTKqwqUxtVHqVpYyc2qeAhK3p4FL5tjhz1Aji0CN+NNdwcBKR4uCO9j/bRHCA+aAZwkAsaTlidgmg==","buyer_id":"2088002249904873","body":"醉麼商城訂單Zuime1568627848379","invoice_amount":"1.00","version":"1.0","notify_id":"2019091600222175751004870502101657","fund_bill_list":"[{\"amount\":\"1.00\",\"fundChannel\":\"ALIPAYACCOUNT\"}]","notify_type":"trade_status_sync","out_trade_no":"200001568627848379","total_amount":"1.00","trade_status":"TRADE_SUCCESS","trade_no":"2019091622001404870517313294","auth_app_id":"2016052201429140","receipt_amount":"1.00","point_amount":"0.00","buyer_pay_amount":"1.00","app_id":"2016052201429140","sign_type":"RSA2","seller_id":"2088021741763089"}
out_trade_no: 200001568627848379
trade_no: 2019091622001404870517313294
trade_status: TRADE_SUCCESS
同步通知(return),調通,驗籤通過,拿到 trade_no
https://i.zuime.com/order/alipay/return?charset=UTF-8&out_trade_no=200001568627848379&method=alipay.trade.page.pay.return&total_amount=1.00&sign=EUXE9Hj%2FetIMQQ5sZrxEzzM6YiDbz91a9lE7v4zjxG4iMT8o6%2Fh6UiHiHc9fA4wiIoaQ8zswJbnpDeda%2BxdK6Q97ZUBBIr5kKF%2BYd4X2%2FgWhvDSD2flwic2%2Ff0JTm0Louy%2B1H6TZ80zaV9cYi68YiQunrDgVF1EOHvE0v%2B%2F42Gs6bvA7p7V%2FN8YnjEnR0smzI2hRJoY09DDC5Yk0%2BNmLyPQgEvar1L7rR6RAlPf4f8mDHH1gU%2B3D8WCtuERT%2FscrWER06V4rteSYj5NQaQ%2F6UyZ%2Fc%2FpBwgcxB6ojVmQKi2LSqEEEt%2BYIH7SpI5QhtiK4ycl2PVK%2FpghR%2FzHjh3cGWQ%3D%3D&trade_no=2019091622001404870517313294&auth_app_id=2016052201429140&version=1.0&app_id=2016052201429140&sign_type=RSA2&seller_id=2088021741763089×tamp=2019-09-16+17%3A58%3A02
簽名通過,tradeNo 200001568627848379
完美調通支付寶RSA2接口的Demo源代碼可關注公衆號【Yuema約嗎】,回覆“alipay”獲取。
核心代碼片段
/**
* 修復支付寶SDK的RSA2驗籤Bug
* @param params
* @return
* @throws Exception
*/
public boolean rsaCertCheckV2(Map<String, String> params) throws Exception{
//獲取
String sign = params.get("sign");
String content = AlipaySignature.getSignCheckContentV1(params);
return AlipaySignature.rsaCertCheck(content,sign, alipayCertPath, AlipayConstants.CHARSET_UTF8,AlipayConstants.SIGN_TYPE_RSA2);
}
今天實驗覆蓋的是return與notify,結合上一次分享,已經覆蓋了接支付寶所需的接口。想了解支付、轉賬相關接口實驗數據與踩坑經驗分享,可查看上一篇分享。
支付寶RSA2支付&轉帳接口集成續集|繼續拿jblog當實驗田練習支付寶RSA2集成 & 網銀直連 直連網銀 轉賬到銀行卡下線了
PS: 我不知道使用沙盒進行測試的小夥伴是怎麼配置的,卡死在支付寶證書這塊,沙盒管理界面沒有下載的入口,導致無法進行RSA2的沙盒實驗,現在使用的是正式帳號^_^
編輯“支付寶RSA2支付|小實驗 接通支付回調與支付通知接口 return & notify 完美踩坑,記錄一次心酸旅行時光碼農生活”