thinkphp微信开发实例(ThinkPHP框架下微信支付功能总结踩坑笔记)
thinkphp微信开发实例
ThinkPHP框架下微信支付功能总结踩坑笔记本文实例讲述了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 个字符 ,不可以无限制的拼接
后来的解决方案是进行新订单的创建,由此新订单号去查询关联的其他批量订单信息,并且已完成需求
④. 回调函数的注意
- 情况描述
注意该路径必须要与配置文件中的回调路径一致,此回调函数,是根据微信是否真正完成支付后的数据更新链接,一般在此处进行订单状态的修改
先前发现,因为微信服务的设计,会多次回调 notify() 以判断是否真正的支付成功,而简单的 update 操作是无法检测的,为了同自己的平台相关联,同理需要进行状态的判断,否则不可避免的会多次执行 notify() 中的逻辑处理
注意:
1. 比如,我在此处异步执行的是将订单号的支付状态参数由 0 置为 1,判断如果是已支付订单,则不再执行后续更新逻辑.
2. 个人测试发现,此处 session 和 cookie 的设置都失效,仅做参考
⑤. d() 方法失效问题
- 补充时间:【2017-02-09】
- 情况描述
今天发现,当在微信完成支付后进行的回调中,针对于 thinkphp 框架里的 d() 方法是无法执行的,测试发现同样的代码不是这样微信回调就可以执行,毕竟之前记得是没有问题的
此时考虑的解决方法是使用 model 的实例化 new 方法进行曲线优化,发现可行…
⑤. 鬼知道是什么情况
- 补充时间:【2017-05-02】
- 情况描述
这两天再次进行代码的迭代,根据自己之前的印象继续折腾微信支付,发现这可真真的是个坑,我认为刚开通微信支付的服务号很有可能不满足某些代码开发需求,配置完成的数据,半天都不能接收到正确的反馈
待到第二天再准备继续攻克时发现,未动的代码又实现了需求
举个例子:
前一天回调的路径放在 m 模块下怎么都不执行,手贱参考以前的回调路径放到 home下就可以了,首先排除低级的个人代码问题,因为第二天无聊又改回去了 m,竟然又好了…
补充一部分测试的代码:
|
/** * 微信支付监听接口 判断是否完成了微信支付操作 */ public function notify(){ // ↓↓↓下面的file_put_contents是用来简单查看异步发过来的数据 测试完可以删除;↓↓↓ // 获取xml /*$xml=file_get_contents('php://input', 'r'); //转成php数组 禁止引用外部xml实体 libxml_disable_entity_loader(true); $data= json_encode(simplexml_load_string($xml, 'simplexmlelement', libxml_nocdata)); file_put_contents('.notify.log', $data);*/ // ↑↑↑上面的file_put_contents是用来简单查看异步发过来的数据 测试完可以删除;↑↑↑ // 导入微信支付sdk vendor( 'weixinpay.weixinpay' ); $wxpay = new \weixinpay(); $result = $wxpay ->notify(); if ( $result ) { $out_trade_no = explode ( 'm' , $result [ 'out_trade_no' ])[0] ; $this ->toupdatepayinfo( $out_trade_no ); //todo 进行页面跳转 } } |
⑥. thinkphp 跨模块调用方法失效问题
- 补充时间:【2017-05-03】
- 情况描述
有种情况的出现是,同样的代码在实际支付回调的函数中不执行,然而自己做了个测试路径传入固定订单号发现执行顺利,前提是所处环境完全一致(都在线上进行),就如同上次使用d()方法测试可以执行,放在实际的微信回调后就打死也不执行
而这次吸取了教训,使用的 new model 实例化方法,因为其中的一个 model 类在初始化时调用了部分数据,结果微信支付回调时卡在实例化这行代码上,虽然测试的代码是没问题的,自己也说不清楚,鬼知道到底是怎么回事
不过发现 a() 跨模块方法还是可以用的,至少现在是可行的…
后期发现如下的类似方法也能执行
|
//todo 获取对应订单的交易价 $cartpaycontroller = new \m\controller\cartpaycontroller(); $order_amount = $cartpaycontroller ->wxpayorder( $out_trade_no ,0); |
希望本文所述对大家php程序设计有所帮助。
原文链接:https://blog.csdn.net/u011415782/article/details/78757381
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- thinkphp5 api开发(thinkphp5框架前后端分离项目实现分页功能的方法分析)
- thinkphp5框架怎么打开(thinkphp5.1框架模板布局与模板继承用法分析)
- thinkphp3.2.3 接口开发(ThinkPHP3.2.3框架Memcache缓存使用方法实例总结)
- thinkphp返回json(thinkphp5框架实现数据库读取的数据转换成json格式示例)
- thinkphp源码上传(ThinkPHP框架实现FTP图片上传功能示例)
- think php上传服务器(ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例)
- ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解(ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解)
- thinkphp5框架怎么设置(thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例)
- thinkphp继承model如何使用(Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解)
- thinkphp支付宝支付(thinkPHP和onethink微信支付插件分享)
- thinkphp怎么输出二维值(thinkphp 表名 大小写 窍门)
- thinkphpmodel使用教程(Thinkphp5.0 框架Model模型简单用法分析)
- thinkphp框架详解(thinkphp3.2框架中where条件查询用法总结)
- php微信支付怎么做(ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解)
- thinkphp兼容dedecms(DedeCMS Error:Tag disabled:"php"的解决办法)
- 给儿童吃什么最好(给儿童吃什么最好消化)
- 杭州旅游攻略()
- 云南旅游攻略(云南旅游攻略5天攻略)
- 收藏 春节假期,这些景区巨划算(收藏春节假期这些景区巨划算)
- 景区游玩,这些安全知识要牢记(这些安全知识要牢记)
- 各地出招烘 热 旅游(各地出招烘热旅游)
热门推荐
- sqlserver字符串判断函数(解决sql server保存对象字符串转换成uniqueidentifier失败的问题)
- python将网站图片本地存储(详解Python下载图片并保存本地的两种方式)
- iis搭建网站的地址(IIS站点所有文件直接下载 强制下载)
- linux搭建本地yum源配置详细步骤(linux 配置本地yum源,配置国内yum源,配置epel源的步骤)
- 笨办法学python3目录(如何愉快地迁移到 Python 3)
- php符串使用教程学习(PHP实现支持CURL字符串证书传输的方法)
- python微信支付接口(Python提取支付宝和微信支付二维码的示例代码)
- 哪里有云主机租用(云主机租用要注意的事项?)
- typescript开发后端(教你使用webpack打包编译TypeScript代码)
- ASP.NET获取网页中的图片
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9