微信支付仅能成功调用一次问题的解决方法(Android)

 更新时间:2016年08月18日 08:55:08   转载 作者:xinluqishi  
这篇文章主要介绍了微信支付仅能成功调用一次问题的解决方法,感兴趣的小伙伴们可以参考一下

本人使用Android开发有一段时间了,但是本身没有系统学,而且多年专注服务端开发,总觉得因为项目需要接触Android移动端开发只是暂时的,所以没有太上心,结果碰到一个大难题折腾了一天,最后被有经验的小伙伴提示了一下才迎刃而解,感觉无地自容的同时,又非常窃喜,毕竟跨过一个一个的坎,就成长了,在这里丢人等换个地方就成牛了也未可知,哈哈。闲言就絮叨到这里,赶紧分享: 

微信支付调用接口整体的流程有必要简述一下(目前网上的资料大部分都是适配微信支付旧版的代码,最新的微信支付官方文档中并没有服务端的Demo,而且一些接口都变了,参数名称也有变化,希望小伙伴们能够注意):
 1. 微信支付不需要访问获取Token那个接口了;
 2. 直接访问https://api.mch.weixin.qq.com/pay/unifiedorder 获得Prepayid,参数以 xml格式传输就可以;
 3. 有了Prepayid再加上一些其他的官网中提到的参数就可以调起客户端的微信支付接口了; 

此时就出现问题了:第一次调用非常OK,看到了微信支付界面,有自己生成的订单号还有金额,但是放弃支付后再进入,就连微信客户端都调用不起来了,换个订单也是这样,换个手机也是第一单可以调用微信客户端,展示订单号,金额,但是第二单说什么也不行了,定格在自己APP的支付界面,不报错,任何反应也没有。 

原因就出现在这里: 我们申请微信支付的时候,有个地方会让你填写你的应用Key: 

申请以后你看到的就是图片上的应用签名,这个签名是如何生成的在这里有介绍: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
问题是这个Key的生成是跟正式发布时打包做签名有关的,我们把Android应用公开release的时候会将这个Key加进去作为应用的key防止被恶意覆盖等等,我们在申请注册微信应用的时候必然要提供正式生成的这个应用的Key给微信官网。 

因此这件事就被忽略了,以至于在开发的过程中,我们在自己的本地运行打包,访问微信服务器调起支付的时候,微信第一次拿到了我们的应用发来的请求,仿佛建立了连接开始了心跳, 

这时微信会异步地根据留存的应用包名和应用Key与你现在发送的包名和应用Key进行验证,我相信即使你第一次进行付款,也是很有可能不成功的,但是这块我就没有验证了,因为这个时候已经有验证结果回调回来了。 

所以跟运维人员拿了Release时把Key打到APK安装包里的命令,进行包含正式Key的打包,命令如下: 

 ``` cordova build --release android
 
 jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA1 -keystore E:\android-release-key.keystore E:\项目名称\platforms\android\build\outputs\apk\android-release-unsigned.apk android-release-key.keystore

 //运行完这条命令需要输入密码
 
 zipalign -v 4 E:\项目名称\platforms\android\build\outputs\apk\android-release-unsigned.apk a.apk
 
 ```

问题就解决了。每次访问都能顺利地调用微信支付了。 不得不感慨下,微信用这一手也严格控制了在他那里注册的应用,注册一个Key用一个,再想用,那么重新走流程吧。

本文已被整理到了《Android微信支付教程汇总》,欢迎大家学习阅读。

更多精彩内容点击《Android微信开发教程汇总》,《java微信开发教程汇总》欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Kotlin开发的一些实用小技巧总结

    Kotlin开发的一些实用小技巧总结

    Kotlin 是一个基于 JVM 的新编程语言,用 JetBrains 的话来说是「更现代化、更强大,所以下面这篇文章主要给大家总结介绍了关于Kotlin的一些开发实用小技巧,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • Android编程实现Listview点击展开和隐藏的方法

    Android编程实现Listview点击展开和隐藏的方法

    这篇文章主要介绍了Android编程实现Listview点击展开和隐藏的方法,涉及Android中Listview的响应点击与样式变换相关操作技巧,需要的朋友可以参考下
    2015-12-12
  • Android实现炫酷播放效果

    Android实现炫酷播放效果

    这篇文章主要为大家详细介绍了Android实现炫酷播放效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android  TimerTask 的简单应用及注意事项

    Android TimerTask 的简单应用及注意事项

    这篇文章主要介绍了Android TimerTask 的简单应用及注意事项的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android 简单的图片查看器源码实现

    Android 简单的图片查看器源码实现

    本篇文章主要介绍了Android 简单的图片查看器源码实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 一看就懂的Android APP开发入门教程

    一看就懂的Android APP开发入门教程

    这篇文章主要介绍了Android APP开发入门教程,从SDK下载、开发环境搭建、代码编写、APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下
    2014-05-05
  • Android中获取状态栏高度的两种方法分享

    Android中获取状态栏高度的两种方法分享

    在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度。为以后方便,在此做个简单记录。下面这篇文章主要介绍了Android中获取状态栏高度的两种方法,两种方法分别给出了示例代码,有需要的朋友可以参考借鉴。
    2017-02-02
  • Android获取应用程序名称(ApplicationName)示例

    Android获取应用程序名称(ApplicationName)示例

    本文以实例方式为大家介绍下获取应用程序名称(ApplicationName)的具体实现,感兴趣的各位可以参考下哈
    2013-06-06
  • Android 8.0 读取内部和外部存储以及外置SDcard的方法

    Android 8.0 读取内部和外部存储以及外置SDcard的方法

    今天小编就为大家分享一篇Android 8.0 读取内部和外部存储以及外置SDcard的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Android中volley封装实践记录

    Android中volley封装实践记录

    这篇文章主要给大家介绍了关于Android中volley封装实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一学习学习吧
    2019-02-02

最新评论