/** * 微信支付异步回调API * 微信支付成功,会收到异步回调 */ public function actionWxpay() { $weixinPay = new WeixinPay(); $weixin = new Weixin(); $xml = file_get_contents('php://input'); $msg = $weixin->parseMsg($xml); //记录微信推送日志 $notifyMongo = new WeixinPayNotify(); $notifyMongo->logPayNotify($xml); if (!$msg || !is_object($msg)) { $weixinPay->notifyXml('FAIL', '通知不合法'); } if (!isset($msg->return_code) || $msg->return_code != 'SUCCESS') { $weixinPay->notifyXml('FAIL', '通信失败'); } if (!isset($msg->result_code) || $msg->result_code != "SUCCESS") { $weixinPay->notifyXml('FAIL', '交易失败'); } //签名验证失败 if (!$weixinPay->checkSign($msg)) { $weixinPay->notifyXml('FAIL', '签名验证失败'); } //$notifyMongo->add($msg); //流程走到这里说明已经支付成功了,这里无需更新订单逻辑 $userOrder = new UserOrder(); //记录微信订单号 $userOrder->pay($msg->out_trade_no, $msg->transaction_id); }
/** * 微信公众号入口 */ public function actionPortal() { $weixin = new Weixin(); //签名验证逻辑 // if($weixin->checkSignature()){ // echo $_GET['echostr']; // } // exit; //读取原始请求数据 $msg = $weixin->getRawMsg(); //推送日志 $pushlog = new WeixinPushLog(); $pushlog->logWeixinPush($msg); $msgObj = $weixin->parseMsg($msg); if ($msgObj === false || !is_object($msgObj)) { exit; } switch ($msgObj->MsgType) { case 'event': //接收事件消息 $this->handleEventMsg($msgObj); break; default: //todo break; } }
/** * 利用统一支付接口获取预支付订单id */ public function getPrepayId() { $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $this->bodyArr(); $wx = new Weixin(); $xml = $this->arrayToXml(); $msg = $wx->rawpost($url, $xml); $msgArr = $wx->parseMsg($msg); if (!$msgArr || !is_object($msgArr)) { throw new \Exception('预支付订单申请请求失败'); } //print_r($msgArr);exit(); if ($msgArr->return_code == 'SUCCESS') { $this->param['prepay_id'] = $msgArr->prepay_id; } else { throw new \Exception('无法创建预支付订单'); } }