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

本人使用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微信开发教程汇总》欢迎大家学习阅读。

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

时间: 2024-11-01 11:55:01

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

C# ASP.NET Webservice调用外部exe无效的解决方法

原文:C# ASP.NET Webservice调用外部exe无效的解决方法 最近用asp.net做webservice,其中有个功能是调用执行外部的exe(类似cmd中执行),但执行Process.Start之后就没有结果,同样代码在winform下正常,折腾两天终于找到解决方法 本文参考了以下网页,十分感谢 http://bbs.csdn.net/topics/300053869 http://blog.163.com/qiaoweipeng@126/blog/static/15737970

同时调用prototype与jquery冲突解决方法

在开发应用中会经常碰到要同时调用prototype与jquery,但它们又会存在冲突,下面我们来看关于冲突解决方法 方法如下: 1.将jquery.js放到prototype.js后面(这个是必须的否则无论如何还是要罢工地). 2.在jquery.js后面将$变量重命名. 代码 <script type="text/网页特效" type="text/javascript" src="window.js"></script>

定时器(setTimeout/setInterval)调用带参函数失效解决方法_javascript技巧

首先来看下定时器的用法 1. setInterval(code,millisec[,"lang"]) setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. 参数 描述 code 必需,要调用的函数或要执行的代码串. millisec 必需,周期性执行或调用 code 之间的时间间隔,以毫秒计. 2.setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 参数 描述 code 必需,要调

Jquery调用webService远程访问出错的解决方法_jquery

如果想在远程可以正常调用,需要修改web.config,在system.web节下面加上下面一段话即可 复制代码 代码如下: <webServices > <protocols > <add name="HttpSoap"/> <add name="HttpPost"/> <add name="HttpGet"/> <add name="Documentation&quo

iphone微信更新6.3.16后闪退怎么办?微信6.3.16打不开用不了解决方法

出现闪退我们可以还原旧版本了当然苹果手机可能就不行了,我们可以尝试一下按下面的方法来排除吧. 微信更新6.3.16后闪退怎么办 1.闪退打不开等可能是软件本身的bug,建议您重新启动手机,下载软件,更新到最新版本尝试一下. 2.你微信的的缓存太多啦!尝试去释放一下内存,然后再打开微信!相信你的问题一定能解决的! 好了出现此问题可能就是网络,内存或版本兼容或官方软件问题问题了,对于这个问题我们只能从这几个方面来解决了

setTimeout()递归调用不加引号出错的解决方法_javascript技巧

用了setTimeout()想实现递归调用,如果第一个参数不加引号的话,火狐提示setTimeout():uselesssetTimeout call (missing quotes around argument?)如果加引号的话 ,火狐会提示那个函数undefined function refreshNum() { $.ajax({ type: "POST", url: "ajax/RefreshNum.ashx", async: false, data: {}

WEB上调用HttpWebRequest奇怪问题的解决方法_实用技巧

今天做了个在局域网的某客户端取得该局域网的公网IP的小程序,方法是通过登陆外网,让外网告诉你所在局域网的公网IP是多少,方法如下: 复制代码 代码如下: Uri uri = new Uri("http://www.jb51.net/");  HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);  req.Method = "POST";  req.ContentType = "applic

linux中sendmail发送邮件成功但收不到邮件解决方法

直接用yum安装,命令:yum install sendmail,安装好了,就开始启动,命令 :/etc/init.d/sendmail start ,显示启动完成,然后开始测试发邮件,$rs=mail('dalong0309@163.com','这个是主题',' 这个是内容');var_dump($rs);,输出结果是true,可查看邮件,却发现没收到任何邮件.一开始怀疑是php配置那里没 设置好对应的sendmail路径,改好php.ini配置后,却发现还是收不到邮件.检查了sendmail

微信支付H5调用支付详解(java版)_java

最近项目需要微信支付,然后看了下微信公众号支付,,虽然不难,但是细节还是需要注意的,用了大半天时间写了个demo,并且完整的测试了一下支付流程,下面分享一下微信公众号支付的经验. 一.配置公众号微信支付  需要我们配置微信公众号支付地址和测试白名单. 比如:支付JS页面的地址为 http://www.xxx.com/shop/pay/ 那此处配置www.xxx.com/shop/pay/ 二.开发流程 借用微信公众号支付api(地址 http://pay.weixin.qq.com/wiki/d