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.mzph.cn/news/172430.shtml

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

相关文章

056-第三代软件开发-软件打包

第三代软件开发-软件打包 文章目录 第三代软件开发-软件打包项目介绍软件打包1 下载 linuxdepoyqt 工具2 安装 linuxdepoyqt3 qmake配置4 打包程序 总结 关键字&#xff1a; Qt、 Qml、 linuxdeployqt、 Ubuntu、 AppImage 项目介绍 欢迎来到我们的 QML & C 项目&…

本地运行“李开复”的零一万物 34B 大模型

这篇文章&#xff0c;我们来聊聊如何本地运行最近争议颇多的&#xff0c;李开复带队的国产大模型&#xff1a;零一万物 34B。 写在前面 零一万物的模型争议有很多&#xff0c;不论是在海外的社交媒体平台&#xff0c;还是在国内的知乎和一种科技媒体上&#xff0c;不论是针对…

基恩士软件的基本操作(五,日志记录与使用)

目录 基恩士是如何保存日志的&#xff1f; 如何使用日志功能 查看DM10的值1秒加1的记录日志 设定id与储存位置 软元件设定&#xff08; 日志ID有10个&#xff08;0~10&#xff09;&#xff0c;每一个ID最多添加512个软元件&#xff09; 设定触发 执行日志的梯形图程序 触…

【Amazon】在Amazon EKS集群中安装部署最小化KubeSphere容器平台

文章目录 一、准备工作二、部署 KubeSphere三、访问 KubeSphere 控制台四、安装Amazon EBS CSI 驱动程序4.1 集群IAM角色建立并赋予权限4.2 安装 Helm Kubernetes 包管理器4.3 安装Amazon EBS CSI 驱动程序 五、常见问题六、参考链接 一、准备工作 Kubernetes 版本必须为&…

i社为什么不出游戏了?

I社&#xff0c;即国际知名的游戏公司&#xff0c;近来为何鲜有新游问世&#xff1f;曾经风靡一时的游戏开发者&#xff0c;如今为何陷入了沉寂&#xff1f;这其中的种种原因&#xff0c;值得我们深入剖析。 首先&#xff0c;I社近期的沉寂可能与其内部管理层的调整和战略规划…

Scrum敏捷开发培训团队和组织来说的重要性

Scrum敏捷开发培训对于团队和组织来说是至关重要的&#xff0c;有以下几点&#xff0c;大家可以参考下&#xff1a; 理解敏捷价值观和原则&#xff1a; 培训有助于团队理解敏捷方法背后的核心理念和价值观&#xff0c;包括个体和互动、工作软件、客户合作和响应变化。这有助于建…

RESTful API 架构快速入门 Flask实现

RESTful 简介 1.1 为什么要使用 RESTful 架构&#xff1f; Representational State Transfer&#xff08;REST&#xff09;是一种面向资源的架构风格&#xff0c;广泛应用于网络服务的设计和开发。使用RESTful架构有以下几个优点&#xff1a; 简单性和可扩展性&#xff1a; RE…

[LaTex]arXiv投稿攻略——jpg/png转pdf

一、将图片复制进ppt&#xff0c;右键单击图片选择设置图片格式&#xff0c;获取图片高度和宽度 二、选择“设计-幻灯片大小-自定义幻灯片大小” 三、设置幻灯片大小为图片大小 四、 选择“最大化” 五、 检查幻灯片大小是否与图像大小一致 六、导出为PDF

浅谈Python中的鸭子类型和猴子补丁

文章目录 前言一、鸭子类型二、猴子补丁关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言 Python 开发者可能…

springboot打印启动信息

打印启动信息 转载自:www.javaman.cn 1 spring Bean实例化流程 基本流程&#xff1a; 1、Spring容器在进行初始化时&#xff0c;会将xml或者annotation配置的bean的信息封装成一个BeanDefinition对象&#xff08;每一个bean标签或者bean注解都封装成一个BeanDefinition对象&a…

【Vulnhub靶机】Jarbas--Jenkins

文章目录 信息收集主机发现端口扫描目录爆破 漏洞探测whatwebhash-identifierwhatweb 文档说明&#xff1a;https://www.vulnhub.com/entry/jarbas-1,232/ 靶机下载&#xff1a;Download (Mirror): 信息收集 主机发现 扫描C段 sudo nmap -sn 10.9.75.0/24端口扫描 sudo nma…

装饰者设计模式

package com.jmj.pattern.decorator;/*** 快餐类(抽象构建角色)*/ public abstract class FastFood {private float price;private String desc;public float getPrice() {return price;}public void setPrice(float price) {this.price price;}public String getDesc() {retu…

竞赛选题 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于pyt…

LV.12 D20 RTC实验 学习笔记

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电 二、Exynos4412下的 RTC控制器 它支持…

Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/4)

博主介绍&#xff1a;Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 &#x1f345;文末获取源码下载地址&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb;…

基于STM32的OLED多级菜单GUI实现(简化版智能手表)

前言&#xff1a;本文的OLED多级菜单UI为一个综合性的STM32小项目&#xff0c;使用多传感器与OLED显示屏实现智能终端的效果。项目中的多级菜单UI使用了较为常见的结构体索引法去实现功能与功能之间的来回切换&#xff0c;搭配DHT11&#xff0c;RTC&#xff0c;LED&#xff0c;…

【机器学习 | 开山篇】打造坚实基础、Kaggle 登榜之路

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Linux中部署MongoDB

在 是一个必要的过程&#xff0c;因为MongoDB是一种流行的NoSQL数据库&#xff0c;它可以在大多数操作系统上使用。在本文中&#xff0c;我们将介绍如何在CentOS 8上部署MongoDB。 MongoDB的下载 您可以从MongoDB官网上下载最新的MongoDB版本。使用以下命令下载MongoDB&#…

SSF-CNN:空间光谱融合的卷积光谱图像超分网络

SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION 文章目录 SSF-CNN: SPATIAL AND SPECTRAL FUSION WITH CNN FOR HYPERSPECTRAL IMAGE SUPER-RESOLUTION简介解决问题网络框架代码实现训练部分运行结果 简介 ​ 本文提出了一种利用空…

MYSQL 及 SQL 注入

文章目录 前言什么是sql注入防止SQL注入Like语句中的注入后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现…