④. 回调函数的注意
- 情况描述
注意该路径必须要与配置文件中的回调路径一致,此回调函数,是根据微信是否真正完成支付后的数据更新链接,一般在此处进行订单状态的修改
先前发现,因为微信服务的设计,会多次回调 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 进行页面跳转 } }
内容版权声明:除非注明,否则皆为本站原创文章。