member_refund.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. <?php
  2. /**
  3. * 会员退款退货
  4. *
  5. *
  6. *
  7. * 全部退款,单个商品退货
  8. *
  9. */
  10. //use Shopnc\Tpl;
  11. defined('InShopNC') or exit('Access Invalid!');
  12. class member_refundControl extends mbMemberControl
  13. {
  14. //static private $refund_type = array('1', '2');
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. }
  19. /**
  20. * 向商家添加全部退款请求,即付完款后取消订单
  21. */
  22. public function add_refund_allOp()
  23. {
  24. $order_info = Model('order')->getOrderInfo(array('order_sn' => $_GET['order_sn']));
  25. if (empty($order_info)) {
  26. return self::outerr(errcode::ErrOrderNotExist);
  27. }
  28. $model_refund = Model('refund_return');
  29. $order_id = intval($order_info['order_id']);
  30. $order = $model_refund->getRightOrderList(array('buyer_id' => $_SESSION['member_id'], 'order_id' => $order_id));
  31. $order_amount = $order['order_amount'];//订单金额
  32. $condition = array();
  33. {
  34. $condition['buyer_id'] = $order['buyer_id'];
  35. $condition['order_id'] = $order['order_id'];
  36. $condition['goods_id'] = '0';
  37. $condition['seller_state'] = array('lt', '3'); //状态:1为待审核,2为同意,3为不同意
  38. }
  39. $refund_list = $model_refund->getRefundReturnList($condition);
  40. $refund = array();
  41. if (!empty($refund_list) && is_array($refund_list)) {
  42. $refund = $refund_list[0];
  43. }
  44. $model_trade = Model('trade');
  45. $order_paid = $model_trade->getOrderState('order_paid');//订单状态20:已付款
  46. $payment_code = $order['payment_code'];//支付方式
  47. if ($refund['refund_id'] > 0 || $order['order_state'] != $order_paid || $payment_code == 'offline') {//检查订单状态,防止页面刷新不及时造成数据错误
  48. return self::outerr(errcode::ErrOrderState, "只有付完款尚未发货的时才能退款。");
  49. }
  50. $refund_array = array();
  51. $refund_array['refund_type'] = '1'; //类型:1为退款,2为退货
  52. $refund_array['seller_state'] = '1';//状态:1为待审核,2为同意,3为不同意
  53. $refund_array['order_lock'] = '2'; //锁定类型:1为不用锁定,2为需要锁定
  54. $refund_array['goods_id'] = '0';
  55. $refund_array['order_goods_id'] = '0';
  56. $refund_array['reason_id'] = '0';
  57. $refund_array['reason_info'] = '取消订单,全部退款';
  58. $refund_array['goods_name'] = '订单商品全部退款';
  59. $refund_array['refund_amount'] = ncPriceFormat($order_amount);
  60. $refund_array['buyer_message'] = remove_tags(urldecode($_POST['buyer_message']));
  61. $refund_array['add_time'] = time();
  62. $pic_array = array();
  63. $pic_array['buyer'] = array();
  64. $refund_array['pic_info'] = serialize($pic_array);
  65. $refund_id = $model_refund->addRefundReturn($refund_array, $order);
  66. if ($refund_id) {
  67. $model_refund->editOrderLock($order_id);
  68. return self::outsuccess(array("ret" => 1, "refund_id" => $refund_id, "order_sn" => $_GET['order_sn']));
  69. } else {
  70. return self::outerr(errcode::ErrOrderRefundError, "退款失败.");
  71. }
  72. }
  73. //该函数用来返回退款具体信息。已经付款,未发货时退款,退货。
  74. public function refund_one_infoOp()
  75. {
  76. $order_info = Model('order')->getOrderInfo(array('order_sn' => $_GET['order_sn']));
  77. if (empty($order_info)) {
  78. return self::outerr(errcode::ErrOrderNotExist);
  79. }
  80. $order_id = intval($order_info['order_id']);
  81. $order_goods_id = intval($_GET['order_goods_id']);//订单商品表编号
  82. if ($order_id < 1 || $order_goods_id < 1) { //参数验证
  83. return self::outerr(errcode::ErrParamter, "商品参数错误.");
  84. }
  85. $model_refund = Model('refund_return');
  86. $condition = array();
  87. $reason_data = $model_refund->getReasonList($condition, '', '', 'reason_id,reason_info');//退款退货原因
  88. foreach ($reason_data as $data) {
  89. $reason_list[] = $data;
  90. }
  91. array_push($reason_list, array('reason_id' => 0, 'reason_info' => '其他'));
  92. $condition = array();
  93. $condition['buyer_id'] = $_SESSION['member_id'];
  94. $condition['order_id'] = $order_id;
  95. $order = $model_refund->getRightOrderList($condition, $order_goods_id);
  96. $order_amount = $order['order_amount'];//订单金额
  97. $order_refund_amount = $order['refund_amount'];//订单退款金额
  98. $goods_list = $order['goods_list'];
  99. $goods = $goods_list[0];
  100. $goods_pay_price = $goods['goods_pay_price'];//商品实际成交价
  101. if ($order_amount < ($goods_pay_price + $order_refund_amount)) {
  102. $goods_pay_price = $order_amount - $order_refund_amount;
  103. $goods['goods_pay_price'] = $goods_pay_price;
  104. }
  105. $goods_id = $goods['rec_id'];
  106. $condition = array();
  107. $condition['buyer_id'] = $order['buyer_id'];
  108. $condition['order_id'] = $order['order_id'];
  109. $condition['order_goods_id'] = $goods_id;
  110. $condition['seller_state'] = array('lt', '3');
  111. $refund_list = $model_refund->getRefundReturnList($condition);
  112. $refund = array();
  113. if (!empty($refund_list) && is_array($refund_list)) {
  114. $refund = $refund_list[0];
  115. }
  116. $refund_state = $model_refund->getRefundState($order);//根据订单状态判断是否可以退款退货
  117. if ($refund['refund_id'] > 0) {
  118. return self::outerr(errcode::ErrOrderRefundError, "不能重复退货.");
  119. }
  120. if ($refund_state != 1) {
  121. return self::outerr(errcode::ErrOrderState, '请确认订单状态,在已经付款后才能退款,已经发货后才能退货.');
  122. }
  123. $goods['goods_image'] = cthumb($goods['goods_image'], 360, $order_info['store_id']);
  124. $goods['order_goods_id'] = $order_goods_id;
  125. return self::outsuccess(array('ret' => 1, 'reason_list' => (array)$reason_list, 'goods' => $goods));
  126. }
  127. //已经付款,未发货时退款,退货。只能单品退款
  128. public function add_refund_oneOp()
  129. {
  130. // if(!isset($_GET['refund_type']) || empty($_GET['refund_type'])
  131. // || !in_array($_GET['refund_type'],self::$refund_type))
  132. // {
  133. // return self::outerr(errcode::ErrParamter,"请使用正确的退款类型,1:退款,2:退货.");
  134. //}
  135. //$refund_type = $_GET['refund_type'];
  136. $order_info = Model('order')->getOrderInfo(array('order_sn' => $_GET['order_sn']));
  137. if (empty($order_info)) {
  138. return self::outerr(errcode::ErrOrderNotExist);
  139. }
  140. $order_id = $order_info['order_id'];
  141. $order_goods_id = intval($_GET['order_goods_id']);//订单商品表编号
  142. if ($order_id < 1 || $order_goods_id < 1) { //参数验证
  143. return self::outerr(errcode::ErrParamter, "商品参数错误.");
  144. }
  145. $buyer_msg = isset($_GET['buyer_message']) ? remove_tags(urldecode($_GET['buyer_message'])) : '';
  146. $model_refund = Model('refund_return');
  147. $reason_list = $model_refund->getReasonList();//退款退货原因
  148. $reason_id = intval($_POST['reason_id']);//退货退款原因
  149. $reson_info = '其他';
  150. if (!empty($reason_list[$reason_id])) {
  151. $reason_array = $reason_list[$reason_id];
  152. $reson_info = $reason_array['reason_info'];
  153. }
  154. $goods_num = intval($_POST['goods_num']);//退货数量
  155. $refund_amount = floatval($_POST['refund_amount']);//退款金额
  156. ////////////////////////////////////////////////////////////////
  157. $condition = array();
  158. $condition['buyer_id'] = $_SESSION['member_id'];
  159. $condition['order_id'] = $order_id;
  160. $order = $model_refund->getRightOrderList($condition, $order_goods_id);
  161. $order_id = $order['order_id'];
  162. $order_amount = $order['order_amount'];//订单金额
  163. $order_refund_amount = $order['refund_amount'];//订单退款金额
  164. $goods_list = $order['goods_list'];
  165. $goods = $goods_list[0];
  166. $goods_pay_price = $goods['goods_pay_price'];//商品实际成交价
  167. if ($order_amount < ($goods_pay_price + $order_refund_amount)) {
  168. $goods_pay_price = $order_amount - $order_refund_amount;
  169. $goods['goods_pay_price'] = $goods_pay_price;
  170. }
  171. $goods_id = $goods['rec_id'];
  172. $condition = array();
  173. $condition['buyer_id'] = $order['buyer_id'];
  174. $condition['order_id'] = $order['order_id'];
  175. $condition['order_goods_id'] = $goods_id;
  176. $condition['seller_state'] = array('lt', '3');
  177. $refund_list = $model_refund->getRefundReturnList($condition);
  178. $refund = array();
  179. if (!empty($refund_list) && is_array($refund_list)) {
  180. $refund = $refund_list[0];
  181. }
  182. $refund_state = $model_refund->getRefundState($order);//根据订单状态判断是否可以退款退货
  183. if ($refund['refund_id'] > 0 || $refund_state != 1) {//检查订单状态,防止页面刷新不及时造成数据错误
  184. return self::outerr(errcode::ErrOrderState);
  185. }
  186. $refund_array = array();
  187. if (($refund_amount < 0) || ($refund_amount > $goods_pay_price)) {
  188. $refund_amount = $goods_pay_price;
  189. }
  190. if (($goods_num < 0) || ($goods_num > $goods['goods_num'])) {
  191. $goods_num = 1;
  192. }
  193. $refund_array['reason_info'] = $reson_info;
  194. $refund_array['reason_id'] = $reason_id;
  195. $refund_array['pic_info'] = serialize(array('buyer' => array()));
  196. $model_trade = Model('trade');
  197. $order_shipped = $model_trade->getOrderState('order_shipped');//订单状态30:已发货
  198. if ($order['order_state'] == $order_shipped) {
  199. $refund_array['order_lock'] = '2';//锁定类型:1为不用锁定,2为需要锁定
  200. }
  201. $refund_array['refund_type'] = 2;//类型:1为退款,2为退货
  202. $refund_array['return_type'] = '2';//退货类型:1为不用退货,2为需要退货
  203. if ($refund_array['refund_type'] != '2') {
  204. $refund_array['refund_type'] = '1';
  205. $refund_array['return_type'] = '1';
  206. }
  207. $refund_array['seller_state'] = '1';//状态:1为待审核,2为同意,3为不同意
  208. $refund_array['refund_amount'] = ncPriceFormat($refund_amount);
  209. $refund_array['goods_num'] = $goods_num;
  210. $refund_array['buyer_message'] = $buyer_msg;
  211. $refund_array['add_time'] = time();
  212. $refund_id = $model_refund->addRefundReturn($refund_array, $order, $goods);
  213. if ($refund_id) {
  214. if ($order['order_state'] == $order_shipped) {
  215. $model_refund->editOrderLock($order_id);
  216. }
  217. return self::outsuccess(array('ret' => 1, "refund_id" => $refund_id, "order_sn" => $_GET['order_sn'], "order_goods_id" => $_GET['order_goods_id']));
  218. } else {
  219. return self::outerr(errcode::ErrOrderRefundError, "退货失败.");
  220. }
  221. }
  222. /**
  223. * 退款或退货退款记录详情
  224. */
  225. public function refund_viewOp()
  226. {
  227. if (!isset($_GET['refund_id']) || empty($_GET['refund_id'])) {
  228. return self::outerr(errcode::ErrParamter, "记录参数有误");
  229. }
  230. $model_refund = Model('refund_return');
  231. $condition = array();
  232. $condition['buyer_id'] = $_SESSION['member_id'];
  233. $condition['refund_id'] = intval($_GET['refund_id']);
  234. $condition['seller_state'] = array('lt', '3'); //状态:1为待审核,2为同意,3为不同意
  235. $refund_fields = 'refund_id,order_id,order_sn,order_goods_id,add_time,refund_type,return_type,seller_time,ship_time,admin_time';
  236. $refund_list = $model_refund->getRefundReturnList($condition, '', $refund_fields);
  237. if (empty($refund_list)) {
  238. return self::outerr(errcode::ErrOrderState);
  239. }
  240. $refund = $refund_list[0];
  241. $refund['refund_state'] = $model_refund->getRefundStatueApp($refund);
  242. // $refund['return_type']);
  243. unset($refund['seller_time']);
  244. unset($refund['ship_time']);
  245. unset($refund['admin_time']);
  246. $model_order = Model('order');
  247. $condition = array();
  248. $condition['order_id'] = $refund['order_id'];
  249. $condition['rec_id'] = $refund['order_goods_id'];
  250. $good_fields = 'goods_id,goods_name,goods_price,goods_num,goods_image,goods_pay_price,goods_type,commis_rate,gc_id,goods_spec';
  251. $refund['good_list'] = $model_order->getOrderGoodsList($condition, $good_fields);
  252. return self::outsuccess(array('refund' => $refund));
  253. }
  254. /**
  255. * 用户发货
  256. */
  257. public function refund_shipOp()
  258. {
  259. $model_refund = Model('refund_return');
  260. $condition = array();
  261. $condition['buyer_id'] = $_SESSION['member_id'];
  262. $condition['refund_id'] = intval($_GET['refund_id']);
  263. $return_list = $model_refund->getReturnList($condition);
  264. $return = $return_list[0];
  265. if ($return['seller_state'] != '2' || $return['goods_state'] != '1') {//检查状态,防止页面刷新不及时造成数据错误
  266. return self::outerr(errcode::ErrFrequentlyRequest, "该申请已发货");
  267. }
  268. $refund_array = array();
  269. $refund_array['ship_time'] = time();
  270. $refund_array['delay_time'] = time();
  271. // $refund_array['express_id'] = $_POST['express_id'];
  272. $refund_array['invoice_no'] = remove_tags(urldecode($_POST['invoice_no']));
  273. $refund_array['goods_state'] = '2';
  274. $state = $model_refund->editRefundReturn($condition, $refund_array);
  275. if ($state) {
  276. return self::outsuccess(array('ret' => 1));
  277. } else {
  278. return self::outerr(errcode::ErrOrderRefundError, "发货失败.");
  279. }
  280. }
  281. }