问题一:ClientSDK 调起支付的方法参数解释
//参数一:Activity 当前调起支付的Activity //参数二:data 获取到的 Charge/Order/Recharge 的 JSON 字符串 Pingpp.createPayment(YourActivity.this, data);
问题二:与其他第三方 SDK 有冲突
存在相同的jar包
没有加过滤混淆的代码,导致包名被混淆成a/b/c
问题三: 微信支付失败,返回 wx_err_code:-1
参考:https://help.pingxx.com/article/123345
问题四: 启动项目,编译时报以下错误
Error:Execution failed for task ':lib:pingpp:transformNativeLibsWithStripDebugSymbolForRelease'
解决方法:
gradle 更新到 3.3、Android Studio 更新到 2.3 的 将 compileSdkVersion 提高到23 及以上即可。可能在 gradle3.3 下不支持 compileSdkVersion 为 23 以下进行 NDK 编译
统一 so 文件的版本
问题五: 集成微信支付需要有一个 WxPayEntryActivity,这个类在哪里?我在Demo中没找到这个类?
这个类已经封装在SDK内部,无需开发者另外实现
问题六:调用 libpingpp.so 文件出错( unable to get realpath for the library "/data/app/com.xxx.xxx/lib/arm/libpingpp.so")Log 如下:
JNI DETECTED ERROR IN APPLICATION: java_class == nullin call to GetStaticMethodID from byte[] com.pingplusplus.android.crypto.Crypt.encryptData(java.lang.String, java.lang.String)
答: 没有导入 libpingpp.so 文件. 将 pingpp 下 libs 目录下的 libpingpp.so 文件拷贝到项目相应目录下。
问题七:调用 sdk 的时候 Pingpp.createPayment(arg0, arg1);报错com.pingplusplus.android.PaymentActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0
答: 将 pingpp 的 res 目录下的资源文件拷贝到项目中。
问题八:调用微信支付, App 崩溃, Log 为:android.content.ActivityNotFoundException: Unable to find explicit activity class {xxx.xxx.wxapi.WXPayEntryActivity};
答:1.检查在清单文件(AndroidManifest.xml)中是否注册了 xxx.xxx.wxapi.WXPayEntryActivity 的 Activity. 如下设置
<activity-alias android:name="xxx.xxx.wxapi.WXPayEntryActivity" android:exported="true" android:targetActivity="com.pingplusplus.android.PaymentActivity"/>
2.若已经在清单文件中注册了该 Activity. 则检查工程路径和包名是否一致或者将 .wxapi.WXPayEntryActivity 路径补全为: 包名.wxapi.WXPayEntryActivity
问题九:Ping++ 和其他第三方SDK(如:高德地图、讯飞)同时存在,使用gradle导入Ping++, 会导致其他第三方SDK(如:高德地图、讯飞)找不到so而无法使用
报错原因: Ping++ SDK 提供了armeabi、armeabi-v7a 而其他第三方SDK(如:高德地图)提供了armeabi, 当手机是armeabi-v7a的 会去加载armeabi-v7a包下的so文件 这是会报其他第三方SDK(如:高德地图)的so文件找不到 而你上面的代码在打包的时候就只打包了armeabi 所以只会去armeabi包下找 因此不会出现报错 建议使用各种SDK时保持相同的so文件。
解决方案: 在build.gradle中设置ndk
ndk { //选择要添加的对应cpu类型的.so库。选择的so文件需要各种SDK保持一致 abiFilters 'armeabi', 'x86' // 还可以添加 'x86_64', 'mips', 'mips64',, 'armeabi-v7a', 'armeabi-v8a'}
问题十:Android 5.0以上可支付,4.4以下找不到类的问题(即:multidex 的问题)。
答:方法数超过65535 在 Android 5.0以上自动会处理分包机制, 但在4.4及以下需要手动设置 使用 multidex 来解决该问题. 在build.gradle中导入compile 'com.android.support:multidex:1.0.0' 在Application中初始化MultiDex.install(this);
问题十一:Android 调起支付渠道,崩溃且没有具体的Log信息.
答:检查一下是否添加了混淆配置,将混淆过滤配置自己项目中
# Ping++ 混淆过滤 -dontwarn com.pingplusplus.** -keep class com.pingplusplus.** {*;} # 支付宝混淆过滤 -dontwarn com.alipay.** -keep class com.alipay.** {*;} # 微信或QQ钱包混淆过滤 -dontwarn com.tencent.** -keep class com.tencent.** {*;} # 银联支付混淆过滤 -dontwarn com.unionpay.** -keep class com.unionpay.** {*;} # 招行一网通混淆过滤 -keepclasseswithmembers class cmb.pb.util.CMBKeyboardFunc { public <init>(android.app.Activity); public boolean HandleUrlCall(android.webkit.WebView,java.lang.String); public void callKeyBoardActivity(); } # 百付宝混淆过滤 -dontwarn com.baidu.** -keep class com.baidu.** {*;} # 内部WebView混淆过滤 -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
问题十二:微信支付成功返回 App 的时候闪退
答:WxPayEntryActivity 这个类已在 SDK 内部实现,开发者不需要额外实现该类,将自己写的类删除即可。
问题十三:银联报错
java.lang.ClassNotFoundException: org.simalliance.openmobileapi.SEService或 can’t find reference class org.openmobileapi.SEService
报错原因: 缺少org.simalliance.openmobileapi.SEService,编译失败
解决方案: 将example-studio中libs下的org.simalliance.openmobileapi.jar拷到项目中依赖,但不要打包进apk中,有些手机会存在这个jar包
dependencies { provided files('libs/org.simalliance.openmobileapi.jar') //使用provided,不打包进apk }
问题十四:招行一网通键盘奔溃或弹不出键盘
报错原因: 没有在string.xml中配置cmbkb_publickey字段
解决方案: 在自己项目中res/values/string.xml下配置该字段
<string name="cmbkb_publickey">填写自己的publickey</string>