参考链接:http://blog.csdn.net/xinluqishi123/article/details/52234002

微信支付第一次成功,其它支付不成功,可能的原因有:

1:订单号重复,这个重新生成一个订单号就可以了。

2:项目包名不对(包名必须与微信开发者平台上的一致,详情见参考链接)。

3:APP的应用签名不对,这个着重讲一下哈(在这里我被坑了一个大跟头,请大家尽量避免)。

事情原委:

我的Android APP有两个版本:第一版,第二版(第二版在第一版的基础上改了一些功能和配置)。

开始做第一版的时候出于懒惰,就直接把以前的APP包的签名填写在了微信开放平台-- 对应的应用下面,也就是应用的包名是正确的,而签名不正确,如下图

(为了个人隐私,涂掉了一些字母)

这样的做的结果就是:你的APP调用微信支付,第一次是可以支付成功的(参考帖子里说可能支付不成功,实际上第一次支付是成功的),然后再调用微信支付就不行了。删除原来的微信,重新下载一个微信,然后调起支付,也是第一次成功,然后再也无法调起了(如果你的微信预付单是OK的,而且返回的预付单结果也是SUCCESSS。但是就是无法调起微信,那原因就是这个该死的签名有问题)。后来看了这个参考帖子,恍然间大了个悟,修改了微信开放平台Android端应用签名。这下第一版就OK了,支付成功,万事大吉。

后来,悲剧开始了,我修改了eclipse的Android SDK 配置,修改了项目 .project文件里的 项目名(<projectDescription> <name>项目名***</name>),还修改了Androidmainfest.xm里mainActivity的启动方式。理论上都不影响微信支付功能,但是第二版运行后却无法调起微信支付了!我了个去!百思不得其解的我把代码恢复到了以前的版本,可还是无法调用成功。我删除了微信,然后重新下载了一下,然后支付,发现还是只有第一次可以调用。

那么是不是签名不对哪?我手机下载并运行了一下第一版的apk文件,发现第一版的apk支付完全没问题,只有第二版的apk支付不成功。

是不是签名生成的不对?可是第一版调用支付是没问题的,第二版app的包名和第一版是一样的。死马当活马医,我重新用微信的签名生成工具生成了一下app的签名,戏剧性的一幕出现了,第二版的签名和第一版是不一样的!这也太TM操蛋了!

如图:

安装了第一版APK后,用微信签名生成工具生成的签名是:cbf******028(这是一个MD5加密的字符串):

安装了第二版APK后,用微信签名生成工具生成的签名是938******b22:

(吐槽一下,微信早期的签名生成工具就是一坨shit,这一长串字符无法复制,需要手敲)

那么,是不是签名生成工具版本太老了呢?

好吧,我下载了最新版的签名工具重新操作了一遍

安装了第一版APK后,用微信签名生成工具生成的签名还是:cbf******028:

安装了第二版APK后,用微信签名生成工具生成的签名还是938******b22:

(最新版的终于有拷贝字符串的功能了)

通过上图,大家可以发现,一样的APP包名 的确会生成不同的 应用签名。也就是讲,如果要生成唯一的签名,微信除了判断包名(一般应用的包名是唯一的)之外,还对应用的其它设置进行了判断。

那么到底还判断了什么呢?

看其官网的提示:

很显然,除了应用的包名之外,微信还通过编译的keystore生成该MD5签名字符串。

