此文主要为个人解决ThinkPHP3.2.3下微信支付所遇到的一些坑的解决方案,仅供参考,详情请参考原文。
1.weixinpay.class
$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 );
今天在做批量支付时发现,会有total_fee报错,个人的想法是将所有待支付的批量订单拼接state参数传入微信,然后再notify方法中进行分离整理,此时应为有参数长度的限制,不可以无限制的拼接,暂时的解决方案是进行新订单的创建,其中包含批量订单号的信息已完成需求。
2.回调函数的编辑
注意该路径必须要与配置文件中的回调路径一致,此回调函数,是根据微信是否真正完成支付后的数据更新,一般此处进行订单状态的修改,比如,我在此处异步执行的是将订单号的支付状态参数由0置为1.[个人测试发现,此处session和cookie的设置都失效,仅做参考]
/** * 微信支付监听接口 判断是否完成了微信支付操作 */ 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 进行页面跳转 } }