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