member_refund.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. <?php
  2. /**
  3. * 会员退款退货
  4. *
  5. *
  6. *
  7. * 全部退款,单个商品退货
  8. *
  9. */
  10. //use Shopnc\Tpl;
  11. defined('InShopNC') or exit('Access Invalid!');
  12. require_once(BASE_ROOT_PATH . '/helper/order_helper.php');
  13. class member_refundControl extends mbMemberControl
  14. {
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. }
  19. public function listOp()
  20. {
  21. $helper = new refund_helper($_SESSION['member_id']);
  22. $refund_list = $helper->list_all($this->page_size(),$total_page);
  23. return self::outsuccess(array('refunds' => $refund_list,'mobile_page' => mobile_page($total_page)));
  24. }
  25. public function viewOp()
  26. {
  27. $refund_id = $_GET['refund_id'];
  28. if (!isset($refund_id)) {
  29. return self::outerr(errcode::ErrParamter);
  30. }
  31. $helper = new refund_helper($_SESSION['member_id']);
  32. $refund = $helper->view($refund_id,$err);
  33. if($refund == false) {
  34. return self::outerr($err['code'],$err['msg']);
  35. }
  36. else
  37. {
  38. $order = $this->get_order(array('order_id' => $refund['order_id'],'buyer_id' => $_SESSION['member_id']));
  39. if($order == false) {
  40. return self::outerr(errcode::ErrParamter,"查不到该订单");
  41. } else {
  42. return self::outsuccess(array('refund' => $refund,'order' => $order));
  43. }
  44. }
  45. }
  46. public function order_refundOp()
  47. {
  48. $order_sn = $_GET['order_sn'];
  49. if(!isset($order_sn) || empty($order_sn)) {
  50. return self::outerr(errcode::ErrParamter);
  51. }
  52. $helper = new refund_helper($_SESSION['member_id']);
  53. $refund_id = $helper->refund($order_sn,$err);
  54. if($refund_id == false) {
  55. return self::outerr($err['code'],$err['msg']);
  56. }
  57. else
  58. {
  59. $order = $this->get_order(array('order_sn' =>$order_sn,'buyer_id' => $_SESSION['member_id']));
  60. if($order == false) {
  61. return self::outerr(errcode::ErrParamter,"查不到该订单");
  62. } else {
  63. return self::outsuccess(array('order' => $order));
  64. }
  65. }
  66. }
  67. public function return_infoOp()
  68. {
  69. $order_sn = $_GET['order_sn'];
  70. $rec_id = intval($_GET['rec_id']);
  71. if(empty($order_sn) || $rec_id <= 0) {
  72. return self::outerr(errcode::ErrParamter);
  73. }
  74. $helper = new refund_helper($_SESSION['member_id']);
  75. $ret = $helper->return_info($order_sn,$rec_id,$err);
  76. if($ret == false) {
  77. return self::outerr($err['code'],$err['msg']);
  78. }
  79. else
  80. {
  81. $reason_list = $ret['reason_list'];
  82. $goods_pay_price = doubleval($ret['goods']['goods_pay_price']);
  83. $order = $this->get_order(array('order_sn' =>$order_sn,'buyer_id' => $_SESSION['member_id']));
  84. if ($order != false)
  85. {
  86. $order_goods = &$order['order_goods'];
  87. foreach ($order_goods as &$item)
  88. {
  89. if($item['rec_id'] == $rec_id) {
  90. $item['goods_pay_price'] = $goods_pay_price;
  91. break;
  92. }
  93. }
  94. return self::outsuccess(array("reason_list" => $reason_list,'rec_id' => $rec_id,'order' => $order));
  95. }
  96. else
  97. {
  98. return self::outerr(errcode::ErrParamter,"查不到该订单");
  99. }
  100. }
  101. }
  102. public function goods_returnOp()
  103. {
  104. $order_sn = $_GET['order_sn'];
  105. $rec_id = intval($_GET['rec_id']);
  106. $buyer_msg = isset($_GET['buyer_message']) ? remove_tags(urldecode($_GET['buyer_message'])) : '';
  107. $goods_num = intval($_GET['goods_num']);
  108. $refund_amount = doubleval($_GET['refund_amount']);
  109. $reason_id = intval($_GET['reason_id']);//退货退款原因
  110. if(empty($order_sn) || $rec_id <= 0) {
  111. return self::outerr(errcode::ErrParamter);
  112. }
  113. $helper = new refund_helper($_SESSION['member_id']);
  114. $ret = $helper->return_goods($order_sn,$rec_id,$goods_num,$refund_amount,$reason_id,$buyer_msg,$err);
  115. if($ret == false) {
  116. return self::outerr($err['code'],$err['msg']);
  117. }
  118. else
  119. {
  120. $order = $this->get_order(array('order_sn' =>$order_sn,'buyer_id' => $_SESSION['member_id']));
  121. if($order == false) {
  122. return self::outerr(errcode::ErrParamter,"查不到该订单");
  123. } else {
  124. return self::outsuccess(array('order' => $order));
  125. }
  126. }
  127. }
  128. public function shipOp()
  129. {
  130. $refund_id = intval($_GET['refund_id']);
  131. $ship_code = remove_tags(urldecode($_GET['shipping_code']));
  132. $express_id = intval($_GET['express_id']);
  133. if($refund_id <= 0 || empty($ship_code)) {
  134. return self::outerr(errcode::ErrParamter);
  135. }
  136. $helper = new refund_helper($_SESSION['member_id']);
  137. $ret = $helper->ship($refund_id,$express_id,$ship_code,$err);
  138. if($ret == true) {
  139. return self::outsuccess(NULL);
  140. } else {
  141. return self::outerr($err['code'],$err['msg']);
  142. }
  143. }
  144. private function get_order($condition)
  145. {
  146. $model_order = Model('order');
  147. $order_list = $model_order->getNormalOrderList($condition, $this->page_size, '*', 'order_id desc', '', array('order_common','order_address', 'order_goods'));
  148. $order_helper = new order_helper($order_list);
  149. $orders = $order_helper->format();
  150. $model_order->cls();
  151. if(!empty($orders)) {
  152. return $orders[0];
  153. } else {
  154. return false;
  155. }
  156. }
  157. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  158. /**
  159. * 向商家添加全部退款请求,即付完款后取消订单
  160. */
  161. public function add_refund_allOp()
  162. {
  163. $order_info = Model('order')->getOrderInfo(array('order_sn' => $_GET['order_sn']));
  164. if (empty($order_info)) {
  165. return self::outerr(errcode::ErrOrderNotExist);
  166. }
  167. $model_refund = Model('refund_return');
  168. $order_id = intval($order_info['order_id']);
  169. $order = $model_refund->getRightOrderList(array('buyer_id' => $_SESSION['member_id'], 'order_id' => $order_id));
  170. $order_amount = $order['order_amount'];//订单金额
  171. $condition = array();
  172. {
  173. $condition['buyer_id'] = $order['buyer
  174. _id'];
  175. $condition['order_id'] = $order['order_id'];
  176. $condition['goods_id'] = '0';
  177. $condition['seller_state'] = array('lt', '3'); //状态:1为待审核,2为同意,3为不同意
  178. }
  179. $refund_list = $model_refund->getRefundReturnList($condition);
  180. $refund = array();
  181. if (!empty($refund_list) && is_array($refund_list)) {
  182. $refund = $refund_list[0];
  183. }
  184. $model_trade = Model('trade');
  185. $order_paid = $model_trade->getOrderState('order_paid');//订单状态20:已付款
  186. $payment_code = $order['payment_code'];//支付方式
  187. if ($refund['refund_id'] > 0 || $order['order_state'] != $order_paid || $payment_code == 'offline') {//检查订单状态,防止页面刷新不及时造成数据错误
  188. return self::outerr(errcode::ErrOrderState, "只有付完款尚未发货的时才能退款。");
  189. }
  190. $refund_array = array();
  191. $refund_array['refund_type'] = '1'; //类型:1为退款,2为退货
  192. $refund_array['seller_state'] = '1';//状态:1为待审核,2为同意,3为不同意
  193. $refund_array['order_lock'] = '2'; //锁定类型:1为不用锁定,2为需要锁定
  194. $refund_array['goods_id'] = '0';
  195. $refund_array['order_goods_id'] = '0';
  196. $refund_array['reason_id'] = '0';
  197. $refund_array['reason_info'] = '取消订单,全部退款';
  198. $refund_array['goods_name'] = '订单商品全部退款';
  199. $refund_array['refund_amount'] = ncPriceFormat($order_amount);
  200. $refund_array['buyer_message'] = remove_tags(urldecode($_POST['buyer_message']));
  201. $refund_array['add_time'] = time();
  202. $pic_array = array();
  203. $pic_array['buyer'] = array();
  204. $refund_array['pic_info'] = serialize($pic_array);
  205. $refund_id = $model_refund->addRefundReturn($refund_array, $order);
  206. if ($refund_id) {
  207. $model_refund->editOrderLock($order_id);
  208. return self::outsuccess(array("ret" => 1, "refund_id" => $refund_id, "order_sn" => $_GET['order_sn']));
  209. } else {
  210. return self::outerr(errcode::ErrOrderRefundError, "退款失败.");
  211. }
  212. }
  213. //该函数用来返回退款具体信息。已经付款,未发货时退款,退货。
  214. public function refund_one_infoOp()
  215. {
  216. $order_info = Model('order')->getOrderInfo(array('order_sn' => $_GET['order_sn']));
  217. if (empty($order_info)) {
  218. return self::outerr(errcode::ErrOrderNotExist);
  219. }
  220. $order_id = intval($order_info['order_id']);
  221. $order_goods_id = intval($_GET['order_goods_id']);//订单商品表编号
  222. if ($order_id < 1 || $order_goods_id < 1) { //参数验证
  223. return self::outerr(errcode::ErrParamter, "商品参数错误.");
  224. }
  225. $model_refund = Model('refund_return');
  226. $condition = array();
  227. $reason_data = $model_refund->getReasonList($condition, '', '', 'reason_id,reason_info');//退款退货原因
  228. foreach ($reason_data as $data) {
  229. $reason_list[] = $data;
  230. }
  231. array_push($reason_list, array('reason_id' => 0, 'reason_info' => '其他'));
  232. $condition = array();
  233. $condition['buyer_id'] = $_SESSION['member_id'];
  234. $condition['order_id'] = $order_id;
  235. $order = $model_refund->getRightOrderList($condition, $order_goods_id);
  236. $order_amount = $order['order_amount'];//订单金额
  237. $order_refund_amount = $order['refund_amount'];//订单退款金额
  238. $goods_list = $order['goods_list'];
  239. $goods = $goods_list[0];
  240. $goods_pay_price = $goods['goods_pay_price'];//商品实际成交价
  241. if ($order_amount < ($goods_pay_price + $order_refund_amount)) {
  242. $goods_pay_price = $order_amount - $order_refund_amount;
  243. $goods['goods_pay_price'] = $goods_pay_price;
  244. }
  245. $goods_id = $goods['rec_id'];
  246. $condition = array();
  247. $condition['buyer_id'] = $order['buyer_id'];
  248. $condition['order_id'] = $order['order_id'];
  249. $condition['order_goods_id'] = $goods_id;
  250. $condition['seller_state'] = array('lt', '3');
  251. $refund_list = $model_refund->getRefundReturnList($condition);
  252. $refund = array();
  253. if (!empty($refund_list) && is_array($refund_list)) {
  254. $refund = $refund_list[0];
  255. }
  256. $refund_state = $model_refund->getRefundState($order);//根据订单状态判断是否可以退款退货
  257. if ($refund['refund_id'] > 0) {
  258. return self::outerr(errcode::ErrOrderRefundError, "不能重复退货.");
  259. }
  260. if ($refund_state != 1) {
  261. return self::outerr(errcode::ErrOrderState, '请确认订单状态,在已经付款后才能退款,已经发货后才能退货.');
  262. }
  263. $goods['goods_image'] = cthumb($goods['goods_image'], 360, $order_info['store_id']);
  264. $goods['order_goods_id'] = $order_goods_id;
  265. return self::outsuccess(array('ret' => 1, 'reason_list' => (array)$reason_list, 'goods' => $goods));
  266. }
  267. //已经付款,未发货时退款,退货。只能单品退款
  268. public function add_refund_oneOp()
  269. {
  270. // if(!isset($_GET['refund_type']) || empty($_GET['refund_type'])
  271. // || !in_array($_GET['refund_type'],self::$refund_type))
  272. // {
  273. // return self::outerr(errcode::ErrParamter,"请使用正确的退款类型,1:退款,2:退货.");
  274. //}
  275. //$refund_type = $_GET['refund_type'];
  276. $order_info = Model('order')->getOrderInfo(array('order_sn' => $_GET['order_sn']));
  277. if (empty($order_info)) {
  278. return self::outerr(errcode::ErrOrderNotExist);
  279. }
  280. $order_id = $order_info['order_id'];
  281. $order_goods_id = intval($_GET['order_goods_id']);//订单商品表编号
  282. if ($order_id < 1 || $order_goods_id < 1) { //参数验证
  283. return self::outerr(errcode::ErrParamter, "商品参数错误.");
  284. }
  285. $buyer_msg = isset($_GET['buyer_message']) ? remove_tags(urldecode($_GET['buyer_message'])) : '';
  286. $model_refund = Model('refund_return');
  287. $reason_list = $model_refund->getReasonList();//退款退货原因
  288. $reason_id = intval($_POST['reason_id']);//退货退款原因
  289. $reson_info = '其他';
  290. if (!empty($reason_list[$reason_id])) {
  291. $reason_array = $reason_list[$reason_id];
  292. $reson_info = $reason_array['reason_info'];
  293. }
  294. $goods_num = intval($_POST['goods_num']);//退货数量
  295. $refund_amount = doubleval($_POST['refund_amount']);//退款金额
  296. ////////////////////////////////////////////////////////////////
  297. $condition = array();
  298. $condition['buyer_id'] = $_SESSION['member_id'];
  299. $condition['order_id'] = $order_id;
  300. $order = $model_refund->getRightOrderList($condition, $order_goods_id);
  301. $order_id = $order['order_id'];
  302. $order_amount = $order['order_amount'];//订单金额
  303. $order_refund_amount = $order['refund_amount'];//订单退款金额
  304. $goods_list = $order['goods_list'];
  305. $goods = $goods_list[0];
  306. $goods_pay_price = $goods['goods_pay_price'];//商品实际成交价
  307. if ($order_amount < ($goods_pay_price + $order_refund_amount)) {
  308. $goods_pay_price = $order_amount - $order_refund_amount;
  309. $goods['goods_pay_price'] = $goods_pay_price;
  310. }
  311. $goods_id = $goods['rec_id'];
  312. $condition = array();
  313. $condition['buyer_id'] = $order['buyer_id'];
  314. $condition['order_id'] = $order['order_id'];
  315. $condition['order_goods_id'] = $goods_id;
  316. $condition['seller_state'] = array('lt', '3');
  317. $refund_list = $model_refund->getRefundReturnList($condition);
  318. $refund = array();
  319. if (!empty($refund_list) && is_array($refund_list)) {
  320. $refund = $refund_list[0];
  321. }
  322. $refund_state = $model_refund->getRefundState($order);//根据订单状态判断是否可以退款退货
  323. if ($refund['refund_id'] > 0 || $refund_state != 1) {//检查订单状态,防止页面刷新不及时造成数据错误
  324. return self::outerr(errcode::ErrOrderState);
  325. }
  326. $refund_array = array();
  327. if (($refund_amount < 0) || ($refund_amount > $goods_pay_price)) {
  328. $refund_amount = $goods_pay_price;
  329. }
  330. if (($goods_num < 0) || ($goods_num > $goods['goods_num'])) {
  331. $goods_num = 1;
  332. }
  333. $refund_array['reason_info'] = $reson_info;
  334. $refund_array['reason_id'] = $reason_id;
  335. $refund_array['pic_info'] = serialize(array('buyer' => array()));
  336. $model_trade = Model('trade');
  337. $order_shipped = $model_trade->getOrderState('order_shipped');//订单状态30:已发货
  338. if ($order['order_state'] == $order_shipped) {
  339. $refund_array['order_lock'] = '2';//锁定类型:1为不用锁定,2为需要锁定
  340. }
  341. $refund_array['refund_type'] = 2;//类型:1为退款,2为退货
  342. $refund_array['return_type'] = '2';//退货类型:1为不用退货,2为需要退货
  343. if ($refund_array['refund_type'] != '2') {
  344. $refund_array['refund_type'] = '1';
  345. $refund_array['return_type'] = '1';
  346. }
  347. $refund_array['seller_state'] = '1';//状态:1为待审核,2为同意,3为不同意
  348. $refund_array['refund_amount'] = ncPriceFormat($refund_amount);
  349. $refund_array['goods_num'] = $goods_num;
  350. $refund_array['buyer_message'] = $buyer_msg;
  351. $refund_array['add_time'] = time();
  352. $refund_id = $model_refund->addRefundReturn($refund_array, $order, $goods);
  353. if ($refund_id) {
  354. if ($order['order_state'] == $order_shipped) {
  355. $model_refund->editOrderLock($order_id);
  356. }
  357. return self::outsuccess(array('ret' => 1, "refund_id" => $refund_id, "order_sn" => $_GET['order_sn'], "order_goods_id" => $_GET['order_goods_id']));
  358. } else {
  359. return self::outerr(errcode::ErrOrderRefundError, "退货失败.");
  360. }
  361. }
  362. /**
  363. * 退款或退货退款记录详情
  364. */
  365. public function refund_viewOp()
  366. {
  367. if (!isset($_GET['refund_id']) || empty($_GET['refund_id'])) {
  368. return self::outerr(errcode::ErrParamter, "记录参数有误");
  369. }
  370. $model_refund = Model('refund_return');
  371. $condition = array();
  372. $condition['buyer_id'] = $_SESSION['member_id'];
  373. $condition['refund_id'] = intval($_GET['refund_id']);
  374. $condition['seller_state'] = array('lt', '3'); //状态:1为待审核,2为同意,3为不同意
  375. $refund_fields = 'refund_id,order_id,order_sn,order_goods_id,add_time,refund_type,return_type,seller_time,ship_time,admin_time';
  376. $refund_list = $model_refund->getRefundReturnList($condition, '', $refund_fields);
  377. if (empty($refund_list)) {
  378. return self::outerr(errcode::ErrOrderState);
  379. }
  380. $refund = $refund_list[0];
  381. $refund['refund_state'] = $model_refund->getRefundStatueApp($refund);
  382. // $refund['return_type']);
  383. unset($refund['seller_time']);
  384. unset($refund['ship_time']);
  385. unset($refund['admin_time']);
  386. $model_order = Model('order');
  387. $condition = array();
  388. $condition['order_id'] = $refund['order_id'];
  389. $condition['rec_id'] = $refund['order_goods_id'];
  390. $good_fields = 'goods_id,goods_name,goods_price,goods_num,goods_image,goods_pay_price,goods_type,commis_rate,gc_id,goods_spec';
  391. $refund['good_list'] = $model_order->getOrderGoodsList($condition, $good_fields);
  392. return self::outsuccess(array('refund' => $refund));
  393. }
  394. /**
  395. * 用户发货
  396. */
  397. public function refund_shipOp()
  398. {
  399. $model_refund = Model('refund_return');
  400. $condition = array();
  401. $condition['buyer_id'] = $_SESSION['member_id'];
  402. $condition['refund_id'] = intval($_GET['refund_id']);
  403. $return_list = $model_refund->getReturnList($condition);
  404. $return = $return_list[0];
  405. if ($return['seller_state'] != '2' || $return['goods_state'] != '1') {//检查状态,防止页面刷新不及时造成数据错误
  406. return self::outerr(errcode::ErrFrequentlyRequest, "该申请已发货");
  407. }
  408. $refund_array = array();
  409. $refund_array['ship_time'] = time();
  410. $refund_array['delay_time'] = time();
  411. // $refund_array['express_id'] = $_POST['express_id'];
  412. $refund_array['invoice_no'] = remove_tags(urldecode($_POST['invoice_no']));
  413. $refund_array['goods_state'] = '2';
  414. $state = $model_refund->editRefundReturn($condition, $refund_array);
  415. if ($state) {
  416. return self::outsuccess(array('ret' => 1));
  417. } else {
  418. return self::outerr(errcode::ErrOrderRefundError, "发货失败.");
  419. }
  420. }
  421. }