Android 3分鐘整合支付寶支付
阿新 • • 發佈:2019-02-04
一.話不多說,直接上步驟。
image.png2.在app的.gradle檔案中引入此jar包
//支付寶支付
compile files('libs/alipaySdk-20170922.jar')
3.清單檔案 即AndroidManifest.xml檔案中宣告支付所需的activity
<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>
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
4.許可權宣告。
A.普通許可權:
<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" />
B.高危許可權:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
5.資源匯入完成,開始支付流程。主要分為三部曲。
a.向伺服器傳送請求,伺服器返回訂單資訊
b.呼叫支付寶非同步請求發起支付
c.處理回撥結果
其中,b支付寶的非同步請求程式碼如下:
Runnable payRunnable = new Runnable() {//要在子執行緒
@Override
public void run() {
PayTask alipay = new PayTask(ShoppingActivity.this);
Map<String, String> result = alipay.payV2
(t.getPaySdk(), true);//這裡的t.getPaySdk() 即為支付資訊, 伺服器返回的一個String型別的欄位
Message msg = new Message();
msg.what = SDK_PAY_FLAG; //SDK_PAY_FLAG此為靜態常量,在Activity中宣告即可。
//private static final int SDK_PAY_FLAG = 1;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunnable);
payThread.start();
其中,c 處理回撥結果程式碼如下,:
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG: {
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
/**
對於支付結果,請商戶依賴服務端的非同步通知結果。同步通知結果,僅作為支付結束的通知。
*/
String resultInfo = payResult.getResult();// 同步返回需要驗證的資訊
String resultStatus = payResult.getResultStatus();
// 判斷resultStatus 為9000則代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
// 該筆訂單是否真實支付成功,需要依賴服務端的非同步通知。
Toast.makeText(ShoppingActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
ClimbTo(PaySuccessActivity.class);
} else {
// 該筆訂單真實的支付結果,需要依賴服務端的非同步通知。
Toast.makeText(ShoppingActivity.this, "支付失敗", Toast.LENGTH_SHORT).show();
}
break;
}
default:
break;
}
}
};
6.支付完成,需要做混淆的小夥伴可在混淆檔案中加入如下程式碼:
-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 *;}
-keep class com.alipay.sdk.app.H5PayCallback {
<fields>;
<methods>;
}
-keep class com.alipay.android.phone.mrpc.core.** { *; }
-keep class com.alipay.apmobilesecuritysdk.** { *; }
-keep class com.alipay.mobile.framework.service.annotation.** { *; }
-keep class com.alipay.mobilesecuritysdk.face.** { *; }
-keep class com.alipay.tscenter.biz.rpc.** { *; }
-keep class org.json.alipay.** { *; }
-keep class com.alipay.tscenter.** { *; }
-keep class com.ta.utdid2.** { *;}
-keep class com.ut.device.** { *;}
三.隨手分享,喜歡的朋友可以關注本簡書號MiHomes,後續會有更多更好的部落格推送給您。
另:歡迎指出不足,會進行更正
同步更新至簡書 : https://www.jianshu.com/p/4dce4b060385