本文实例讲述了ThinkPHP框架下微信支付功能总结。分享给大家供大家参考,具体如下:
摘要
- 此文主要为个人解决 ThinkPHP3.2.3 下微信支付所遇到的一些坑的解决方案,仅供参考
- 详情请参考 原文 : 微信公众平台开发教程之ThinkPHP框架下微信支付功能
踩坑记录
为便于参考,此处附录部分 weixinpay.class代码截图
①. 验证不严谨,损失教训
- 补充时间:【2017-01-02】
- 情况描述
【我尊重你,但不认同你】
恰逢元旦期间,遭到微信支付被大牛攻破的情况,损失近 80k,好在公司并没有追究,毕竟一直在赶时间,测试不全面(压根没测试人员),庆幸的的对方 24小时未收款,基本全部退还
问题集中在验证不足的红包发放上,不属于我的编码范围,分析后,明白一点,尽全力不要使用前端的数据提交,需要进行后端的数据判断,考虑尽量多的情况。
②. “total_fee” 参数报错
- 补充时间:【2017-02-05】
- 情况描述
今天发现一种情况,如果打开微信支付密码的界面后,未支付而从待付款进行再支付,会有时候报错一个“total_fee” 参数报错,找到一种解决方法,即将 “out_trade_no” 以时间戳来重新配置,个人猜测或许是因为一次支付未完成后因为某种原因限制再付款 …
代码参考如下:
$total_fee = floatval($order_amount)*100; $order=array( 'body'=>'testMsg',// 商品描述(需要根据自己的业务修改) 'total_fee'=>$total_fee,// 订单金额 以(分)为单位(需要根据自己的业务修改) 'out_trade_no'=>$out_trade_no.'M'.time(),// 订单号(需要根据自己的业务修改) 'product_id'=>'1',// 商品id(需要根据自己的业务修改) 'trade_type'=>'JSAPI',// JSAPI公众号支付 'openid'=>$openid// 获取到的openid );
③. 批量支付问题
- 补充时间:【2017-02-08】
- 情况描述
今天在做批量支付时发现,会有 total_fee 报错
个人最初简单的想法是将所有待支付的批量订单拼接为 state 参数传入微信,然后再进入 notify() 方法中进行分离整理,此时发现微信有参数长度的限制,大概最多 50 个字符 ,不可以无限制的拼接
后来的解决方案是进行新订单的创建,由此新订单号去查询关联的其他批量订单信息,并且已完成需求