前言:第三方支付已經成爲了APP不可或少的部分,目前主流的第三方有支付寶、微信支付、拉卡拉、通聯支付等,其中(起碼現在)支付寶是處於領先和主導地位的。
今天就藉助之前寫的一個APP來回顧和熟悉下支付寶的移動支付,至於前期準備工作(如企業認證,商戶開通等),在這裏就不再敘述了,網上資料很多。這篇文章主要介紹支付寶移動支付的流程與實現,以及在開發過程中遇到的一些坑。。。話不多說,下面開始:
首先,介紹下支付寶支付的流程(非官方)
獲取訂單列表—創建訂單—發起支付—調支付寶APP支付—處理回調
在這個APP的實現中,創建訂單是在後臺實現的,其實這一部分可以在APP中實現,但是在APP端實現的話有可能會導致用戶信息、祕鑰信息的泄露。其實前面兩步只是爲了獲取調用支付寶支付SDK所需要的訂單信息(加密的),獲得訂單信息後便可藉助SDK發起支付,前面三步就不詳細說了。
//調用第三方APP進行支付
private void doPay(final String orderUrl) {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
//調用支付寶
PayTask payTask = new PayTask(WalletActivity.this);
Map<String, String> result = payTask.payV2(orderUrl, true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必須異步調用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
上面的代碼便是調用SDK發起支付相關代碼,用過支付寶進行充值的朋友應該瞭解現在的支付寶支付會自動
檢查本地是否安裝支付寶APP,如果沒有安裝則跳轉Html5頁面,否則調起APP進行支付。回調處理代碼如下:
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
PayResult payResult = new PayResult((Map<String, String>) (msg.obj));
String resultInfo = payResult.getResult();// 同步返回需要驗證的信息
String resultStatus = payResult.getResultStatus();
if (TextUtils.equals(resultStatus, "9000")) {
Toast.makeText(getBaseContext(), "支付成功", Toast.LENGTH_LONG).show();
} else {
// "8000"代表支付結果因爲支付渠道原因或者系統原因還在等待支付結果確認,最終交易是否成功以服<span style="white-space:pre;"> </span>務端異步通知爲準(小概率狀態)
if (TextUtils.equals(resultStatus, "8000")) {
Toast.makeText(getBaseContext(), "支付結果確認中", Toast.LENGTH_LONG).show();
} else if (TextUtils.equals(resultStatus, "6001")) {
Toast.makeText(getBaseContext(), "交易取消", Toast.LENGTH_LONG).show();
} else if (TextUtils.equals(resultStatus, "6002")) {
Toast.makeText(getBaseContext(), "網絡異常", Toast.LENGTH_LONG).show();
} else if (TextUtils.equals(resultStatus, "5000")) {
Toast.makeText(getBaseContext(), "重新請求", Toast.LENGTH_LONG).show();
} else {
// 其他值就可以判斷爲支付失敗
Toast.makeText(getBaseContext(), "支付失敗" + resultStatus, Toast.LENGTH_LONG).show();
}
}
break;
}
}
}
};
總結一下,開發過程中需要注意的一些坑:
1、祕鑰要保證正確,即APP與後臺要保證加密方式以及祕鑰的一致
2、金額需要精確到小數點後兩位
3、安卓資源清單配置文件中不要忘記聲明AuthActivity和H5PayActivity
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" />
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" />