예제 #1
0
 public function notify()
 {
     //使用通用通知接口
     $notify = new \Notify_pub();
     //存储微信的回调
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     $notify->saveData($xml);
     //验证签名,并回应微信。
     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
     if ($notify->checkSign() == FALSE) {
         $notify->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $notify->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         $notify->setReturnParameter("return_code", "SUCCESS");
         //设置返回码
     }
     $returnXml = $notify->returnXml();
     echo $returnXml;
     //==商户根据实际情况设置相应的处理流程,此处仅作举例=======
     //以log文件形式记录回调信息
     //$log_ = new Log_();
     $log_name = "notify_url.log";
     //log文件路径
     log_result($log_name, "【接收到的notify通知】:\n" . $xml . "\n");
     if ($notify->checkSign() == TRUE) {
         if ($notify->data["return_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【通信出错】:\n" . $xml . "\n");
         } elseif ($notify->data["result_code"] == "FAIL") {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【业务出错】:\n" . $xml . "\n");
         } else {
             //此处应该更新一下订单状态,商户自行增删操作
             log_result($log_name, "【支付成功】:\n" . $xml . "\n");
             $info = $notify->xmlToarray($xml);
             $notice_sn = $info['out_trade_no'];
             $order_info['out_notice_sn'] = $info['transaction_id'];
             $order_info['is_paid'] = 1;
             $order_info['pay_time'] = get_gmtime();
             $order = M("order");
             $order_info1 = $order->where("notice_sn={$notice_sn}")->select();
             if ($order_info1['is_paid'] == 1) {
                 exit;
             } else {
                 $pay_time1 = $order->where("notice_sn={$notice_sn}")->getField('pay_time');
                 if ($pay_time1 == 0) {
                     $result = $order->where("notice_sn={$notice_sn}")->save($order_info);
                     // 根据条件更新记录
                 }
                 if (false !== $result && isset($result)) {
                     $number = $order->where("notice_sn={$notice_sn} AND is_paid =1")->getField('number');
                     $goods_id = $order->where("notice_sn={$notice_sn} AND is_paid =1")->getField('goods_id');
                     M("goods")->where("id={$goods_id}")->setInc('pay_number', $number);
                     $pay_number = M("goods")->where("id={$goods_id}")->getField('pay_number');
                     $total_number = M("goods")->where("id={$goods_id}")->getField('number');
                     if ($pay_number >= $total_number) {
                         $goods['type'] = 2;
                         $goods['end_time'] = get_gmtime();
                         M("goods")->where("id={$goods_id}")->save($goods);
                         // 根据条件更新记录
                     }
                     $unique = M("unique");
                     $total_lucky_number = $unique->where("goods_id={$goods_id}")->getField('lucky_number');
                     $total_lucky_number = unserialize($total_lucky_number);
                     $lucky_number = array_slice($total_lucky_number, 0, $number);
                     $rem_lucky_number = array_slice($total_lucky_number, $number);
                     $lucky_number1['lucky_number'] = serialize($lucky_number);
                     $rem_lucky_number1['lucky_number'] = serialize($rem_lucky_number);
                     M("unique")->where("goods_id={$goods_id}")->save($rem_lucky_number1);
                     $order->where("notice_sn={$notice_sn}")->save($lucky_number1);
                 }
             }
         }
     }
 }