十一月項目小結( Alipay集成)

Alipay集成

  1. 下載Alipay的SDK
    SDK下載地址
  2. 導入資源
    將AlipaySdk******.jar包放入應用工程libs目錄
    在這裏插入圖片描述
  3. 添加依賴

compile files(‘libs/alipaySdk-20170725.jar’)

  1. 配置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" >
  1. 權限聲明
	<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" />
  1. 設置混淆規則
    在商戶應用工程的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.** { *;}
  1. 設置運行環境
    沙箱測試環境
    在super.onCreate(savedInstanceState)方法調用前調用EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX)
    生產環境
    去掉EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX)

  2. 獲取簽名
    該步驟是最核心的點,最關鍵的點。生產環境中爲保證安全性,簽名由後端生成,前端僅需向後端發起獲取簽名請求,隨後使用簽名向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);
    }
  1. 調用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();
  1. 測試一:申請Alipay的沙箱測試賬號,下載沙箱版支付寶,註冊成爲開發者詳情鏈接
  2. 測試二:如何在沒有後端提供簽名的情況下進行測試,Alipay已經爲我們想好了轉載自博主:Owen_le
  3. 詳細流程鏈接
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章