宝哥软件园

ThinkPHP框架下微信支付功能概述

编辑:宝哥软件园 来源:互联网 时间:2021-08-26

本文描述了ThinkPHP框架下微信支付功能的总结。分享给大家参考,如下:

摘要

本文主要是针对ThinkPHP3.2.3下微信支付遇到的一些坑的个人解决方案,仅供参考,详情请参考原:微信公众平台开发教程ThinkPHP框架下的微信支付功能

踩点记录

作为参考,这里是附录中weixinpay.class代码的截图

(1).验证不严谨,教训丢失

补充时间:【2017-01-02】情况说明【我尊重你,但不同意你】元旦期间,微信支付被大牛攻击,损失近80 K,好在公司没有追究。毕竟赶时间,测试也不全面(根本没有测试人员)。好在对方24小时没有收钱,退款问题基本都集中在验证不足的红包发放上,不属于

.参数“total _ fee”报告了一个错误

补充时间:【2017-02-05】情况描述今天我们发现一个情况。如果打开微信支付密码界面,从待支付中再次支付,有时会报错一个“total_fee”参数,找到解决方案,即“out_trade_no”会重新配置时间戳。个人猜测可能是由于某种原因后一笔付款没有完成。

代码参考如下:

$ total _ fee=float val($ order _ amount)* 100;$ order=array ('body'=' testmsg ',//商品说明(需根据自身业务修改)' total_fee'=$total_fee,//订单金额以(分钟)为单位(需根据自身业务修改)' out _ trade _ no '=$ out _ trade _ no . '//订单编号。(需要根据自己的业务进行修改)product_id'='1 ',//商品id(需要根据自己的业务进行修改)' trade_type'='JSAPI ',//JSAPI pays' openid'=$openid//被收购的OpenID);3.批量支付问题

补充时间:【2017-02-08】情况说明今天做批量支付的时候发现会有total_fee错误。个人的简单想法是把所有要支付的批量订单拼接成状态参数发送到微信,然后进入notify()方法进行分离整理。这时发现微信的参数长度限制最多在50个字符左右,不能无限拼接。后来,解决办法是创造新订单,从而创造新订单

.注意回调函数

请注意,该路径必须与配置文件中的回调路径一致。该回拨功能根据微信是否实际完成支付更新链接。一般情况下,订单状态在此修改。此前发现,由于微信服务的设计,会多次回拨notify()判断支付是否成功,但无法检测到简单的更新操作。为了和自己的平台关联,需要用同样的方式判断状态,否则不可避免的要执行几次notify()。

注意:

1.比如我在这里异步执行,将订单号的付款状态参数从0设置为1,判断如果是已付款订单,后续的更新逻辑就不执行了。2.个人测试发现这里的会话和cookie设置无效,仅供参考。

.D()方法失败

补充时间:[2017-02-09]情况说明今天发现微信完成支付后回拨无法执行ThinkPHP框架中的D()方法。测试发现相同的代码不能以这种方式执行。毕竟我记得以前没有问题。此时考虑的解决方案是使用模型的实例化新方法来优化曲线并发现其可行性.

.谁知道是什么

补充时间:【2017-05-02】情况描述这两天代码又迭代了,根据之前的印象继续折腾微信支付,发现真的是坑。我觉得刚开通微信支付的服务号很可能不符合一些代码开发需求,配置好的数据很长时间都收不到正确的反馈。当我准备第二天继续征服的时候,不为所动的代码已经实现了需求。比如:前一天的回调路径不在M模块下执行。参考前面的回调路径,放在Home下面就够了。首先,消除低级个人代码问题,因为第二天我很无聊,改回了M,但更好.

补充部分测试的代码:

/* * *微信支付监控界面判断微信支付操作是否已完成*/公共功能notify(){ //以下file_put_contents用于简单查看异步发送的数据,测试后可删除;get 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厂商(' Weixinpay。weixin pay’);$ wx pay=new Weinpay();$ result=$ wx pay-notify();if($ result){ $ out _ trade _ no=explode(' M ',$ result[' out _ trade _ no '])[0];$ this-toUpdatePayInfo($ out _ trade _ no);//TODO跳转到页面}}。ThinkPHP跨模块调用方法失败

补充时间:【2017-05-03】情况描述有一种情况,实际支付回拨功能中没有执行相同的代码,但是我做了一个测试路径,在固定的订单号中通过,发现执行成功,前提是环境完全一致(都是在线进行的),就像上次使用D()方法的测试可以执行一样,实际微信回拨后被杀,没有执行,但是这次吸取了教训。使用了新的模型实例化方法,因为其中一个模型类在初始化时使用了一些数据,导致微信支付回调卡在实例化代码中。虽然测试的代码很好,但我说不清楚。天知道发生了什么,但我发现A()跨模块方法仍然可以使用,至少现在是可行的.后来我发现下面类似的方法也可以执行

//TODO获取对应订单的交易价格$ cart pay controller=new m controller cart pay controller();$ order _ amount=$ cartPayController-wxPayOrder($ out _ trade _ no,0);更多对PHP相关内容感兴趣的读者可以查看本网站专题:《PHP微信开发技巧汇总》、《php curl用法总结》、《PHP网络编程技巧总结》、《php字符串(string)用法总结》、《PHP中json格式数据操作技巧汇总》、《PHP针对XML文件操作技巧总结》、0103010

希望本文对PHP编程有所帮助。

更多资讯
游戏推荐
更多+