Android支付寶支付的示例代碼
上一篇,我們已經(jīng)詳細(xì)講解了Android微信支付,今天接著為大家?guī)碇Ц秾氈Ц?,支付寶支付相?duì)微信支付要簡單一些,吐槽一下,而且支付寶文檔確實(shí)比微信的文檔好了不少,下面開始講解支付流程。
1、首先給出官方文檔的地址
2、在開始集成和開發(fā)前,首先了解一下常用的接入方式和架構(gòu)建議:

支付流程.png
在開始下一步之前,給大家看看網(wǎng)上的很多操作.

網(wǎng)上的代碼.png
這一大堆代碼,后面還有,百來行吧,而且支付寶Demo貌似也是這么干的,估計(jì)一些新司機(jī)就有點(diǎn)懵逼了,至于嗎?集成一個(gè)第三方的,不應(yīng)該是調(diào)用越簡潔越好嗎,而且還是大廠的第三方,不應(yīng)該???所以,筆者有必要出面說明一下,那些老司機(jī),你們弄好了,也不能這么嚇唬新司機(jī)啊,說正經(jīng)的,網(wǎng)上代碼那么長,是因?yàn)樗麄冊(cè)诒镜貐^(qū)生成的訂單簽名,這個(gè)訂單簽名也就是一個(gè)字符串,他由訂單信息,支付金額,訂單號(hào),商戶信息等拼接起來的
下面是APP支付請(qǐng)求所需的參數(shù)

App支付請(qǐng)求參數(shù)說明.png
然而筆者告訴你,這一大堆,你并不需要,你只要了解一下就行了。因?yàn)閷?shí)際開發(fā)中幾乎都是在服務(wù)器端生成支付的訂單簽名和訂單信息,因?yàn)樵诤笈_(tái)的安全性比前端要好,在APP生成,危險(xiǎn)性很高,如果你們后臺(tái)大哥不給你弄,讓你自己生成,我建議你找他喝點(diǎn)小酒,嘮嘮嗑,好好說說,他估計(jì)就同意了。所以網(wǎng)上那種寫一大堆代碼的,實(shí)際上是在本地去生成簽名
接下來的事情嘛,就比較簡單了,
3、清單文件做如下配置
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <activity android:name="com.alipay.sdk.app.H5PayActivity" android:configChanges="orientation|keyboardHidden|navigation|screenSize" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" /> <activity android:name="com.alipay.sdk.app.H5AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden" />
4、請(qǐng)求自己服務(wù)器,獲取訂單簽名字符串,然后調(diào)用支付寶SDK,發(fā)起支付請(qǐng)求
/**
* 顯示支付寶簽名
*
* @param aliPayBean 自己服務(wù)器返回的訂單簽名字符串
*/
public void aliPayData(AliPayBean aliPayBean) {
//支付寶支付請(qǐng)求所需的簽名字符串
final String orderInfo = aliPayBean.getResult().getMessage();
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(PaymentActivity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);
Log.i("msp", result.toString());
Message msg = new Message();
msg.what = SDK_ALI_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必須異步調(diào)用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
5、支付寶支付結(jié)果的回調(diào)
//支付寶返回?cái)?shù)據(jù)handler
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_ALI_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
對(duì)于支付結(jié)果,請(qǐng)商戶依賴服務(wù)端的異步通知結(jié)果。同步通知結(jié)果,僅作為支付結(jié)束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要驗(yàn)證的信息
String resultStatus = payResult.getResultStatus();
String result = "";
// 判斷resultStatus 為9000則代表支付成功
Log.i(TAG, resultStatus);
if (TextUtils.equals(resultStatus, "9000")) {
//支付成功
result = "支付成功";
aliPaySuccess();
} else if ("6001".equals(resultStatus)) {
result = "您取消了支付";
} else {
// 該筆訂單真實(shí)的支付結(jié)果,需要依賴服務(wù)端的異步通知。
result = "支付失敗";
}
ToastUtils.showToast(mContext, result);
break;
}
}
}
};
注意:這里支付成功,我只是以客戶端作為標(biāo)準(zhǔn),實(shí)際傳支付結(jié)果,最好以服務(wù)端為標(biāo)準(zhǔn),我們調(diào)用支付寶支付的時(shí)候,支付寶會(huì)有2個(gè)回調(diào),一個(gè)是APP的回調(diào),就是我們上面這個(gè),9000代表支付成功,一個(gè)是支付寶服務(wù)器通知我們自己的服務(wù)器,所以,我們自己的服務(wù)器也有個(gè)回調(diào)。所以APP可以請(qǐng)求后臺(tái)的接口來獲取支付結(jié)果。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android入門之使用SharedPreference存取信息詳解
這篇文章主要為大家詳細(xì)介紹了Android如何使用SharedPreference實(shí)現(xiàn)存取信息,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下2022-12-12
Flutter Reusable Lottie Animations技巧
這篇文章主要為大家介紹了Flutter Reusable Lottie Animations技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android編程解析Json格式數(shù)據(jù)的方法
這篇文章主要介紹了Android編程解析Json格式數(shù)據(jù)的方法,涉及Android中json格式數(shù)據(jù)的構(gòu)造、讀取及遍歷等技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Flutter使用texture_rgba_renderer實(shí)現(xiàn)桌面端渲染視頻詳解
這篇文章主要為大家介紹了Flutter如何使用texture_rgba_renderer實(shí)現(xiàn)桌面端渲染視頻,文中的示例代碼講解詳細(xì),需要的可以了解一下2023-07-07
使用Android studio查看Kotlin的字節(jié)碼教程
這篇文章主要介紹了使用Android studio查看Kotlin的字節(jié)碼教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android 中API之Drawable資源詳解及簡單實(shí)例
這篇文章主要介紹了Android 中API之Drawable資源詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android數(shù)據(jù)轉(zhuǎn)移之Launcher導(dǎo)出數(shù)據(jù)庫給另一臺(tái)機(jī)器加載
這篇文章主要介紹了Android系統(tǒng)中Launcher導(dǎo)出數(shù)據(jù)庫給另一臺(tái)機(jī)器加載的詳細(xì)流程,數(shù)據(jù)轉(zhuǎn)移是少見但早晚要用到的功能,感興趣的朋友快來提前掌握吧2021-11-11

