集成步驟
Java 項目配置
dependencies { compile 'com.cuieney:rxpay-api:2.2.3' annotationProcessor 'com.cuieney:rxpay-compiler:2.1.1' //如果你項目配置了kotlin請忽略下面這行的配置 //否則會報錯 Failed resolution of: Lkotlin/jvm/internal/Intrinsics compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" }
添加權限
<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" />
支付寶
清單文件注冊支付寶相關 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 android:name="com.alipay.sdk.app.H5AuthActivity" android:configChanges="orientation|keyboardHidden|navigation" android:exported="false" android:screenOrientation="behind" android:windowSoftInputMode="adjustResize|stateHidden"/>
發起支付寶支付
new RxPay(this) .requestAlipay("服務器產生的訂單信息") .subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean aBoolean) throws Exception { payState.setText("阿里支付狀態:"+aBoolean); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { payState.setText("阿里支付狀態:"+throwable.getMessage()); } });
微信
在 Application 類中添加支付節點
@WX(packageName = "微信支付注冊keystore時候的包名") public class XXActivity extends Activity { }
在AndroidManifest添加你微信支付的appid 和PARTNER_ID商戶號(固定不變的),apiKey(商戶平台設置的密鑰key獲取方法,可以問后台要可以到微信商戶平台(pay.weixin.qq.com)-->賬戶設置-->API安全-->密鑰設置)
<!-- WX_APPID必填項 --> <meta-data android:name="WX_APPID" android:value="xxxxx" /> <!-- 非必填項,此處填寫后,請求json的partnerId字段就可以不填 --> <meta-data android:name="PARTNER_ID" android:value="xxxx" /> <!-- 非必填項,此處填寫后,請求json的sign字段就可以不填(即App端簽名) --> <meta-data android:name="API_KEY" android:value="xxxxx" />
在清單文件中注冊微信相關的Activity,添加完之后會報錯,使用 ReBuild 或者重新運行就不會了,這個 Activity 會被自動生成
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan" />
發起微信支付
new RxPay(this) .requestWXpay(("服務器生成訂單的后拼接成下面這種json字符串")) .subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean aBoolean) throws Exception { payState.setText("微信支付狀態:"+aBoolean); } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { payState.setText("微信支付狀態:"+throwable.getMessage()); } });
對應的json格式參考
1.格式一(Manifest三個參數全設置了) { "prepayId": "必填項", } 2.格式二(Manifest設置了PARTNER_ID 沒有設置API_KEY) { "nonceStr": "必填項", "partnerId": "必填項", "packageValue": "必填項", "prepayId": "必填項", "sign": "必填項", "timeStamp": "必填項" }
混淆規則
-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.** { *;} -dontwarn com.alipay.**
其他問題
-
對於調起微信支付的json的字段請參考以上的json
-
以下的過度版本可以解決依賴包沖突問題
-
com.cuieney:rxpay-api:2.1.11 版本 阿里jar包 微信依賴 都已剔除
-
com.cuieney:rxpay-api:2.1.12 版本只剔除 阿里jar包
-
com.cuieney:rxpay-api:2.2.2 版本只剔除 微信依賴
-
-
如果項目中還有Rxjava版本1的話為了防止代碼沖突 請在build.gradle里面添加一下代碼
packagingOptions { exclude 'META-INF/rxjava.properties' }