接入前準(zhǔn)備
接入APP支付能力前,開發(fā)者需要完成以下前置步驟。
本文檔展示了如何從零開始,使用支付寶開放平臺服務(wù)端 SDK 快速接入App支付產(chǎn)品,完成與支付寶對接的部分。
第一步:創(chuàng)建應(yīng)用并獲取APPID
要在您的應(yīng)用中接入支付寶 App 支付能力,您需要登錄支付寶開放平臺open.alipay.com),在開發(fā)者中心中創(chuàng)建您的應(yīng)用,應(yīng)用審核通過后會生成應(yīng)用唯一標(biāo)識(APPID),并且可以申請開通開放產(chǎn)品使用權(quán)限。通過 APPID 您的應(yīng)用才能調(diào)用開放產(chǎn)品的接口能力。需要詳細(xì)了解開放平臺創(chuàng)建應(yīng)用步驟請參考《開放平臺應(yīng)用創(chuàng)建指南》。
第二步:配置應(yīng)用
添加功能并簽約
?
應(yīng)用創(chuàng)建完成后,系統(tǒng)會自動跳轉(zhuǎn)到應(yīng)用詳情頁面。開發(fā)者可以點(diǎn)擊 添加功能 來 添加 App支付 功能。添加功能后開發(fā)者需要在開放平臺里進(jìn)行簽約,第三方應(yīng)用開發(fā)者可以代替商戶簽約。
配置密鑰
?
為了保證交易雙方(商戶和支付寶)的身份和數(shù)據(jù)安全,開發(fā)者在調(diào)用接口前,需要配置雙方密鑰,對交易數(shù)據(jù)進(jìn)行雙方校驗(yàn)。RSA 密鑰包含應(yīng)用私鑰(APP_PRIVATE_KEY)、應(yīng)用公鑰(APP_PUBLIC_KEY)。生成密鑰后,開發(fā)者需要在開放平臺開發(fā)者中心進(jìn)行密鑰配置,配置完成后可以獲取支付寶公鑰(ALIPAY_PUBLIC_KEY),配置的詳細(xì)步驟請參考《配置應(yīng)用環(huán)境》。您還可以通過觀看快速簽名教程學(xué)習(xí)密鑰的配置。
說明:
支付寶開放平臺 SDK 封裝了簽名和驗(yàn)簽過程,只需配置賬號及密鑰參數(shù),建議開發(fā)者使用。開發(fā)者還可以通過?自助排查流程?和?驗(yàn)簽教程?自助排查配置應(yīng)用過程中遇到的問題。
第三步:集成和開發(fā)
接入移動支付需要集成兩個 SDK:客戶端 SDK 需要集成在商戶自己的 APP 中,用于喚起支付寶 APP 并發(fā)送交易數(shù)據(jù),并在支付寶APP返回商戶APP時獲得支付結(jié)果;服務(wù)端SDK需要商戶集成在自己的服務(wù)端系統(tǒng)中,用于協(xié)助解析并驗(yàn)證客戶端同步返回的支付結(jié)果和異步通知。
集成前提
開發(fā)者在集成和開發(fā)前需要了解一下常用的接入方式和架構(gòu)建議,如下圖所示:
集成客戶端 SDK
在集成 App 支付能力時,支付寶提供主流移動平臺的 App 提供集成方式。點(diǎn)擊下載客戶端SDK。
更多集成說明參見?客戶端 Android 集成說明?和?客戶端 iOS 集成說明。
原文鏈接??小程序文檔 - 支付寶文檔中心
導(dǎo)入支付寶 SDK
以下內(nèi)容可參考 alipay_demo 的實(shí)現(xiàn)。
1.將?alipaySdk-15.5.7-20181023110917.aar
?包放在您的應(yīng)用工程的?libs
?目錄下(圖片中文件名僅做示例,請以實(shí)際 SDK 文件名為準(zhǔn)):
2.在主項(xiàng)目的?build.gradle
?中,添加下面的內(nèi)容,將?libs
?目錄作為依賴倉庫:
allprojects {
repositories {
// 添加下面的內(nèi)容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他倉庫
}
3.在您 App Module 的 build.gradle 中,添加下面的內(nèi)容,將支付寶 SDK 作為項(xiàng)目依賴:
dependencies {
// 添加下面的內(nèi)容
compile (name: 'alipaySdk-15.5.7-20181023110917', ext: 'aar')
// ... 其他依賴項(xiàng)
}
至此,支付寶 SDK 開發(fā)資源導(dǎo)入完成。
運(yùn)行權(quán)限
為正常完成良好的支付流程體驗(yàn),支付寶 SDK 需要使用下面這些權(quán)限:
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
您需要在 AndroidManifest 里配置以上 3 個權(quán)限,支付寶 SDK 在運(yùn)行時需要進(jìn)行網(wǎng)絡(luò)連接,并在必要的時候判斷網(wǎng)絡(luò)連接的狀態(tài)(4G/Wi-Fi)等來進(jìn)行支付體驗(yàn)的優(yōu)化。
支付接口調(diào)用
需要在新線程中調(diào)用支付接口(可參考 alipay_demo 實(shí)現(xiàn))。
PayTask 對象主要為商戶提供訂單支付、查詢功能,及獲取當(dāng)前開發(fā)包版本號。
獲取 PayTask 支付對象調(diào)用支付(支付行為需要在獨(dú)立的非ui線程中執(zhí)行),代碼示例:
final String orderInfo = info; // 訂單信息
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(DemoActivity.this);
Map <String,String> result = alipay.payV2(orderInfo,true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必須異步調(diào)用
Thread payThread = new Thread(payRunnable);
payThread.start();
?
參數(shù)名稱 | 參數(shù)說明 |
String orderInfo | app支付請求參數(shù)字符串,主要包含商戶的訂單信息,key=value形式,以&連接。 |
boolean isShowPayLoading | 用戶在商戶app內(nèi)部點(diǎn)擊付款,是否需要一個 loading 做為在錢包喚起之前的過渡,這個值設(shè)置為 true,將會在調(diào)用 pay 接口的時候直接喚起一個 loading,直到喚起H5支付頁面或者喚起外部的錢包付款頁面 loading 才消失。(建議將該值設(shè)置為 true,優(yōu)化點(diǎn)擊付款到支付喚起支付頁面的過渡過程。) |
orderInfo 示例如下,參數(shù)說明見"請求參數(shù)說明",orderInfo 的獲取必須來源于服務(wù)端:
app_id=2015052600090779&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.02%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22314VYGIAGG7ZOYY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2×tamp=2016-08-15%2012%3A12%3A15&version=1.0&sign=MsbylYkCzlfYLy9PeRwUUIg9nZPeN9SfXPNavUCroGKR5Kqvx0nEnd3eRmKxJuthNUx4ERCXe552EV9PfwexqW%2B1wbKOdYtDIb4%2B7PL3Pc94RZL0zKaWcaY3tSL89%2FuAVUsQuFqEJdhIukuKygrXucvejOUgTCfoUdwTi7z%2BZzQ%3D
返回值:?本方法調(diào)用的返回結(jié)果,參數(shù)說明見"客戶端同步返回參數(shù)說明"。
支付結(jié)果獲取和處理
調(diào)用 pay 方法支付后,將通過2種途徑獲得支付結(jié)果:
同步返回
商戶應(yīng)用客戶端通過當(dāng)前調(diào)用支付的Activity的Handler對象,通過它的回調(diào)函數(shù)獲取支付結(jié)果。(可參考 alipay_demo 實(shí)現(xiàn))
代碼示例:
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
Result result = new Result((String) msg.obj);
Toast.makeText(DemoActivity.this, result.getResult(),
Toast.LENGTH_LONG).show();
};
};
異步通知
商戶需要提供一個 http 協(xié)議的接口,包含在請求支付的入?yún)⒅?,?key 對應(yīng) notify_url。支付寶服務(wù)器在支付完成后,會以 POST 方式調(diào)用 notify_url 傳輸數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-850143.html
獲取當(dāng)前開發(fā)包版本號
調(diào)用 PayTask 對象的 getVersion() 方法查詢。
代碼示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-850143.html
PayTask payTask = new PayTask(activity);
String version = payTask.getVersion();
到了這里,關(guān)于android支付寶接入流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!