支付寶支付 java後端 android ios 前端 開發記錄筆記
阿新 • • 發佈:2019-02-11
JAVA後端
多和客服溝通,比如在使用alipay.trade.app.pay型別支付時遇到APP報錯,錯誤為使用者取消,死活不知道原因,最後客服表示我當前申請的支付寶商家賬號中的APP支付介面過老,需要重新簽約一份新協議。
alipay的sdk 只相容新介面,所以在做PC端的二維碼掃描和賬號登入時用“https://mapi.alipay.com/gateway.do”自己拼接成最終請求的URL。
Map<String, Object> map = new TreeMap<>();
map.put("service", "create_direct_pay_by_user" );
map.put("partner", alipayConf.get("partner"));
map.put("_input_charset", "utf-8");
map.put("notify_url", serverAddr + "/Payment.processNotify");
// map.put("return_url", arg.get("return_url"));
map.put("out_trade_no", id);
map.put("subject", arg.get("subject" ));
map.put("payment_type", "1");
map.put("qr_pay_mode", "1");
map.put("total_fee", amount / 100.00);
map.put("seller_id", alipayConf.get("seller_id"));
map.put("it_b_pay", arg.get("timeout"));
map.put("sign", alipaySignByRSA(map));
map.put("sign_type", "RSA" );
Map<String, Object> req = new HashMap<>();
req.put("id", id);
req.put("url", alipayConf.get("addr") + "?" + toQueryString(map));
- create_direct_pay_by_user介面預設是支付寶的介面,帶有二維碼和賬號登陸等一系列詳細功能很亂,如果過想要自己簡單的展示二維碼和支付寶登入怎麼辦呢?二維碼可以使用qr_pay_mode引數調整為前置模式此時前端就會是一個單獨乾淨簡潔的二維碼形式,但會發現沒有了登入,那如何做一個簡單的登入賬號介面呢,可以通過支付寶H5介面“alipay.wap.create.direct.pay.by.user”實現,此時前端介面會是一個很簡潔乾淨的登入形式。
- 各種支付型別介面的非同步回掉格式都一樣,所以可以很方便的驗籤,所以在安全驗證地方主要依賴非同步。
Android端
- 沒有什麼可注意的點,很簡單很方便唯獨有個resultStatus當值為8000時表示不確定,所以需要依賴服務端的非同步通知
IOS端
- ios端需要設定CFBundleURLSchemes,這個值最好是字元加上PID拼接,簡單方便。
- handleOpenURL的返回url是否與pid拼接的匹配。
- 返回8000時同樣要依賴非同步通知。
前端
- 支付寶前端都是用請求後端獲取url,然後在前端用iframe載入url展示支付寶介面。
- 注意iframe在使用有些介面中,支付寶介面URL是會刷掉父介面的地址的。