1.流程:1.app下訂單提交給后臺服務器生成訂單信息,帶有簽名。2.提交上述返回數據到支付寶,喚起支付。3.支付寶向app返回支付結果。向服務端異步返回支付結果。
2.關于應用私鑰和支付寶公鑰
關于私鑰,官方要求一定不能放到app客戶端。
一定要配對。所謂配對就是選擇一種算法的私鑰,要使用對應的支付寶公鑰。
在以前的api中,簽名是在app端完成的。最新的api已不建議這樣做。目前最新版本是15.3.5。簽名放在服務器端完成,由服務器按照規則返回一個字符串。app端拿著這個串去調用支付寶支付。
需要注意的是,支付需要app狀態是上線狀態,否則只能使用沙箱測試。具體請看相關文檔。
3.支付關鍵代碼:
/**? ? * 支付寶支付? ? *@paramorderInfo? ? */privatevoidaliPay(finalString orderInfo){? ? ? ? Runnable payRunnable =newRunnable() {@Overridepublicvoidrun() {? ? ? ? ? ? ? ? PayTask alipay =newPayTask(getActivity());? ? ? ? ? ? ? ? Map result = alipay.payV2(orderInfo,true);? ? ? ? ? ? ? ? Message msg =newMessage();? ? ? ? ? ? ? ? msg.what =SDK_ALI_PAY_FLAG;? ? ? ? ? ? ? ? msg.obj = result;? ? ? ? ? ? ? ? mHandler.sendMessage(msg);? ? ? ? ? ? }? ? ? ? };? ? ? ? Thread payThread =newThread(payRunnable);? ? ? ? payThread.start();? ? }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
privateHandler mHandler =newHandler() {@SuppressWarnings("unused")publicvoidhandleMessage(Message msg) {switch(msg.what) {caseSDK_ALI_PAY_FLAG: {//支付寶支付PayResult payResult =newPayResult((Map) msg.obj);/**對于支付結果,請商戶依賴服務端的異步通知結果。同步通知結果,僅作為支付結束的通知。*/String resultInfo = payResult.getResult();// 同步返回需要驗證的信息String resultStatus = payResult.getResultStatus();// 判斷resultStatus 為9000則代表支付成功if(TextUtils.equals(resultStatus,"9000")) {// 該筆訂單是否真實支付成功,需要依賴服務端的異步通知。Toast.makeText(mContext,"支付成功", Toast.LENGTH_SHORT).show();? ? ? ? ? ? ? ? ? ? ? ? getActivity().finish();? ? ? ? ? ? ? ? ? ? }else{// 該筆訂單真實的支付結果,需要依賴服務端的異步通知。Toast.makeText(mContext,"支付失敗"+payResult.getResultStatus()+payResult.getResult(), Toast.LENGTH_LONG).show();? ? ? ? ? ? ? ? ? ? }break;? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ....? ? ? ? ? }? ? ? }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
如果你的項目中使用了混淆,還需做一下配置:
#支付寶支付混淆 sdk15.3.5-keep classcom.alipay.android.app.IAlixPay{*;}-keep classcom.alipay.android.app.IAlixPay$Stub{*;}-keep classcom.alipay.android.app.IRemoteServiceCallback{*;}-keep classcom.alipay.android.app.IRemoteServiceCallback$Stub{*;}-keep classcom.alipay.sdk.app.PayTask{ public *;}-keep classcom.alipay.sdk.app.AuthTask{ public *;}-dontwarncom.alipay.**
1
2
3
4
5
6
7
8
9
很簡單。有空完善整個流程說明及詳細的流程說明。