編輯:關於Android編程
一家移動互聯網公司,說到底,要盈利總是需要付費用戶的,自己開發支付系統對於資源有限的公司來說顯然不太明智,國內已經有多家成熟的移動支付提供商,阿裡就是其中之一。
筆者在此總結了下阿裡旗下支付寶Android SDK支付的接入流程,供後來者參考。
接入流程如下:
1 簽約成為支付寶商戶
簽約地址:https://b.alipay.com/,
只有成為簽約商戶的開發者才能具備集成支付寶app支付的資格。
簽約資料:1)營業執照 2)APP說明文檔 3)商戶經營信息、商戶聯系人等信息
必要時還需提供APP apk以備審核。審核通過後即可進行代碼集成。
審核通過後,可得到支付寶分配的商戶號等信息。
2 客戶端代碼集成准備
2.1 導入jar包資源
目前最新版支付寶開發jar包下載地址:http://xiazai.jb51.net/201611/yuanma/alipaySdk_jb51.jar
下載後將之拷貝libs目錄,Eclipse會自動添加依賴,Android Studio需在app的gradle中添加一行
compile files('libs/alipaySdk-20160223.jar')
點擊右上角: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>
添加必要權限
<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 添加支付寶混淆規則
-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攜帶支付信息調用支付接口請求支付寶客戶端調起支付界面;
2.用戶操作,輸入密碼支付,支付成功;直接返回取消支付;出現錯誤,支付失敗;進入支付界面,但輸入密碼支付,支付待確認;
3.支付寶客戶端將支付結果告訴app客戶端,商戶服務器通知app服務器支付結果;
4.app客戶端處理支付結果;
5.app服務器處理支付結果。
支付寶的支付流程較之微信的支付流程圖少了一步app服務器端訂單的生成,但是在其demo代碼中是推薦使用app服務器進行sign簽名過程的,於是筆者索性是按照的微信支付的流程(微信支付交互流程)去集成的。
•客戶端代碼得到用戶購買的商品信息,將之傳給自己公司app服務器,參數包含但不限於以下:
params.put("money", payMoney);// 商品金額,單位:元 params.put("goodsname", goodsName);// 商品名稱
注意:支付寶支付的人民幣單位和微信支付,銀聯支付稍有不同,需以:元 作為支付單位。其他兩者支付單位為:分
其他參數均交給咱們app服務器處理即可,詳細參數請點擊:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1
•app服務器參考上述詳細參數鏈接,得到sign(支付簽名信息)字段並返回sign字段給手機客戶端;
•手機客戶端使用sign簽名信息在非UI線程調起支付客戶端進行支付;
用戶操作:輸入密碼進行支付;返回鍵取消支付;進入支付界面,用戶未進行支付,用戶返回,待支付;網絡無連接支付失敗等;
•客戶端得到支付結果;
•支付寶服務器異步通知咱們公司app服務器支付結果(服務器的工作,與客戶端無關)
這樣做的好處:簽名邏輯在服務器完成,app無需暴露公鑰和私鑰,更安全。同時也是demo中的推薦做法。
更詳細的支付寶接入交互流程解釋請點擊:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.7WO30X&treeId=59&articleId=103658&docType=1
4 客戶端代碼示例
支付調起代碼(須在子線程)
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線程)
/*支付寶支付結果碼*/ private static final String PAY_OK = "9000";// 支付成功 private static final String PAY_WAIT_CONFIRM = "8000";// 交易待確認 private static final String PAY_NET_ERR = "6002";// 網絡出錯 private static final String PAY_CANCLE = "6001";// 交易取消 private static final String PAY_FAILED = "4000";// 交易失敗 /*內部類,處理支付寶支付結果*/ static class AliPayHandler extends Handler { private SoftReference<PayActivity> activitySoftReference;// 使用軟引用防止內存洩漏 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來自支付寶demo中的PayResult.java
至此,集成支付寶SDK結束。祝各位集成支付寶支付成功!
結束語
app服務器接入注意事項:官方給出的填寫rsa公鑰的地址有誤,無論填寫什麼都提示:公鑰格式錯誤。需要移步至:支付寶公鑰填寫正確地址填寫
按照慣例,附上支付寶SDK接入的官方demo下載鏈接:https://doc.open.alipay.com/doc2/detail.htm?treeId=54&articleId=104509&docType=1
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
由於近期需要這個listview固定頭部很簡單就是ListView增加一個headView頭部然後根據滑動的距離判斷是否顯示隱藏了的按鈕效果圖接下來就是顯示代碼了首先是布
前段時間下載了AChartEnginee的源碼,並且對源碼的框架進行了一些了解,講解了整個框架的組成部分和每個部分的作用,最近一周則主要看了一下源碼中的demo部分,即如
這一節我們來看看登陸頁面怎樣布局,對於剛接觸到Android開發的童鞋來說,Android的布局感覺比較棘手,需要結合各種屬性進行設置,接下來我們由點入面來 了解安卓中頁
Volley是Google I/O 2013推出的網絡通信庫,在volley推出之前我們一般會選擇比較成熟的第三方網絡通信庫,如:android-async-httpre