但是,我的APP在生成APK文件时并没有设置keystore,也就是讲,第一版第二版的.apk文件都是使用相同的默认设置,无论默认设置有木有使用keystore,由于配置的环境相同,APP应用包名也相同,所以其签名也应该是一致的。(关于keystore的生成和支付的关系,可以参考:http://www.xadamai.com/APPzixun/211.html)

Android 手机目录里面的文件或者文件名是唯一的,那么第一版第二版app的包名真的是一致的吗?

我们看一下这个应用包名:

第一版APP 输出的的包名为:com.example.hpappchange-1

on path: DexPathList[[zip file "/mnt/asec/com.example.hpappchange-1/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/com.example.hpappchange-2/lib, /vendor/lib, /system/lib, /data/datalib]]

第二版APP 输出的的包名为:com.example.hpappchange-2

on path: DexPathList[[zip file "/mnt/asec/com.example.hpappchange-2/pkg.apk"],nativeLibraryDirectories=[/mnt/asec/com.example.hpappchange-2/lib, /vendor/lib, /system/lib, /data/datalib]]

*显然包名不一致,为什么呢?

一般这种问题可能是资源路径不对,或者R文件没有更新。总之就是一些不容易发现的各种小问题。与其去找这些无聊 的问题,不如重新做一个,或者点击Eclipse最上方菜单的 project > clean试一下。我们先不纠结这个。
*由上边截图可以看到,微信的签名生成工具对同一包名的应用生成的签名是不一致的,造成不一致的原因可能就是

引起第一版文件包名(com.example.hpappchange-1)和第二版的文件包名(com.example.hpappchange-2)不一致的原因。为什么会签名不一致呢?

还有一个可能原因就是:打包的apk的签名是由jarsigner和keytool生成的,然而通过adb install安装的apk文件则会自动签上debug权限,两种的RSA散列不同所以会出现这样的问题。之所以说可能是因为我的第一版第二版APP都是安装的apk包,不存在安装途径不同导致加密不同的问题。当然我希望是我的设置有问题,不然的话,使用微信的签名工具造成的困扰就太大了。

(注:APK签名步骤分为两步,首先通过keytool生成用来签名的 xxx.keystore,再用jarsigner签名apk文件)

(RSA散列是一种加密方式,或称为RSA公钥加密算法,与DES(被AES取代了) ,AES等   都是一些主流的加密方式)

(参考链接:

http://www.tttabc.com/android/keytool-keystore-jarsigner-apk.htm

http://hhuleaves.iteye.com/blog/1387721

http://www.cnblogs.com/linn/p/3784363.html)

4:eclipse 缺少对应的  Android SDK版本(这个原因很小)

例如: <uses-sdk
        android:minSdkVersion="8"              这是支持的最小版本

android:targetSdkVersion="16" />    需要修改targetSdkVersion 为支持的版本

由于本人同时在搞ios开发,所以没时间对这个问题刨根问底,希望小伙伴们尽量避免,如有了解详情者,请留言告知,不胜感激!!!

微信支付 第一次成功,其他无法调起,返回-1(Android eclipse 微信支付之大坑 签名工具问题)相关推荐

  1. 使用百度地图定位功能第一次成功,第二次开始返回505错误码

    使用百度地图定位功能第一次成功,第二次开始返回505错误码 505错误码的意思是AK错误,申请AK的时候要严格按照官网的教程 http://lbsyun.baidu.com/index.php?tit ...

  2. android右滑返回动画,Android仿微信右滑返回功能的实例代码

    先上效果图,如下: 先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,并且手指按下的位置是在屏幕的最左边(这个也是有一定范围的),  这些可以实现onTouchEvent来实现. ...

  3. Android APP微信支付开发的步骤

    1.我们看官方文档的步骤 APP端开发步骤: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 在微信开放平台(https: ...

  4. Android App接入支付功能

    微信支付,请参考我另一篇:Android App接入支付功能--微信篇 因为项目中用到支付功能,而且支付宝文档和微信文档写的很简洁,不仔细研究,真的无法集成成功 老样子,上效果图由于涉及到输入密码,我 ...

  5. android手机数字取证,基于Android智能终端微信应用的数字取证分析模型的研究

    第 42卷 第 10A期 2015年 10月 计 算 机 科 学 Computer Science Vo1.42 No.10A Oct 2015 基于 Android智能终端微信应用的数字取证分析模型 ...

  6. 监听在微信中打开页面时的自带返回按钮事件

    为什么80%的码农都做不了架构师?>>>    这里所说的返回按钮是 iOS 端 微信打开页面,左上角的返回按钮 Android 端 微信打开页面,手机底部的实体返回按钮 事件处理代 ...

  7. 微信扫码 android sdk,H5中js-sdk扫码功能,Android手机微信中无法调用扫码?

    我的H5对接微信JS-SDK中的扫码功能,发现在Android手机微信中无法调用扫码功能,在苹果手机微信中可以使用. 报如下错误: errMsg:scanQRCode:permissi on deni ...

  8. 微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅

    本文由微信开发团队工程是由"oneliang"原创发表于WeMobileDev公众号,内容稍有改动. 1.引言 Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBr ...

  9. 微信支付不成功的几个原因

      版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持! 转载请注明出处:http://teachcourse.cn/1603.html 一.微信支付不成功的原因 调试微信支 ...

  10. 微信jsapi支付,跳转到微信支付成功结果页,没有返回商家按钮

    一开始是这样的 在确保参数,比如回调地址有传给微信的情况下,如果没有显示,那么需要开通微信的点金计划,同时因为我连的是第三方的,比如首信易,还需要微信公众号js接口安全域名的MP_verify_*.t ...

最新文章

  1. 自然语言处理(NLP)之pyltp的介绍与使用(中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注)
  2. 编译libav(ffmpeg)库
  3. 不重复的随机数JAVA、C#·适合初级人员玩耍。
  4. COCI CONTEST #3 29.11.2014 KAMIONI
  5. 从独角兽到上市:我们与TAPD的故事
  6. Python 测试开发教程
  7. java长连接socket【转】http://jiewo.iteye.com/blog/1562168
  8. JVM hotspot虚拟机对象探秘
  9. webpake-node-sass 报错
  10. 互联网(IT)大厂面试技巧(面经)
  11. 自然语言生成任务,如文本摘要和图像标题的生成。seq2seq的模型原理
  12. 如何用python写个人专属群聊提醒小助手?
  13. 如何修改博客园里个人首页背景(form:cot 大犇)
  14. 程序员必须掌握的 12 个 JavaScript 技能!
  15. Identify ksusetxn DID:An Deadlock ID
  16. android volley post 参数,带有标题和正文的Android Volley POST请求
  17. 如何让自己的email地址永久有效
  18. 推荐三个不错的开源项目
  19. CWE ID 259:Use of Hard-coded Password
  20. u8转完看不到菜单_用友U8软件菜单和导航有功能不能正常显示,如何解决?

热门文章

  1. 三数之和,去除重复。
  2. VC++6.0环境下调试c语言代码的方法和步骤_附图
  3. msys2编译器的配置
  4. SDRAM学习笔记(二)
  5. 判断目标主机和自己是否是一个子网的方法
  6. Java代码:调用外部接口(使用Json格式传递参数)的方法
  7. Java 8 中的这个接口真好用!炸了!
  8. Kafka架构及基本原理简析
  9. 你还在用HTTP吗?HTTP/3都来了。。。
  10. 一个 Java 方法,最多能定义多少参数?