支付寶支付非常簡單,因爲步驟簡單,文檔寫的也比較詳細。
第一步,把支付寶的jar包複製到項目裏。
第二步,如果你看了支付寶的demo你可能會覺得很複雜,其實有很多我們都用不上。看起來很複雜的原因是,demo把加密放到客戶端。但是,爲了安全,我們實際開發中,必須把加密這塊放到服務端。下面上代碼。
private void aliPay(String requestUrl) {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PayActivity.this);
Map< String, String > result = alipay.payV2(requestUrl, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
}
這裏的requestUrl是服務端集成完支付寶後,我們請求他接口返回的字符串。這個字符串是拼接了簽名,公鑰等參數,我們不需要管,拿過來調起支付寶支付就可以了。
@SuppressLint( "HandlerLeak" )
private Handler mHandler = new Handler() {
@SuppressWarnings( "unused" )
public void handleMessage(Message msg) {
switch ( msg.what ) {
case SDK_PAY_FLAG: {
@SuppressWarnings( "unchecked" )
PayResult payResult = new PayResult((Map< String, String >) msg.obj);
/**
對於支付結果,請商戶依賴服務端的異步通知結果。同步通知結果,僅作爲結束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要驗證的信息
String resultStatus = payResult.getResultStatus();
// 判斷resultStatus 爲9000則代表支付成功
if ( TextUtils.equals(resultStatus, "9000") ) {
// 該筆訂單是否真實支付成功,需要依賴服務端的異步通知。
Toast.makeText(PayActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
finish();
} else {
// 該筆訂單真實的支付結果,需要依賴服務端的異步通知。
Toast.makeText(PayActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
finish();
}
break;
}
default:
break;
}
}
;
};
第三步,然後是支付完成的回調了。在回調裏做自己需要的業務邏輯。代碼在上面。