在你的 Android App 里接入支付宝
生活随笔
收集整理的這篇文章主要介紹了
在你的 Android App 里接入支付宝
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
沒想到現(xiàn)在 App 里集成支付寶是這么的簡單,我還折騰了好久...
好了,開始,假設(shè)你已經(jīng)完成了支付寶那些繁雜的申請啥的工作,進入開發(fā)了。 首先,去下載官方的 DEMO : App支付客戶端DEMO&SDK。
導(dǎo)入開發(fā)資源
解壓后把里面的 jar 包拿出來放到你工程的 lib 目錄下,如圖
然后進入工程的“Project Structure”,在app module下選擇“File dependency”,將libs目錄下的alipaySDK-xxxxxxxx.jar導(dǎo)入,或者在app module下的build.gradle下手動添加依賴,如下代碼所示: ......compile files('libs/alipaySdk-20170725.jar')...... 復(fù)制代碼修改 AndroidManifest 文件
復(fù)制進去就行
<activityandroid:name="com.alipay.sdk.app.H5PayActivity"android:configChanges="orientation|keyboardHidden|navigation|screenSize"android:exported="false"android:screenOrientation="behind"android:windowSoftInputMode="adjustResize|stateHidden" > </activity><activityandroid:name="com.alipay.sdk.app.H5AuthActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind"android:windowSoftInputMode="adjustResize|stateHidden" > </activity>復(fù)制代碼聲明權(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" />復(fù)制代碼好了,準(zhǔn)備工作基本完成。
支付接口的調(diào)用
這里參考下給的 Demo。 由于支付包的 Demo 給的是本地加密的方式,并且不推薦使用這種方法,所以我們只需要用的其中的部分代碼就好了。 首先,把 PayResult.java這個類復(fù)制到你的項目里。代碼如下:
public class PayResult {private String resultStatus;private String result;private String memo;public PayResult(Map<String, String> rawResult) {if (rawResult == null) {return;}for (String key : rawResult.keySet()) {if (TextUtils.equals(key, "resultStatus")) {resultStatus = rawResult.get(key);} else if (TextUtils.equals(key, "result")) {result = rawResult.get(key);} else if (TextUtils.equals(key, "memo")) {memo = rawResult.get(key);}}}public String toString() {return "resultStatus={" + resultStatus + "};memo={" + memo+ "};result={" + result + "}";}/*** @return the resultStatus*/public String getResultStatus() {return resultStatus;}/*** @return the memo*/public String getMemo() {return memo;}/*** @return the result*/public String getResult() {return result;} }復(fù)制代碼然后調(diào)支付接口。PayTask對象主要為商戶提供訂單支付、查詢功能,及獲取當(dāng)前開發(fā)包版本號。獲取PayTask支付對象調(diào)用支付(支付行為需要在獨立的非ui線程中執(zhí)行),
private static final int SDK_PAY_FLAG = 1;// 訂單信息final String orderInfo = info; Runnable payRunnable = new Runnable() {public void run() {PayTask alipay = new PayTask(PayDemoActivity.this);Map<String, String> result = alipay.payV2(orderInfo, true);Message msg = new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};Thread payThread = new Thread(payRunnable);payThread.start(); 復(fù)制代碼注意下 orderInfo這個變量,這個值是由通過向后臺請求返回的值。 這里需要后臺注意的是,寫的時候看好App支付請求參數(shù)說明這個文檔。 然后是支付結(jié)果的獲取與處理。
("HandlerLeak")private Handler mHandler = new Handler() {("unused")public void handleMessage(Message msg) {switch (msg.what) {case SDK_PAY_FLAG: {("unchecked")PayResult payResult = new PayResult((Map<String, String>) msg.obj);/**對于支付結(jié)果,請商戶依賴服務(wù)端的異步通知結(jié)果。同步通知結(jié)果,僅作為支付結(jié)束的通知。*/String resultInfo = payResult.getResult();// 同步返回需要驗證的信息String resultStatus = payResult.getResultStatus();// 判斷resultStatus 為9000則代表支付成功if (TextUtils.equals(resultStatus, "9000")) {// 該筆訂單是否真實支付成功,需要依賴服務(wù)端的異步通知。Toast.makeText(PayDemoActivity.this, "支付成功", Toast.LENGTH_SHORT).show();} else {// 該筆訂單真實的支付結(jié)果,需要依賴服務(wù)端的異步通知。Toast.makeText(PayDemoActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();}break;}default:break;}};}; 復(fù)制代碼然后就好了。 結(jié)束。
后記
這是第一次接入支付寶支付,一開始還很起勁的參照一個庫去進行封裝,然后發(fā)現(xiàn)好像多此一舉,并且還不成功,和后臺捯飭了好久然后看Demo才弄出來。
參考: 支付寶支付文檔
總結(jié)
以上是生活随笔為你收集整理的在你的 Android App 里接入支付宝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: except的实践经验
- 下一篇: Maven仓库添加自定义jar包