微信支付仅能成功调用一次问题的解决方法(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微信开发教程汇总》欢迎大家学习阅读。

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

相关文章

  • Android 个人理财工具六:显示账单明细 下

    Android 个人理财工具六:显示账单明细 下

    本文主要节诶是Android 个人理财工具显示账单明细,主要实现此窗口的查询和删除功能,这里提供实现代码,有兴趣的小伙伴可以参考下
    2016-08-08
  • Android自定义RecyclerView实现不固定刻度的刻度尺

    Android自定义RecyclerView实现不固定刻度的刻度尺

    这篇文章主要为大家详细介绍了Android自定义RecyclerView实现不固定刻度的刻度尺,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法

    解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法

    本篇文章对android中隐藏与显示软键盘以及不自动弹出键盘的方法进行了分析介绍。需要的朋友参考下
    2013-05-05
  • android实现查询公交车还有几站的功能

    android实现查询公交车还有几站的功能

    这篇文章主要为大家详细介绍了android实现查询公交车还有几站的功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Android中Intent传递对象的3种方式详解

    Android中Intent传递对象的3种方式详解

    这篇文章给大家介绍了Android中Intent传递对象的3种方式,分别是Serializable 方式、Parcelable 方式以及JSON 方式,有需要的朋友们可以一起参考借鉴,下面来一起看看吧。
    2016-09-09
  • Android实现NFC读取校园卡

    Android实现NFC读取校园卡

    这篇文章主要为大家详细介绍了Android实现NFC读取校园卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Android的Service应用程序组件基本编写方法

    Android的Service应用程序组件基本编写方法

    Service是一个android 系统中的应用程序组件,它跟Activity的级别差不多,但是他没有图形化界面,不能自己运行,只能后台运行,Service通常用来处理一些耗时比较长的操作
    2012-12-12
  • Android多返回栈技术

    Android多返回栈技术

    本文将详情讲解用户通过系统返回按钮导航回去的一组页面,在开发中被称为返回栈 (back stack)。多返回栈即一堆 "返回栈",对多返回栈的支持是在 Navigation 2.4.0-alpha01 和 Fragment 1.4.0-alpha01 中开始的,有兴趣的话一起参与学习
    2021-08-08
  • Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86区别)

    Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86区别)

    默认情况下,Android和Flutter打包出来的Apk都是包含了所有架构的,这样打出来的apk体积相对于单架构的apk有点大,这时,我们就需要分别打出不同的架构包
    2023-08-08
  • Android Studio模拟器运行apk文件

    Android Studio模拟器运行apk文件

    这篇文章主要介绍了Android Studio模拟器运行apk文件,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下
    2022-09-09

最新评论