微信支付Demo踩坑记

有些事要自己经历,才知道有多坑!
习惯了as开发后,突然接收eclipse项目就懵逼了!例如将腾讯微信支付的demo跑起来就遇到天大的坑。
事情的起因:就是将ecplise的微信支付转到as上面去

坑一:报错::Error:Execution failed for task ‘:app:mergeDebugResources’.Error: Some file crunching failed, see logs for details

解决:
eclipse有损坏的.9.PDG图片,添加下面的后,在as编译时候忽略检查

aaptOptions{
    cruncherEnabled = false
    useNewCruncher = false
}

或者在图片库中寻找不是png格式的图片,一般都是jpg格式的修改过来就可以了

坑二:
报错程序包:“com.tencent.mm.apk.openapi”,及com.tencent.mm.sdk.constants.ConstantsAPI各种不存在,

解决:
本身的demo是eclipse版本,导入的jar都在1.0.2等低版本 ,不支持在as上gradle中构建编译,需删掉当前引用的jar,重新引入compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’后编译,将以前的import删掉,手动导入变成com.tencent.mm.opensdk.constants.ConstantsAPI即可

坑三
一直调不起微信支付的界面

解决:原来是微信支付的网络请求是用httpClient来写的,而自己的build.gradle里面的targetSdkVersion的版本为22(即只向前兼容到api为22)高于httpClient所使用生效的版本(api=10),在android4.0以后就不支持httpclient了,自己的手机是4.4.2的!所有修改targetSdkVersion版本为4就好
原理:三个属性中最难懂的就是这个了targetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。

具体点就是随着 Android 系统的升级,某个系统的 API 或者模块的行为可能会发生改变,但是为了保证老 APK 的行为还是和以前兼容。只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性。

举个栗子
在 Android 4.4 (API 19)以后,AlarmManager 的 set() 和 setRepeat() 这两个 API 的行为发生了变化。在 Android 4.4 以前,这两个 API 设置的都是精确的时间,系统能保证在 API 设置的时间点上唤醒 Alarm。因为省电原因 Android 4.4 这两个 API 设置的唤醒时间,系统都对待成不精确的时间,系统只能保证在你设置的时间点之后某个时间唤醒。

这时,虽然 API 没有任何变化,但是实际上 API 的行为却发生了变化,如果老的 APK 中使用了此 API,并且在应用中的行为非常依赖 AlarmManager 在精确的时间唤醒,例如闹钟应用。如果 Android 系统不能保证兼容,老的 APK 安装在新的系统上,就会出现问题。

Android 系统是怎么保证这种兼容性的呢?这时候 targetSdkVersion 就起作用了。APK 在调用系统 AlarmManager 的 set() 或者 setRepeat() 的时候,系统首先会查一下调用的 APK 的 targetSdkVersion 信息,如果小于 19,就还是按照老的行为,即精确设置唤醒时间,否者执行新的行为。

坑四:
所有的配置完成后,可以成功调起支付,但是只能调起一次!后面再调用会返回结果为-1!

解决:这种情况是正确的!是因为demo中url给的时一个固定的,不是动态变化,即生成的订单ID是唯一的!
支付的时候 商户唯一订单ID是唯一的,测试的时候请不断的更换订单ID参数支付

以上就是微信支付demo跑起来所遇到的问题,后续会更新怎么集成微信sdk。

你可能感兴趣的:(sdk)