payFund == '') { $this->payFund = new PayRefush(); } return $this->payFund; } /** * Des:退款操作 * Name: actionIndex * @author 倪宗锋 */ public function actionIndex() { $refundList = $this->getRefund()->getUnPayIds(); foreach ($refundList as $val) { $id = $val['id']; $refund = $this->refund($id); $logUrl = ROOT_PATH . '/console/log/refund/error' . date("Y-m-d") . '.log'; $msg = date("Y-m-d H:i:s") . ':'; $msg .= $refund['msg']; file_put_contents($logUrl, $msg . PHP_EOL, FILE_APPEND); } } /** * Des:执行退款 * Name: refund * @param $id * @return array * @throws Exception * @author 倪宗锋 */ public function refund($id) { //获取退款信息 $refundInfo = $this->getRefund()->getInfoById($id); if ($refundInfo['status'] == 2) { return Util::returnArrSu($refundInfo['order_id'] . '退款成功!已经是退款状态!'); } $transaction = \Yii::$app->db->beginTransaction(); try { //1.修改订单状态为退款成功 $upFlag = $this->getRefund()->updateStatus($id, 2); if ($upFlag == false) { return Util::returnArrEr($refundInfo['order_id'] . '退款失败!修改订单状态失败!'); } //2.调用接口微信或支付宝 进行退款操作 $params = [ 'order_id' => $refundInfo['pay_order_id'], 'name' => '订单退款', 'total_fee' => $refundInfo['amount_money'], 'refund_fee' => $refundInfo['refush_money'], 'app_id' => $refundInfo['app_id'], 'memo' => '订单退款' ]; $refundFlag = PayService::cancel($params, $refundInfo['pay_type']);//退款退钱 if ($refundFlag['flag'] == false) { $transaction->rollBack(); $this->getRefund()->updateStatus($id, 3); return Util::returnArrEr($refundInfo['order_id'] . '退款失败!退款接口返回失败!'); } //3.发送短信通知 $orderContacts = new OrderContacts(); $getOrderCon = $orderContacts->getRowByOrderId($refundInfo['order_id']); $reMsg = ''; if (empty($getOrderCon['contacts_phone'])) { $reMsg = '无联系人手机号!'; } else { $siteConfig = Util::getSiteConfig(); $msg = "您申请的¥{$params['refund_fee']}退款已经通过审核,预计一个工作日内会退还到您的付款账户,请留意查收。如有问题,可拨打客服热线:" . $siteConfig['kefu_tel']; $sendMsg = Util::sendMessage($msg, $getOrderCon['contacts_phone']); if ($sendMsg['flag'] == false) { $reMsg = '发送短信通知失败!'; } } $transaction->commit(); //发送通知 if ($refundInfo['pay_type'] == 1) {//如果是微信支付 发送退款通知 不论 成功失败 Util::sendWxMsg(['type' => 2, 'order_id' => $refundInfo['order_id'], 'money' => $refundInfo['refush_money']]); } return Util::returnArrSu($refundInfo['order_id'] . '退款成功!' . $reMsg); } catch (Exception $e) { $transaction->rollBack();//回滚 return Util::returnArrEr($refundInfo['order_id'] . '退款失败!程序异常!'); } } }