微信支付 for android 集成笔记( 集成遇到问题记录)

每当我集成一个第三方的东西的时候,我习惯把过程写下来,这样不管是留给后人还是以后自己再遇到的是都可以再翻翻看。

1.官方demo 下载下来,跑一一遍支付成功了,然后再重试,先获得token,通过,可是跳转的时候提示“返回-1”。你大爷我什么都没改好不好?

(另外,可见微信支付SDK一点也不智能,给我这个提示鬼知道是什么错误啊!)这个是keystore问题,替换下key,id改下keystore文件即可。

2.  五个重要参数:PARTNER_KEY,APP_SECRET,APP_KEY,APP_ID,PARTNER_ID。

只有一个APP_SECRET没有替换,然后获取token就出错了。提示:“获取assces_token出错,原因ERR_JSON”。我擦。仔细翻代码,发现APP_SRCRET错了!ok!把APP_SECRET替换掉之后通过。

3. 然后,妈蛋,token获取成功了,获取预付订单的时候,提示“获取prepayid失败,原因ERR_JSON”。

log如下:

doInBackground, content = {"errcode":77523001,"errmsg":"签名错误"}

-----好了,发现我走投无路了。

-----那么开始分析一下原因,这里提示是json错误!根据以前集成支付宝的时候的经验,可以推断如下原因:

a.key的不对,

b.包名不对,

c.我这里的订单号是之前用过的了,妈蛋微信是不可能让你个大傻X重复支付的。

d.是我RP不行!

4.仔细看下:发现订单号是随机生成的,排除d。

PayActivity.class

339行     "partner"  这里他们的demo竟然是写死的卧槽。草泥马。  改Constants.PARTNER_ID  好了。

5.然后运行通过上面的问题了。报错  冷尼玛 这个错误是什么吊东西 。什么都没有好吗? {"errcode":1001,"errmsg":""}

6。谷哥一下,发现  total_fee  这个我给改成0.01是不对的。好吧!根据我做支付宝的概念,1是1元,不是1分,而微信是的。

然后改回来之后发现跳转到支付页面了。

如图:

  

7.支付完成,想一下逻辑。妈蛋不对劲,按照支付宝的流程,支付完成应该有个回调的,来通知我已经支付完成了。

可是没有回调成功,我擦你大爷的。

百度上谷歌了一下,发现了这个贴了  http://fangjie.info/?p=393  。

微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:

你的包名(微信demo里是:net.sourceforge.simcpux)+.wxapi.WXPayEntryActivity.java

哎呀!我操!这就是鹅厂的作风。你妹。我辣油厂要干掉鹅厂!

回调不成功的问题就是需要加一个.wxapi.WXPayEntryActivity。

8.根据上面这个帖子我发现还是不能成功,添加如下代码到Mainfast里面就行了。

<activity
                android:name=".wxapi.WXPayEntryActivity"
                android:exported="true"
                android:launchMode="singleTop"
                android:configChanges="keyboardHidden|orientation"
                android:screenOrientation="portrait"
                android:theme="@style/TransparentActivity"
                ><!--设置为 singleTop 你懂得 -->
                </activity>

所以我需由于我不想写在同一个Activity中,所以我重新写了一个页面,但是我又不想给用户看到新开了一个页面。所以,我弄了一个半透明的style。@style/TransparentActivity

OK! 客户端流程走完了,那么接下来就是要为了做安全性设计,把一些重要的东西放到服务器生生成,这样是为防止客户端被反编译。

反编译之后,带来的就是别人拿到key 模拟支付过程,把某个订单号支付完成。那么,腾讯那边收到钱就会同时给客户端 和我们自己的服务器发送请求。那么,我们自己的服务器收到腾讯的通知之后,就会把这个订单的状态置为已经支付。

呵呵!说的蛮顺嘴的,你听懂了吗  ?就是因为订单信息在我们的服务器上,腾讯不知道订单的价格,他只管收钱就行了。也就是支付的时候100元的订单,修改价格为1元之后,也可以支付成功。问题就在这里。

官方的代码里面 是建议genPackage 这个方法在服务端生成。这里只是一个签名在服务端生成。

那么依据之前做支付宝的逻辑,签名和一堆body什么字段都在服务端生成吧!

所以我跟做服务器的说,这个方法genProductArgs()。也在服务端生成吧。这样我什么都不管。

PS: genProductArgs的时候,发现很多key,id都返回回来了仔细想想发现微信在保护的不过是PARTNER_KEY。

我这边支付都走通了之后,就是跟web人员交流一些东西在服务端生成的啦!因为安全性的问题,很多东西不得不在服务端生成。

接下来是服务端遇到的问题

1. 老是提示签名错误,和上面的代码一样的。

后来web开发人员,发现是他的文件编码还有字节流编码。官方的的里,有个UTF-8  大小写的问题。

2.后来还是出错,发现body里不能用特殊字符,“<_ ,”等字符都不行的 。

//PS:总结微信支付流程

1.启动异步线程GetPrepayIdTask,用httpGet方式,获得临时token。

2.把获得的token传给GetPrepayIdTask线程。

3.genProductArgs

服务器给我这么一堆代码

{

"dataMap": {

"appid": "wxd1d8a8d23dc5384784",

"noncestr": "69b4fa3be19bdf400df34e41b93636a4",

"package": "Sign=bank_type=WX&body=%E8%A3%85%E7%94%B5%E8%84%91%E7%B3%BB%E7%BB%9F%7C&fee_type=1&input_charset=UTF-8?ify_url=http%3A%2F%2F114.215.204.15%3A8080%2Fayly_web%2FencryptService%2FmicroMsgReturn.action&out_trade_no=1103065596&partner=1226772201&sign=EEE51959D223FA8232EE4D6FE58404209C&spbill_create_ip=121.237.253.44&total_fee=1",

"partnerid": "1226772201",

"prepayid": "120001000015340109f63edb1ecc3a86ce",

"sign": "1869b9629fcd132ab7a491fc9f57db0bd230a3",

"timestamp": "142077677"

},

"desc": "取支付信息成功!",

"result": 1

}

