public function notify()
 {
     /*
     *
     <xml> <appid><![CDATA[wx4e81aacd38a27424]]></appid> <attach><![CDATA[{"uid":"74","openid":"oVe75s2v_gh8E_ed5-MS57NVVXhg","aid":"1"}]]></attach> <bank_type><![CDATA[CFT]]></bank_type> <cash_fee><![CDATA[1]]></cash_fee> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[1247136201]]></mch_id> <nonce_str><![CDATA[z616xlvfxant9iej7xx7cxnxhw7l4bl1]]></nonce_str> <openid><![CDATA[oVe75s2v_gh8E_ed5-MS57NVVXhg]]></openid> <out_trade_no><![CDATA[2015092150101971]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[181D406FF7A8D2F23F78EEF46DD46FF7]]></sign> <time_end><![CDATA[20150921212944]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[1000040089201509210951012566]]></transaction_id> </xml>
     */
     //使用通用通知接口
     $notify = D('Server', 'Pay');
     //存储微信的回调
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     setLog($xml);
     $notify->saveData($xml);
     //验证签名,并回应微信。
     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
     if ($notify->checkSign() == FALSE) {
         $notify->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $notify->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         $notify->setReturnParameter("return_code", "SUCCESS");
         //设置返回码
     }
     if ($notify->checkSign() == TRUE) {
         if ($notify->data["return_code"] == "FAIL") {
             //通信出错
         } elseif ($notify->data["result_code"] == "FAIL") {
             //业务出错
         } else {
             //支付成功
             $data = $notify->getData();
             $attach = $data['attach'];
             $attach = json_decode($attach, true);
             $aid = $attach['aid'];
             $uid = $attach['uid'];
             if (!$aid || !$uid) {
                 $notify->setReturnParameter("return_code", "FAIL");
                 //返回状态码
                 $notify->setReturnParameter("return_msg", "parameter error");
                 //返回信息
                 $returnXml = $notify->returnXml();
                 echo $returnXml;
                 exit;
             }
             $activity = D('Activity')->find($aid);
             $user = D('User')->cache('user_base_' . $uid, 3600 * 24)->find($uid);
             $sid = $activity['sid'];
             $site = D('Site')->cache('site_base_' . $sid, 3600 * 24)->find($sid);
             if (!$user || !$site || $activity['money'] != $data['total_fee']) {
                 $notify->setReturnParameter("return_code", "FAIL");
                 //返回状态码
                 $notify->setReturnParameter("return_msg", "user or site or money error");
                 //返回信息
                 $returnXml = $notify->returnXml();
                 echo $returnXml;
                 exit;
             }
             $orderno = $data['out_trade_no'];
             $order = D('Order');
             $cnt = $order->where("orderno = '{$orderno}'")->count();
             if ($cnt) {
                 $notify->setReturnParameter("return_code", "FAIL");
                 //返回状态码
                 $notify->setReturnParameter("return_msg", "order exists");
                 //返回信息
                 $returnXml = $notify->returnXml();
                 echo $returnXml;
                 exit;
             }
             $orderData = array('orderno' => $orderno, 'aid' => $aid, 'uid' => $uid, 'ordertime' => time(), 'paytime' => tounix($data['time_end']), 'paymethod' => '__weixin__', 'orderprice' => $data['total_fee'], 'quantity' => 1, 'paystatus' => 1);
             if ($order->create($orderData)) {
                 $order->add();
             }
             D("ActivityUser")->addJoin($uid, $aid);
             $openid = $data['openid'];
             //捉影万圣节活动
             if ($activity['uid'] != '10012') {
                 $res = D('Template')->new_enroll($openid, $user['nickname'], $activity['title'], $orderno, $activity['starttime'], $site['address']);
             }
             $returnXml = $notify->returnXml();
             echo $returnXml;
             exit;
         }
         //商户自行增加处理流程,
         //例如:更新订单状态
         //例如:数据库操作
         //例如:推送支付完成信息
     }
     $returnXml = $notify->returnXml();
     echo $returnXml;
 }
 public function notify()
 {
     /*
     *
             <xml>
             <appid><![CDATA[wx4e81aacd38a27424]]></appid>
             <bank_type><![CDATA[CFT]]></bank_type>
             <cash_fee><![CDATA[1]]></cash_fee>
             <fee_type><![CDATA[CNY]]></fee_type>
             <is_subscribe><![CDATA[Y]]></is_subscribe>
             <mch_id><![CDATA[1247136201]]></mch_id>
             <nonce_str><![CDATA[7haw88jm20b078lxufc3vhl1j5i5kiwm]]></nonce_str>
             <openid><![CDATA[oVe75s2v_gh8E_ed5-MS57NVVXhg]]></openid>
             <out_trade_no><![CDATA[wx4e81aacd38a274241434089697]]></out_trade_no>
             <result_code><![CDATA[SUCCESS]]></result_code>
             <return_code><![CDATA[SUCCESS]]></return_code>
             <sign><![CDATA[8791ACDF25B56957CA0AB4F055304BBA]]></sign>
             <time_end><![CDATA[20150612141518]]></time_end>
             <total_fee>1</total_fee>
             <trade_type><![CDATA[JSAPI]]></trade_type>
             <transaction_id><![CDATA[1000040089201506120240872710]]></transaction_id>
             </xml>
     */
     //使用通用通知接口
     $notify = D('Server', 'Pay');
     //存储微信的回调
     $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
     sae_log('notify', $xml);
     $notify->saveData($xml);
     //验证签名,并回应微信。
     //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
     //微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
     //尽可能提高通知的成功率,但微信不保证通知最终能成功。
     if ($notify->checkSign() == FALSE) {
         $notify->setReturnParameter("return_code", "FAIL");
         //返回状态码
         $notify->setReturnParameter("return_msg", "签名失败");
         //返回信息
     } else {
         $notify->setReturnParameter("return_code", "SUCCESS");
         //设置返回码
     }
     if ($notify->checkSign() == TRUE) {
         if ($notify->data["return_code"] == "FAIL") {
             //通信出错
         } elseif ($notify->data["result_code"] == "FAIL") {
             //业务出错
         } else {
             //支付成功
             $data = $notify->getData();
             $order = M('OrderWeixin');
             $attach = $data['attach'];
             $attach = json_decode($attach);
             foreach ($attach as $key => $val) {
                 $data[$key] = $val;
             }
             $Orderrecord = D('Orderrecord');
             $vertifyCode = $Orderrecord->buildVertifyCode();
             $dataRecord = array('orderno' => $data['out_trade_no'], 'paytime' => tounix($data['time_end']), 'paymethod' => '__weixin__', 'chargeid' => $data['transaction_id'], 'vertifycode' => $vertifyCode);
             M()->startTrans();
             $flg = $order->add($data);
             if (!$flg) {
                 sae_log('OrderWeixin', $data);
                 M()->rollback();
                 $returnXml = $notify->returnXml();
                 echo $returnXml;
                 exit;
             }
             $flg = $Orderrecord->add($dataRecord);
             if (!$flg) {
                 sae_log('Orderrecord', $dataRecord);
                 M()->rollback();
                 $returnXml = $notify->returnXml();
                 echo $returnXml;
                 exit;
             }
             $party = D('Party')->cache("party_" . $data['nid'], 60 * 60 * 24)->relation(true)->where('nid = %d', $data['nid'])->find();
             D('Party')->where('id = %d', $party['id'])->setDec('cntremain', $data['quantity']);
             S("party_" . $data['nid'], null);
             M()->commit();
             $time = date('Y-m-d H:i', $party['starttime']);
             $ret = D('Sms', 'Logic')->sendOrderVerify($data['phonenumber'], $party['title'], $vertifyCode, $time);
             if ($ret != null) {
                 $returnXml = $notify->returnXml();
                 echo $returnXml;
                 exit;
             }
         }
         //商户自行增加处理流程,
         //例如:更新订单状态
         //例如:数据库操作
         //例如:推送支付完成信息
     }
     $returnXml = $notify->returnXml();
     echo $returnXml;
 }
 public function tounix()
 {
     dump(tounix('20150613010101'));
 }