您的位置:首页 > 移动开发 > 微信开发

TP整合微信遇到的一系列问题

2016-03-06 14:14 411 查看
上个月接到一个项目,做一个基于微信的众筹系统,只做移动端的,根据XX老板描述貌似很简单,其实我也是我想的太简单,最多就是一个微信支付接口没做过,其他做起来都松松的。可不曾想,就是这支付接口,耗了我一差不多一半的工时。

第一个坑,文档坑。

开始的时候, 一想微信支付,腾讯的啊,BAT中的T啊,那肯定文档比中华大辞典还详细,迫不及待去官方网站把demo给下了下来,把里面的核心代码迁移到自己的框架(TP)里面,配置好配置信息(配置信息demo写的更不详细,有些没有标出是否是必要的,害我gg了半天),控制器OrderController.class.php,方法是addorder,把原来demo代码扒拉下来,原封不动,一跑,全是报错,其实最后发现文档好多地方都是错的。有些需要json_encode()包装下的没包装,有些接口函数压根就没echo等等等。。

第二个坑,调试坑。

想知道微信支付怎么调试的吗?就是在你手机上不断的用微信自带的啥子带有QQ浏览器内核的浏览器去预览,才会跳到支付界面,电脑上压根就不让你用,如果你用的话就是这样的


嗯,微信就是这么任性,用户体验做的超级牛叉,一个支付咋这么苦逼呢?害死我们这些搞开发的。

硬是要一边对着代码一边在那扣手机。扣。扣。手机。

好,既然是要到微信里面去调试,嗯,那就去!微!信!

开始我用的是native的原生二维码支付,因为至少可以在pc端的浏览器上看到二维码的样子,支付的形式呢通俗的说就是你买一个商品,然后每次生成一个二维码在网页上让你扫,开始我看到微信有个功能用户体验做的很棒,那就是长按二维码可以识别,我不知道知道这个功能的人多不多,我也是在我不断的扣手机的时候看到的。

好!最大的坑来了,我乖乖的生成了二维码,嗯,就像这样:



扫了扫,微信支付正常调用,当时差点喜得没从椅子上跳起来。

其实还不知道,这只是坑的开始,只是跳过了一个小坑而已,微信支付开发的时候都有一个这个东西,


对就是这个NOTIFY_URL,这个东西相当坑,为啥坑呢?看demo给的下面的说明:



呵呵呵,30分钟8次,定期重新发起通知,但不能保证最终能成功,也就是说这玩意还是一个概率事件。

关键是调试啊,调试是异步啊,普通的异步还行,FF抓个包就哦了,关键是尼玛在微信客服端啊,抓个屁啊,他说默认生成一个XML数据导入到.log文件中,我把路径设定好,压根连XML数据的毛都没找到,这个方案在我调试到第四天的时候几乎绝望,故果断被我抛起了。

后面选用了jsapi形式,通俗的说也就是给你一个支付按钮,你点开就可以输入支付密码输入了。他的最大的好处就是能用一个js回调一个alert弹出一个消息提示你,这可以大大的降低调试的压力,因为看的到数据,麻麻在也不怕我不知道错在哪了。

开始我重新修改了配置了以后重新载入,就发现了这个问题:



然后在微信客户端老是弹出这个警告窗口:



我GG了一下,说是指的是支付目录设置错误,但是我看的教程和demo都是这么写的,而且我的路径可以在浏览器上面直接访问。

好了,就这么一遍遍的不断的改来改去,后来终于发现了错误,差点让我一口老血喷在显示屏上。

原来是http://后面要带www.要不然不识别。如果谁不带www而且成功了。那只能说明微信支付看我不爽


这个坑我跳出来花了2天不止。。。。。。。。。。。。

好了,终于可以开开心心的打开支付界面了,支付流程还是跟native原生支付一样,一气呵成,最终在支付完成以后显示出了这么一个回调提示



说明支付成功了。

可我却没这么高兴,难得还在后面呢。。。。

幸亏那时候学过js,看得懂一部分js,再加上gg查询,定位到代码端。



原来返回的是一个json格式的对象 ,在单独输出res发现没有我想要找的东西。

忽然发现上面有一个echo $jsApiparameters ,第六感告诉我我要找的东西就是这个,

果不其然,一输出发现是json格式的数组,并且带有prepay_id字段。。。

这个prepay_id 是干嘛的呢,这个玩意相当于你在支付的时候的一个独一无二的凭据,是微信端服务器响应后返回给你的,所以我就利用了这个字段进行了ajax回调。

代码给我改成了这样:



再在后台根据这个字段查找相应字段来修改支付状态。

看来我的想法有的时候还是太天真了。

因为没有细看代码,光顾着自己偷着乐了,发现前端表单传值传不过来了,百思不得其解啊,明明就,明明就。。。。

前端表单的值传不过来意味着就没法插入数据啊。

后面检查,又发现了一个坑。



卧槽这里居然有个Header,重定位啊。难怪表单的值全部给GG了。

嘿嘿嘿,那我就在你GG之前插入一部分数据好了。

索性在Header前面插入一部分数据,并设了一个状态flag防止重复插入。

在后面处理到末尾的时候用session和cookie不断的存入数据和调取数据。

到最后支付,那都是算行云流水了。

这是最后我改好的支付成功的界面





一共花费6天研究这玩意,测试200多次。。。。

一分一分的测试都花了2块多。

附上:TP框架整合微信支付。

http://pan.baidu.com/s/1kTxkvBL

在这里感谢帮助我的老师和学长。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: