Alipay集成
- 下載Alipay的SDK
SDK下載地址 - 導入資源
將AlipaySdk******.jar包放入應用工程libs目錄
- 添加依賴
compile files(‘libs/alipaySdk-20170725.jar’)
- 配置Manifest文件
<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" >
- 權限聲明
<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" />
- 設置混淆規則
在商戶應用工程的proguard-project.txt(proguard-rules.pro)裏添加以下相關規則:
-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.** { *;}
-
設置運行環境
沙箱測試環境:
在super.onCreate(savedInstanceState)方法調用前調用EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX)
生產環境:
去掉EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX) -
獲取簽名
該步驟是最核心的點,最關鍵的點。生產環境中爲保證安全性,簽名由後端生成,前端僅需向後端發起獲取簽名請求,隨後使用簽名向Alipay發起支付請求即可(即第九步),由於在本項目中僅承擔前端Alipay集成工作,在此不對後端生成簽名做具體介紹後端生成詳情
*Description:獲取簽名(該處沒什麼好解釋的,根據自己項目中進行網絡請求)
*/
private static void getSignature(final String url , final String body , final String TAG , final Handler handler , final Activity activity , final int msgWhat) {
ApiBuilder builder = new ApiBuilder()
//.Headers("cookie", UserStateInfoUtil.getSession(activity))
//.Body(RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), body))
.Url(url);
ApiClient.getInstance().doPost(builder, new CallBack<ConfirmPaymentBean>() {
@Override
public void onResponse(ConfirmPaymentBean confirmPaymentBean) {
if (confirmPaymentBean.isSuccess()) {
/**Description:後端准許支付*/
sendGetAlipayRequest(confirmPaymentBean.getData().getReturnedMessage(),activity,handler,msgWhat);
} else {
/**Description:後端拒絕支付*/
ToastUtil.show(activity,confirmPaymentBean.getMessage(), Toast.LENGTH_LONG);
}
}
@Override
public void onFail(String msg) {
/**Description:網絡請求失敗*/
ToastUtil.show(activity,"請檢查網絡連接", Toast.LENGTH_LONG);
Log.d(TAG, "onFail: " + msg);
}
}, ConfirmPaymentBean.class);
}
- 調用Alipay接口(必須在子線程中調用)
Runnable payRunable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(activity);
Map<String, String> result = alipay.payV2(signature, true);
Message msg = new Message();
msg.what =msgWhat;
msg.obj = result.get("resultStatus");
mHandler.sendMessage(msg);
}
};
Thread payThread = new Thread(payRunable);
payThread.start();
- 測試一:申請Alipay的沙箱測試賬號,下載沙箱版支付寶,註冊成爲開發者詳情鏈接
- 測試二:如何在沒有後端提供簽名的情況下進行測試,Alipay已經爲我們想好了轉載自博主:Owen_le
- 詳細流程鏈接