我直接修改sendPayReq()方法。

在sendPayReq里面掉微信就行了。安全性刚刚的!(^_^)

时间: 2024-10-26 20:46:33

微信支付 for android 集成笔记( 集成遇到问题记录)的相关文章

关于微店整合微信支付时出现的的各种问题的记录 php版

由于公司项目的需要,需要在项目里整合微信支付,公司原有的项目中已有老版本的支付功能,在此不作讨论.我需要作的就是加入新版本的支付功能 让项目里可以支持新老两种版本的功能.在微信官方下载到了新版支付的php版sdk,看到 WxPay.ub.config.php,SDKRuntimeException.php, WxPayPubHelper.php 三个文件.我需要改造的就是WxPayPubHelper.php这个文件,因为这个文件现在是单用户配置的,所以我要让它变成多用户的,在改造的过程中遇到了几

Android学习笔记 - 开发环境配置问题记录

Ubuntu 12.04 上开发环境的配置方法就不在这里赘述了,直接去Google的开发者官网看就行了.这里主要记录个人在环境配置时遇到的问题和解决办法. 官网文档:http://source.android.com/source/initializing.html 手册中Installing required packages (Ubuntu 12.04)一部中安装包 libgl1-mesa-glx:i386 会提示依赖错误: 下列软件包有未满足的依赖关系: libgl1-mesa-glx:i

安卓 集成微信支付和支付宝

最近比较闲,公司项目更换后台,于是自己来研究微信支付和支付宝支付,把自己学习的过程写下来,以备以后查看. 注:要集成微信支付和支付宝功能,必须要有以下几个配置信息,而这写信息需要公司去微信支付和支付宝开放平台申请并提供给开发者,当然自己也可以去申请,这里作者用的是公司提供的,这里不纠结这些过程.获得这些信息以后 将配置信息放到一个静态类中,以共统一使用,但是处于安全考虑,微信与支付宝推荐这些数据放到服务器,这里作者把他们都放在前端,整个过程都是前端处理,实际开发尽量预处理订单生成放到后端处理.

iOS 支付宝、微信支付的集成记录

一.前言 最近项目需求需要集成支付宝和微信支付,以前没有接触过,这次正好乘着这次机会了解下. 总的来说,客户端的工作不多,无非就是就是集成SDK,然后获取后端传来的参数,吊起支付,回调处理等. 先附上官方文档链接: 支付宝:https://docs.open.alipay.com/204 微信支付:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1 废话不多说,开始吧. 二.支付宝 1.先集成SDK pod 'Alipay

Android开发 --微信支付开发(转载!)(开发工具:Eclipse)

Android_APP 微信支付接口开发 日期:2015-10-06 12:47:33 作者: 来源: 人气:3549 1.首先说一下我们在开发微信支付接口的时候遇到最多和最疑惑的问题,那就是明明 appid.商户号.API密钥 都对照了好几遍确实是和自己的一样,并且也没有在Log日志中出现签名错误等信息,却始终调不起微信支付,或是直接回到支付结果后的界面并提示 “微信支付结果:null;code=-1”.这就是微信支付中的一个深坑之处(为什么说这是深坑之处呢?会在下面特别说明). 2.下面就教

【转】Android开发笔记(序)写在前面的目录

原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入门上:其次是想拾缺补漏,写写虽然小众却又用得着的东西:另外就是想以实用为主,不求大而全,但求小而精:还有就是有的知识点是java的,只是Android开发也会经常遇上,所以蛮记下来.个人的经

微信支付注意事项

微信支付,Android客户端开发注意事项:   最近项目要添加一个微信支付的功能,结果Android客户端总是无法调起支付页面,被卡了几天终于解决了,现做一个简单的总结. 必须实现以下流程否则微信支付无法调起支付页面   准备工作: 1,在微信公众平台注册的appid要与发送请求的appid一致 2,应用要通过审核,必须获得支付功能(图1) 3,应用信息中的包名(com.example.XX)和应用签名(.keystore)要与你开发打包的应用保持一致(图2) 4,测试时必需要以注册的 .ke

商户如何接入微信支付

1. 商户接入 1.1 申请流程指引 一.申请流程图 二.申请接入步骤详细说明 (一)成为已认证的服务号 1.目前微信支付功能仅开放给已经通过微信认证的服务号(企业.商店商家.非事业单位媒体类服务号),若已经通过微信认证,且是服务号,可直接进入第二步;2.订阅号商户可先升级为服务号,此步骤约1个工作日;3.未经认证的商户可先申请微信认证.注意:请申请认证的商户主体与后续申请微信支付权限的商户主体保持一致. (二)提交申请资料,等待审核 1.登录公众号,进入:服务-服务中心-商户功能; 2.提交商

微信支付开发中一些心得

1.微信支付的付款单位是分,最后的金额要将元转成分,这里需要注意的是java如果直接通过double或者float计算的出来的数字有可能是带有小数点的. 例如:double d = 3.85100:结果是385.0 微信支付金额不允许带有小数点,这样的参数提交到微信支付会提示:参数传递错误*. 2.带有微信支付的android app运行在手机之后,有可能获取access token,preparedId之后没有任何相应.这里有可能是因为app没有signature的原因.在微信开放平台中有一个