index.html
<a class="btn btn-danger btn-change btn-tuikuan btn-disabled" href="javascript:;"><i class="fa fa-tuikuan"></i> 订单退款</a>-->
order.js
// 为表格绑定事件Table.api.bindevent(table);//退款按钮$(document).on("click", ".btn-tuikuan", function () {//在table外不可以使用添加.btn-change的方法//只能自己调用Table.api.multi实现//如果操作全部则ids可以置为空Layer.confirm(__('确定要对此订单退款吗?'), {icon: 3,title: '提示'}, function (index) {var ids = Table.api.selectedids(table);Backend.api.ajax({url: "daren/Daren_order/tuikuan",data: {ids: ids.join(","),table: "daren_order"}}, function () {$(".btn-refresh").trigger("click");});Layer.close(index);});});
/*** 启用*/public function tuikuan($ids = '',$table = ""){$roomid = explode(',',$ids);if(empty($table)) $this->error("参数请求错误");if(count($roomid)>1) $this->error("请选择一条订单操作");if(strcasecmp($table,'user_yecz_order')==0){$order = Db::name($table)->where('id',$roomid[0])->find();if(empty($order)) $this->error("订单不存在");if(strcasecmp($order['order_status'],'1')==0) $this->error("订单未付款");if(strcasecmp($order['order_status'],'9')==0) $this->error("订单已取消");$user = Db::name('user')->where('id',$order['user_id'])->find();if($order['money']>$user['money']){$this->error("会员余额不足");}$order['ddfy'] = $order['money'];$updata = ['order_status'=>'10'];}else{$order = Db::name($table)->where('id',$roomid[0])->find();if(empty($order)) $this->error("订单不存在");if(strcasecmp($order['status'],'1')==0) $this->error("订单未付款");if(strcasecmp($order['status'],'9')==0) $this->error("订单已取消");if(strcasecmp($order['status'],'10')==0) $this->error("订单已退款");$updata = ['status'=>'10'];}$refund_order = ['refund_no' => \CommonFunction::createShopOrderSn('refund_order','TK'),'order_sn' =>$order['order_sn'],'total_fee' =>$order['ddfy'],'refund_fee' =>$order['ddfy'],'order_type' =>'1','refund_status' =>'0','createtime'=>time(),];$refund_order['id'] = Db::name('refund_order')->insertGetId($refund_order);if(strcasecmp($order['paytype'],'2')==0){$rel = $this->wechatRefund($order,$refund_order,$table,$updata);}else{$rel = $this->yueRefund($order,$refund_order,$table,$updata);}if($rel['code']){$this->success($rel['msg']);}else{$this->error($rel['msg']);}}private function wechatRefund($order,$refund_order,$table,$updata){$site = Config::get("site");require dirname(dirname(dirname(dirname(__FILE__))))."/api/vendor/wechat-developer/include.php";$config = ['appid' => $site['appid'],'appsecret' => $site['appsecret'],// 配置商户支付参数(可选,在使用支付功能时需要)'mch_id' => $site['shh'],'mch_key' => $site['shmy'],'ssl_key' => dirname(dirname(dirname(dirname(__FILE__))))."/api/vendor/apiclient_key.pem",'ssl_cer' => dirname(dirname(dirname(dirname(__FILE__))))."/api/vendor/apiclient_cert.pem",// 缓存目录配置(可选,需拥有读写权限)'cache_path' => '',];// 创建接口实例$wechat = new \WeChat\Pay($config);// 构造退款请求参数$options = ['out_trade_no' => $order['order_sn'], // 商户订单号'out_refund_no' => $refund_order['refund_no'], // 商户退款单号'total_fee' => $order['ddfy'] * 100, // 订单总金额,单位为分'refund_fee' => $order['ddfy'] * 100, // 退款金额,单位为分];// 创建退款请求$result = $wechat->createRefund($options);// 处理退款结果if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {Db::name($table)->where('id',$order['id'])->update($updata);Db::name('refund_order')->where('id',$refund_order['id'])->update(['refund_status'=>'1','refundtime'=>time()]);Db::name('pay_log')->where('order_sn',$order['order_sn'])->update(['pay_status'=>'3']);if(strcasecmp($table,'user_yecz_order')==0){$user = Db::name('user')->where('id',$order['user_id'])->find();$money = $user['money'];$new_money = bcsub($user['money'],$order['ddfy'],2);Db::name('user')->where('id',$user['id'])->update(['money'=>$new_money]);$user_money_log = ['user_id'=>$user['id'],'money'=>-$order['ddfy'],'before'=>$money,'after'=>$new_money,'memo'=>'订单余额退款','createtime'=>time(),];Db::name('user_money_log')->insert($user_money_log);}return ['code'=>1,'msg'=>'退款成功'];} else {return ['code'=>0,'msg'=>'退款失败:' . $result['return_msg']];}}private function yueRefund($order,$refund_order,$table,$updata){Db::startTrans();try{$user = Db::name('user')->where('id',$order['user_id'])->find();$money = $user['money'];$new_money = bcadd($user['money'],$order['ddfy'],2);Db::name('user')->where('id',$user['id'])->update(['money'=>$new_money]);Db::name($table)->where('id',$order['id'])->update($updata);Db::name('refund_order')->where('id',$refund_order['id'])->update(['refund_status'=>'1','refundtime'=>time()]);Db::name('pay_log')->where('order_sn',$order['order_sn'])->update(['pay_status'=>'3']);$user_money_log = ['user_id'=>$user['id'],'money'=>$order['ddfy'],'before'=>$money,'after'=>$new_money,'memo'=>'订单余额退款','createtime'=>time(),];Db::name('user_money_log')->insert($user_money_log);Db::commit();return ['code'=>1,'msg'=>'退款成功'];}catch (Exception $e){Db::rollback();return ['code'=>0,'msg'=>'退款失败:'];}}