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); } } } } }