微信app支付问题

来源:互联网 发布:逍遥模拟器网络不好 编辑:程序博客网 时间:2024/04/30 10:28

浑浑噩噩的读了3年,然后现在又出来实习了2个月,做了一个微信支付,足足坑了5天,纪念一下这一次的被坑。

再见微信支付那里下载了demo,然后直接把代码拆分到了服务器和客户端上面,然后遇到了第一个问题。

1.输入中文导致了签名错误

之前几次下单都觉得十分正常,然后准备测试支付接口调用微信的时候,突然发现使用数据库数据下单的时候,因为使用了中文,导致了订单没有生成出来,而且返回的都是乱码,这个问题足足郁闷了我很久。从网上翻阅了很多资料(网上也几乎没多少可以参考的资料),然后发现了给微信传输过程中,是使用编码,= =之前还一直以为是uft-8。参考了各种经过utf-8转码后传输,折腾了一个上午发现还没什么效果。那段乱码还足足恶心了我一上午。突然灵机一动之下,把方法调转了过来,把乱码进行了反转码。

<span style="font-size:14px;">xml = xmltoMap(new String(content.getBytes("iso8859-1"),"utf-8"));</span>
终于把乱码,解决了。

然后又研究了很久,翻阅了很多网页后,发现了签名错误是因为利用MD5加密时,加密过程中没有考虑编码方式

<span style="font-size:14px;"><span style="white-space:pre"></span>genAppSign()原来<span style="white-space:pre"></span>String appSign = MD5.getMessageDigest(sb.toString().getBytes()).toUpperCase();应该是<span style="white-space:pre"></span>String appSign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase();</span>

解决了这个问题后,有遇到了一个很经典的问题:


2.调用msgApi.sendReq(req);后没有任何反应

    测试了2天,翻看了很多网页,删除了很多次微信的信息(因为别人说demo只能第一次可以调用,所以以为是这个原因删了N次)。看到别人说这个问题的最主要的方法是利用在开发平台上面填写的keystroe打包,要对得上开发平台上面的签名。好吧,我好愚蠢的以为:“开发平台上面写的应用签名就是keystroe”,然后又活脱脱坑了很久,偶尔偶尔的情况下,才在官网上面发现了


应用签名:根据项目的应用包名和编译使用的keystore,可由签名工具生成一个32位的md5串,在调试的手机上安装签名工具后,运行可生成应用签名串,如图8.9所示,绿色串即应用签名。签名工具下载地址https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk


抓狂抓狂抓狂应用签名居然利用微信提供的这个工具来获取的(详细见)https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5 

然后很轻松的测试过了。


(PS:记得WXPayEntryActivity.java 这个奇葩的东西的配置问题 详细自己上网查,不然也会坑掉。)


3.支付之后的通知问题

尴尬尴尬尴尬好吧最后这个问题不算是什么问题,只是自己经验比较少。一开始利用平常的url访问,把订单的参数也写在了回调的url上面,然后发现是不可以的,好像说关于支付通知的所有回调地址都是不带参数的。然后就很老老实实的去解析了xml。


0 0
原创粉丝点击