Android App支付系列(二):支付寶SDK接入詳細(xì)指南(附官方支付demo)
一家移動(dòng)互聯(lián)網(wǎng)公司,說(shuō)到底,要盈利總是需要付費(fèi)用戶的,自己開發(fā)支付系統(tǒng)對(duì)于資源有限的公司來(lái)說(shuō)顯然不太明智,國(guó)內(nèi)已經(jīng)有多家成熟的移動(dòng)支付提供商,阿里就是其中之一。
筆者在此總結(jié)了下阿里旗下支付寶Android SDK支付的接入流程,供后來(lái)者參考。
接入流程如下:
1 簽約成為支付寶商戶
簽約地址:https://b.alipay.com/,
只有成為簽約商戶的開發(fā)者才能具備集成支付寶app支付的資格。
簽約資料:1)營(yíng)業(yè)執(zhí)照 2)APP說(shuō)明文檔 3)商戶經(jīng)營(yíng)信息、商戶聯(lián)系人等信息
必要時(shí)還需提供APP apk以備審核。審核通過后即可進(jìn)行代碼集成。
審核通過后,可得到支付寶分配的商戶號(hào)等信息。
2 客戶端代碼集成準(zhǔn)備
2.1 導(dǎo)入jar包資源
目前最新版支付寶開發(fā)jar包下載地址:http://xiazai.jb51.net/201611/yuanma/alipaySdk_jb51.jar
下載后將之拷貝libs目錄,Eclipse會(huì)自動(dòng)添加依賴,Android Studio需在app的gradle中添加一行
compile files('libs/alipaySdk-20160223.jar')
點(diǎn)擊右上角:Sync Now,稍等片刻
2.2 修改AndroidManifest.xml清單
聲明必要Activity
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
添加必要權(quán)限
<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" />
2.3 添加支付寶混淆規(guī)則
-libraryjars libs/alipaySDK-20160223.jar
-keep class com.alipay.android.app.IAlixPay{*;}
-keep class com.alipay.android.app.IAlixPay$Stub{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback{*;}
-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
-keep class com.alipay.sdk.app.PayTask{ public *;}
-keep class com.alipay.sdk.app.AuthTask{ public *;}
3 客戶端代碼集成
支付寶交互流程示意圖
流程圖白話版解釋
1.app攜帶支付信息調(diào)用支付接口請(qǐng)求支付寶客戶端調(diào)起支付界面;
2.用戶操作,輸入密碼支付,支付成功;直接返回取消支付;出現(xiàn)錯(cuò)誤,支付失??;進(jìn)入支付界面,但輸入密碼支付,支付待確認(rèn);
3.支付寶客戶端將支付結(jié)果告訴app客戶端,商戶服務(wù)器通知app服務(wù)器支付結(jié)果;
4.app客戶端處理支付結(jié)果;
5.app服務(wù)器處理支付結(jié)果。
支付寶的支付流程較之微信的支付流程圖少了一步app服務(wù)器端訂單的生成,但是在其demo代碼中是推薦使用app服務(wù)器進(jìn)行sign簽名過程的,于是筆者索性是按照的微信支付的流程(微信支付交互流程)去集成的。
•客戶端代碼得到用戶購(gòu)買的商品信息,將之傳給自己公司app服務(wù)器,參數(shù)包含但不限于以下:
params.put("money", payMoney);// 商品金額,單位:元
params.put("goodsname", goodsName);// 商品名稱
注意:支付寶支付的人民幣單位和微信支付,銀聯(lián)支付稍有不同,需以:元 作為支付單位。其他兩者支付單位為:分
其他參數(shù)均交給咱們app服務(wù)器處理即可,詳細(xì)參數(shù)請(qǐng)點(diǎn)擊:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1
•app服務(wù)器參考上述詳細(xì)參數(shù)鏈接,得到sign(支付簽名信息)字段并返回sign字段給手機(jī)客戶端;
•手機(jī)客戶端使用sign簽名信息在非UI線程調(diào)起支付客戶端進(jìn)行支付;
用戶操作:輸入密碼進(jìn)行支付;返回鍵取消支付;進(jìn)入支付界面,用戶未進(jìn)行支付,用戶返回,待支付;網(wǎng)絡(luò)無(wú)連接支付失敗等;
•客戶端得到支付結(jié)果;
•支付寶服務(wù)器異步通知咱們公司app服務(wù)器支付結(jié)果(服務(wù)器的工作,與客戶端無(wú)關(guān))
這樣做的好處:簽名邏輯在服務(wù)器完成,app無(wú)需暴露公鑰和私鑰,更安全。同時(shí)也是demo中的推薦做法。
更詳細(xì)的支付寶接入交互流程解釋請(qǐng)點(diǎn)擊:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1
4 客戶端代碼示例
支付調(diào)起代碼(須在子線程)
new Thread() {
@Override
public void run() {
super.run();
PayTask payTask = new PayTask(mActivity);
String result = payTask.pay(signInfo, true);
Message message = mHandler.obtainMessage();
message.what = PAY_RESULT;
message.obj = result;
mHandler.sendMessage(message);
}
}.start();
支付處理代碼(UI線程)
/*支付寶支付結(jié)果碼*/
private static final String PAY_OK = "9000";// 支付成功
private static final String PAY_WAIT_CONFIRM = "8000";// 交易待確認(rèn)
private static final String PAY_NET_ERR = "6002";// 網(wǎng)絡(luò)出錯(cuò)
private static final String PAY_CANCLE = "6001";// 交易取消
private static final String PAY_FAILED = "4000";// 交易失敗
/*內(nèi)部類,處理支付寶支付結(jié)果*/
static class AliPayHandler extends Handler {
private SoftReference<PayActivity> activitySoftReference;// 使用軟引用防止內(nèi)存泄漏
public AliPayHandler(PayActivity activity) {
activitySoftReference = new SoftReference<PayActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
PayActivity activity = activitySoftReference.get();
AliPayResult payResult = new AliPayResult((String) msg.obj);
String resutStatus = payResult.getResultStatus();
Log.d(TAG, "statusCode = " + resutStatus);
if (resutStatus.equals(PAY_OK)) {
activity.paySuccessed();
} else if (resutStatus.equals(PAY_CANCLE)) {
activity.payCanceled();
} else if (resutStatus.equals(PAY_NET_ERR)) {
activity.payFailed(NETWORK_ERR);
} else if (resutStatus.equals(PAY_WAIT_CONFIRM)) {
activity.payWaitConfirm();
} else {
activity.payFailed(UNKNOW_ERR);
}
}
}
注:AliPayResult.Java來(lái)自支付寶demo中的PayResult.java
至此,集成支付寶SDK結(jié)束。祝各位集成支付寶支付成功!
結(jié)束語(yǔ)
app服務(wù)器接入注意事項(xiàng):官方給出的填寫rsa公鑰的地址有誤,無(wú)論填寫什么都提示:公鑰格式錯(cuò)誤。需要移步至:支付寶公鑰填寫正確地址填寫
按照慣例,附上支付寶SDK接入的官方demo下載鏈接:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android Studio中Run按鈕是灰色的快速解決方法
這篇文章主要介紹了Android Studio中Run按鈕是灰色的快速解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03
Android中如何取消listview的點(diǎn)擊效果
這篇文章主要介紹了 Android中取消listview的點(diǎn)擊效果的實(shí)現(xiàn)方法,通過引用transparent之后會(huì)讓點(diǎn)擊效果透明化,一起通過本文學(xué)習(xí)吧2017-01-01
Android中關(guān)于相對(duì)布局RelativeLayout的技巧匯總
RelativeLayout是相對(duì)布局控件,以控件之間相對(duì)位置或相對(duì)父容器位置進(jìn)行排列。下面這篇文章主要給大家介紹了關(guān)于Android中相對(duì)布局RelativeLayout的一些技巧,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02
Android?NotificationListenerService?通知服務(wù)原理解析
這篇文章主要為大家介紹了Android?NotificationListenerService?通知服務(wù)原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android?ViewPager?+?Fragment實(shí)現(xiàn)滑動(dòng)頁(yè)面效果
本文通過實(shí)例代碼較詳細(xì)的給大家介紹了Android?ViewPager?+?Fragment實(shí)現(xiàn)滑動(dòng)頁(yè)面效果,需要的朋友可以參考下2018-06-06
Android——Android lint工具項(xiàng)目資源清理詳解
這篇文章主要介紹了Android——Android lint工具項(xiàng)目資源清理詳解的相關(guān)資料,需要的朋友可以參考下2016-11-11
總結(jié)Android中MD風(fēng)格相關(guān)控件
自Android5.0發(fā)布以來(lái),谷歌推出全新的Material Desigen設(shè)計(jì)風(fēng)格,時(shí)過一年多了,在國(guó)內(nèi)也看到很多應(yīng)用在慢慢適應(yīng)MD設(shè)計(jì)風(fēng)格。今天小編給大家總結(jié)下Android中MD風(fēng)格相關(guān)控件的知識(shí),有需要的可以參考學(xué)習(xí)。2016-08-08

