php订单发起退款(余额和微信支付)

在这里插入图片描述

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'=>'退款失败:'];}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/205833.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【经验分享】openGauss 客户端(Data Studio / DBeaver)连接方式

前言 本篇介绍了openGauss常用的客户端连接工具Data Studio和DBeaver 01 客户端工具 openGauss部署之后&#xff0c;在服务器上提供了在命令行下运行的数据库连接工具gsql。此工具除了具备操作数据库的基本功能&#xff0c;还提供了若干高级特性&#xff0c;便于用户使用。…

建设“参与城市”大学--SMU在2023年绿色金融全球论坛上分享观点

2023年11月21日&#xff0c;由新加坡管理大学&#xff08;SMU&#xff0c;简称新大&#xff09;和中国人民大学&#xff08;RUC&#xff0c;简称人大&#xff09;联合主办的“绿色金融与治理&#xff1a;从承诺到行动”全球论坛在北京召开。论坛汇集了来自新加坡、中国及世界各…

【C++高阶(六)】哈希的应用--位图布隆过滤器

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希的应用 1. 前言2. 位图的概念以及定义3. 位…

记一篇Centos7安装innodb_ruby

安装innodb_ruby过程非常坎坷&#xff0c;这里记录下安装过程&#xff0c;有些坑当时没有记录下来&#xff0c;主要把完成安装过程就记录下来 yum安装ruby默认的会安装ruby2.0.0版本&#xff0c;但是在安装innodb_ruby时&#xff0c;会报错&#xff0c;提示至少需要2.4版本以上…

探索 Rollup:简化你的前端构建流程

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Rust UI开发(四):iced中如何添加菜单栏(串口调试助手)

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第四篇&#xff0c;前三篇链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建UI时…

Amazon CodeWhisperer 使用体验

文章作者&#xff1a;STRIVE Amazon CodeWhisperer 是最新的代码生成工具&#xff0c;支持多种编程语言&#xff0c;如 java,js,Python 等&#xff0c;能减少开发人员手敲代码时间&#xff0c;提升工作效率。PS:本人是一名 CodeWhisperer 业余爱好者 亚马逊云科技开发者社区为开…

模块的学习

模块合包的基本概念&#xff1a; 模块&#xff08;module&#xff09;&#xff1a;在python中&#xff0c;xx.py文件&#xff0c;就可以被看作模块 包&#xff08;package&#xff09;: 用来管理和存放模块的文件夹&#xff0c;就被称为包&…

如何集成一个TypeScript开发环境?

首先要安装个node.js。Node.js (nodejs.org) 然后我们随便建一个文件夹&#xff0c;并且打开它运行到终端 然后再运行命令&#xff1a; npm install typescript -g 成功后 尝试使用 tsc -v 查看版本 接下来再使用命令&#xff1a; tsc --init 我们在.ts文件中尝试输出一些…

解决uview中uni-popup弹出层不能设置高度问题

开发场景&#xff1a;点击条件筛选按钮&#xff0c;在弹出的popup框中让用户选择条件进行筛选 但是在iphone12/13pro展示是正常&#xff0c;但是切换至其他手机型号就填充满了整个屏幕&#xff0c;需要给这个弹窗设置一个固定的高度 iphone12/13pro与其他型号手机对比 一开始…

内衣洗衣机和手洗哪个干净?内衣洗衣机便宜好用的牌子推荐

单纯的用手清洗内衣&#xff0c;是很难的清洁到内衣物上的每一个角落的污渍。另外&#xff0c;手洗时所用的水以及香皂并不能彻底杀死衣物上的细菌&#xff0c;反而会在内衣物上滋生细菌。长时间穿这种内衣&#xff0c;对身体有潜在的危害。相比较而言&#xff0c;专用的内衣洗…

不同类型的开源许可证

不同类型的开源许可证 什么是开源许可证 最简单的解释是&#xff0c;开源许可证是计算机软件和其他产品的许可证&#xff0c;允许在定义的条款和条件下使用、修改或共享源代码、蓝图或设计。开源并不意味着该软件可以根据需要使用、复制、修改和分发。根据开源许可证的类型&a…

【开源】基于Vue+SpringBoot的高校宿舍调配管理系统

项目编号&#xff1a; S 051 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S051&#xff0c;文末获取源码。} 项目编号&#xff1a;S051&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统…

基于Netty的网络调用实现

作为一个分布式消息队列&#xff0c;通信的质量至关重要。基于TCP协议和Socket实现一个高效、稳定的通信程序并不容易&#xff0c;有很多大大小小的“坑”等待着经验不足的开发者。RocketMQ选择不重复发明轮子&#xff0c;基于Netty库来实现底层的通信功能。 1 Netty介绍 Net…

VOC数据集转换为COCO数据集

VOC数据集格式 get_list.py import os import random import shutil# 设置随机种子 random.seed(1000)# 判断Annotations和JpegImages是否对应 train_precent=0.8 label_path= "../../Annotations" print(os.path.abspath(label_path)) save="../Main" pr…

【开源】基于Vue和SpringBoot的学校热点新闻推送系统

项目编号&#xff1a; S 047 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S047&#xff0c;文末获取源码。} 项目编号&#xff1a;S047&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新…

Docker的项目资源参考

Docker的项目资源包括以下内容&#xff1a; Docker官方网站&#xff1a;https://www.docker.com/ Docker Hub&#xff1a;https://hub.docker.com/ Docker文档&#xff1a;https://docs.docker.com/ Docker GitHub仓库&#xff1a;https://github.com/docker Docker官方博客…

CentOS7安装MiniO

目录 1、简介 2、安装 2.1、Binary 2.2、RPM&#xff08;RHEL&#xff09;就是红帽&#xff0c;CentOS就用这个 2.3、DEB&#xff08;Ubuntu/Debian&#xff09; 2.4、创建指定的目录并且将下载的安装包上传上去 3、启动MiniO服务 3.1、脚本如下&#xff1a; 4、进入服务…

[个人笔记] vCenter6.7使用自建SSL证书

SSL - 运维篇 第三章 vCenter6.7使用自建SSL证书 SSL - 运维篇系列文章回顾vCenter6.7使用自建SSL证书vCenter 6.7 上传文件到ShellvCenter 6.7 Shell 替换SSL证书全流程测试&验证 参考链接 系列文章回顾 第二章 FortiGate防火墙使用自建SSL证书 vCenter6.7使用自建SSL证书…

Python基础语法之学习占位符

Python基础语法之学习占位符 一、代码二、效果 一、代码 name "张三" sex "男" age 10 money 12.5# 通过占位符完成拼接 print("姓名&#xff1a;%s" % name) print("姓名&#xff1a;%s,性别&#xff1a;%s" % (name, sex))text…