微信支付成功后反复回调

浏览:8003 发布日期:2017/03/28 分类:求助交流 关键字: 微信支付 反复回调
到底要怎么办,小弟做了个充值余额的功能,充值成功后会反复回调8次多,到底要怎么解决,按照官方返回xml给微信还是不能阻断请求?怎么办
下面是回调代码部分public function finish_pay(){
    //存储微信的回调
    $xml = $GLOBALS['HTTP_RAW_POST_DATA']; 
        $xta  = $this->xmlToArray($xml);  

        $order_id = $xta['out_trade_no'];

       //修改订单状态
    M('pay_records')->where(array('records_order_id'=>$order_id))->save(array('records_is_pay'=>1));

            //查询订单信息,用于获取用的ID
            $order = M('pay_records')->where(array('records_order_id'=>$order_id))->find();

                        //如果存在余额数据就在原基础上累加
            if($member_balance = M('member_balance')->where(array('member_id'=>$order['records_member_id']))->find()){

                $save_data = array(
                                     'member_banlance' => $member_balance['member_banlance'] + $order['records_money']
                                  );

                //修改余额
                M('member_balance')->where(array('member_id'=>$order['records_member_id']))->save($save_data);

                                //回调给微信。。。。不知道为什么不行啊
                $this->return_xml_success('ok');

            }else{
                                //如果不存在余额记录,就添加一条
                $add_data = array(
                                    'member_id'         => $order['records_member_id'],
                                    'member_phone'      => $order['records_members_phone'],
                                    'member_banlance'     => $order['records_money']
                                );

                                //回调给微信。。。。不知道为什么不行啊
                M('member_balance') -> add($add_data);
                $this->return_xml_success('ok');
            }
        }
    

}

private function set_xml($args)
    {
        $xml = "<xml>";
        foreach ($args as $key=>$val)
        {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml; 
}

private function return_xml_success($msg){
        $arr = array(
            'return_code'   =>  'SUCCESS',
            'return_msg'    =>  $msg
        );
        echo $this->set_xml($arr);
        exit();
 }
到底是什么原因呢,返回给xml的格式是没问题的,我已经存进数据库看了,是正确的格式。。。。明明已经是正确格式的,为什么还是不能阻断回调呢。。也试过直接echo "SUCCESS"不行,也试过先ob_clean(),再echo 还是不行 老铁们有什么好的办法阻断吗。 目前只能通过业务逻辑去阻断,通过查询对应订单的状态是否被支付来阻断,不过还是要反复回调,会很消耗数据库,
最佳答案
评论( 相关
后面还有条评论,点击查看>>