選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

119 行
4.5 KiB

  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm RefundOrder.php
  13. * Create By 2017/3/11 15:25 $
  14. */
  15. namespace console\controllers;
  16. use common\models\OrderContacts;
  17. use common\models\PayRefush;
  18. use common\service\pay\PayService;
  19. use common\util\OrderUtil;
  20. use common\util\Util;
  21. use yii\console\Controller;
  22. use yii\db\Exception;
  23. class RefundOrderController extends Controller
  24. {
  25. public $payFund = '';
  26. public function getRefund()
  27. {
  28. if ($this->payFund == '') {
  29. $this->payFund = new PayRefush();
  30. }
  31. return $this->payFund;
  32. }
  33. /**
  34. * Des:退款操作
  35. * Name: actionIndex
  36. * @author 倪宗锋
  37. */
  38. public function actionIndex()
  39. {
  40. $refundList = $this->getRefund()->getUnPayIds();
  41. foreach ($refundList as $val) {
  42. $id = $val['id'];
  43. $refund = $this->refund($id);
  44. $logUrl = ROOT_PATH . '/console/log/refund/error' . date("Y-m-d") . '.log';
  45. $msg = date("Y-m-d H:i:s") . ':';
  46. $msg .= $refund['msg'];
  47. file_put_contents($logUrl, $msg . PHP_EOL, FILE_APPEND);
  48. }
  49. }
  50. /**
  51. * Des:执行退款
  52. * Name: refund
  53. * @param $id
  54. * @return array
  55. * @throws Exception
  56. * @author 倪宗锋
  57. */
  58. public function refund($id)
  59. {
  60. //获取退款信息
  61. $refundInfo = $this->getRefund()->getInfoById($id);
  62. if ($refundInfo['status'] == 2) {
  63. return Util::returnArrSu($refundInfo['order_id'] . '退款成功!已经是退款状态!');
  64. }
  65. $transaction = \Yii::$app->db->beginTransaction();
  66. try {
  67. //1.修改订单状态为退款成功
  68. $upFlag = $this->getRefund()->updateStatus($id, 2);
  69. if ($upFlag == false) {
  70. return Util::returnArrEr($refundInfo['order_id'] . '退款失败!修改订单状态失败!');
  71. }
  72. //2.调用接口微信或支付宝 进行退款操作
  73. $params = [
  74. 'order_id' => $refundInfo['pay_order_id'],
  75. 'name' => '订单退款',
  76. 'total_fee' => $refundInfo['amount_money'],
  77. 'refund_fee' => $refundInfo['refush_money'],
  78. 'app_id' => $refundInfo['app_id'],
  79. 'memo' => '订单退款'
  80. ];
  81. $refundFlag = PayService::cancel($params, $refundInfo['pay_type']);//退款退钱
  82. if ($refundFlag['flag'] == false) {
  83. $transaction->rollBack();
  84. $this->getRefund()->updateStatus($id, 3);
  85. return Util::returnArrEr($refundInfo['order_id'] . '退款失败!退款接口返回失败!');
  86. }
  87. //3.发送短信通知
  88. $orderContacts = new OrderContacts();
  89. $getOrderCon = $orderContacts->getRowByOrderId($refundInfo['order_id']);
  90. $reMsg = '';
  91. if (empty($getOrderCon['contacts_phone'])) {
  92. $reMsg = '无联系人手机号!';
  93. } else {
  94. $siteConfig = Util::getSiteConfig();
  95. $msg = "您申请的¥{$params['refund_fee']}退款已经通过审核,预计一个工作日内会退还到您的付款账户,请留意查收。如有问题,可拨打客服热线:" . $siteConfig['kefu_tel'];
  96. $sendMsg = Util::sendMessage($msg, $getOrderCon['contacts_phone']);
  97. if ($sendMsg['flag'] == false) {
  98. $reMsg = '发送短信通知失败!';
  99. }
  100. }
  101. $transaction->commit();
  102. //发送通知
  103. if ($refundInfo['pay_type'] == 1) {//如果是微信支付 发送退款通知 不论 成功失败
  104. Util::sendWxMsg(['type' => 2, 'order_id' => $refundInfo['order_id'], 'money' => $refundInfo['refush_money']]);
  105. }
  106. return Util::returnArrSu($refundInfo['order_id'] . '退款成功!' . $reMsg);
  107. } catch (Exception $e) {
  108. $transaction->rollBack();//回滚
  109. return Util::returnArrEr($refundInfo['order_id'] . '退款失败!程序异常!');
  110. }
  111. }
  112. }