member_refund.php 20 KB

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