首页 > 其他分享 >.net core 微信支付-----申请退款

.net core 微信支付-----申请退款

时间:2022-10-18 17:35:15浏览次数:34  
标签:core set string get 微信 商户 ----- 退款 public

  首先看官方文档:

 

 

 

 

 

 请求示例:

 

 返回参数:

 

 这个参数太长了就不多说了,上代码:

Model:

    public class ApplyAmount
    {
        /// <summary>
        /// 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
        /// 原支付交易对应的商户订单号
        /// </summary>
        public string out_trade_no { set; get; }

        /// <summary>
        /// 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
        /// 示例值:1217752501201407033233368018
        /// </summary>
        public string out_refund_no { set; get; }

        /// <summary>
        /// 若商户传入,会在下发给用户的退款消息中体现退款原因。
        /// 示例值:商品已售完
        /// 非必填
        /// </summary>
        public string reason { set; get; }

        /// <summary>
        /// 异步接收微信支付退款结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数。 如果参数中传了notify_url,则商户平台上配置的回调地址将不会生效,优先回调当前传的这个地址。
        /// 示例值:https://weixin.qq.com, 必须是https的网址
        /// </summary>
        public string notify_url { set; get; }

        /// <summary>
        /// 退款金额实体
        /// </summary>
        public RefundsAmountModel amount { set; get; }
    }
    /// <summary>
    /// 退款订单金额信息。
    /// </summary>
    public class RefundsAmountModel
    {
        /// <summary>
        /// 退款金额,币种的最小单位,只能为整数,不能超过原订单支付金额。
        /// </summary>
        public int refund { set; get; }

        /// <summary>
        /// 原支付交易的订单总金额,币种的最小单位,只能为整数。
        /// </summary>
        public int total { set; get; }

        /// <summary>
        /// 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY。
        /// </summary>
        public string currency { set; get; }
    }
    /// <summary>
    /// 退款订单金额信息。
    /// </summary>
    public class RefundsRespAmountModel
    {
        /// <summary>
        /// 退款金额,币种的最小单位,只能为整数,不能超过原订单支付金额。
        /// </summary>
        public int refund { set; get; }

        /// <summary>
        /// 原支付交易的订单总金额,币种的最小单位,只能为整数。
        /// </summary>
        public int total { set; get; }

        /// <summary>
        /// 现金支付金额,单位为分,只能为整数。
        /// </summary>
        public int payer_total { set; get; }

        /// <summary>
        /// 退款给用户的金额,不包含所有优惠券金额。
        /// </summary>
        public int payer_refund { set; get; }

        /// <summary>
        /// 应结订单金额=订单金额-免充值代金券金额,应结订单金额<=订单金额,单位为分
        /// </summary>
        public int settlement_refund { set; get; }

        /// <summary>
        /// 优惠退款金额 <=退款金额,退款金额-代金券或立减优惠退款金额为现金,说明详见代金券或立减优惠,单位为分。
        /// </summary>
        public int discount_refund { set; get; }

        /// <summary>
        /// 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY。
        /// </summary>
        public string currency { set; get; }
    }

 

 public class ReturnAmount
    {
        /// <summary>
        /// 微信支付退款号。
        /// </summary>
        public string refund_id { set; get; }

        /// <summary>
        /// 商户系统内部的退款单号,商户系统内部唯一,只能是数字、大小写字母_-|*@ ,同一退款单号多次请求只退一笔。
        /// 示例值:1217752501201407033233368018
        /// </summary>
        public string out_refund_no { set; get; }

        /// <summary>
        /// 微信支付交易订单号。
        /// </summary>
        public string transaction_id { set; get; }

        /// <summary>
        /// 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
        /// 原支付交易对应的商户订单号
        /// </summary>
        public string out_trade_no { set; get; }

        /// <summary>
        /// 枚举值:
        ///  ORIGINAL:原路退款
        ///  BALANCE:退回到余额
        ///  OTHER_BALANCE:原账户异常退到其他余额账户
        ///  OTHER_BANKCARD:原银行卡异常退到其他银行卡
        /// </summary>
        public string channel { set; get; }

        /// <summary>
        /// 取当前退款单的退款入账方,有以下几种情况:
        /// 1)退回银行卡:{银行名称}{卡类型}{ 卡尾号}
        /// 2)退回支付用户零钱:支付用户零钱
        /// 3)退还商户:商户基本账户商户结算银行账户
        /// 4)退回支付用户零钱通:支付用户零钱通。
        /// </summary>
        public string user_received_account { set; get; }

        /// <summary>
        /// 退款成功时间,当退款状态为退款成功时有返回。遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日13点29分35秒
        /// </summary>
        public string success_time { set; get; }

        /// <summary>
        /// 退款受理时间。 遵循rfc3339标准格式,格式为YYYY-MM-DDTHH:mm:ss+TIMEZONE,YYYY-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35+08:00表示,北京时间2015年5月20日13点29分35秒。
        /// </summary>
        public string create_time { set; get; }

        /// <summary>
        /// 退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,可前往商户平台-交易中心,手动处理此笔退款。
        /// 枚举值:
        /// SUCCESS:退款成功
        /// CLOSED:退款关闭
        /// PROCESSING:退款处理中
        /// ABNORMAL:退款异常
        /// </summary>
        public string status { set; get; }

        /// <summary>
        /// 退款所使用资金对应的资金账户类型。 枚举值:
        /// UNSETTLED : 未结算资金
        /// AVAILABLE : 可用余额
        /// UNAVAILABLE : 不可用余额
        /// OPERATION : 运营户
        /// </summary>
        public string funds_account { set; get; }

        /// <summary>
        /// 金额详细信息。
        /// </summary>
        public RefundsRespAmountModel amount { set; get; }
    
}

 退款接口:

 [HttpPost("ReturnMoney")]
        public async Task<ReturnAmount> ReturnMoney()
        {
            //申请退款
            var req = new ApplyAmount
            {
                out_refund_no = "",//要退回的那个订单号
                out_trade_no = "",//当前退款的订单号。(比如你下单有个订单号,那退款是不是也要有自己的订单号)
                reason = "测试行不行",
                //这个是退款结果通知回调,要看需求,其实退款后微信给消息的
                //我们这里的通知是对系统做记录的。所以要看需不需要。
                notify_url = "https:/",
                amount = new RefundsAmountModel
                {
                    refund = 1,
                    total = 1,
                    currency = "CNY"
                }
            };

            var url = $"https://api.mch.weixin.qq.com/v3/refund/domestic/refunds";
            var client = new HttpClient(new HttpHandler());
            var bodyJson = new StringContent(req.ToJson(), Encoding.UTF8, "application/json");

            var resp = await client.PostAsync(url, bodyJson);
            var respStr = await resp.Content.ReadAsStringAsync();
            var payModel = respStr.ToObject<ReturnAmount>();
            return payModel;
        }

  这里不能直接测了,毕竟项目已经上线了,不能在测了。我放一个以前测试测是效果图:

 

 

源码:

链接:https://pan.baidu.com/s/1CVtfbQ4mVk8saPZSZWTATg?pwd=72bb
提取码:72bb

 

标签:core,set,string,get,微信,商户,-----,退款,public
From: https://www.cnblogs.com/zpy1993-09/p/16803374.html

相关文章

  • 3W SMA稳压二极管SMA3Z3.3A-SMA3Z200A
    常用稳压二极管功耗有1W、1.5W、2W、3W、5W,其中功耗为3W的稳压管有:3EZ5.6D5-3EZ200D5、SMA3EZ5.6D5-SMA3EZ200D5、SMB3EZ5.6D5-SMB3EZ200D5、SMA3Z3.3A-SMA3Z200A、SMB3Z3.3......
  • adg搭建-ora-01034 ora-27101
    在adg搭建过程中,备库启动到nomount状态,并且使用连接字符串测试可以连接上主备库,但是执行脚本就报错ora-01034ora-27101  遇到这种报错,也是先百度了下,然后也没有遇到......
  • Kubernetes--管理Pod对象的容器(1)
    Pod是Kubernetes系统的基础单元,是资源对象模型中可由用户创建或部署的最小组件,也是在Kubernetes系统上运行容器化应用的资源对象。其他的大多数资源对象都是用于支撑和扩......
  • cnpm install 安装依赖包后,vue-element-admin 运行报错血泪采坑总结
    前言以前安装依赖包会使用npminstall,但因服务器在国外,所以下载速度不稳定,总体比较慢。后来国内就有了淘宝镜像cnpm,安装依赖速度很快,因为服务器在国内npminstal......
  • java--String类
     java--String类入门详细介绍,转载java实现一个String类,转载 ......
  • 网页在线客服代码-侧边悬浮在线客服/QQ/微信/电话代码
    什么是网页在线客服代码?在线客服系统是通过独立应用程序或嵌入式软件进行的近实时消息交换。早期互联网发展还不流行的时候,那时候的网页结构还比较单一,很多企业的网站上只......
  • vue3实战-完全掌握ref、reactive
    知道大家使用Vue3的时候有没有这样的疑惑,“ref、rective都能创建一个响应式对象,我该如何选择?”,“为什么响应式对象解构之后就失去了响应式?应该如何处理?”今天咱们就来......
  • 2022-10-18 uniapp h5端 通过腾讯提供的api并输入对应的经纬度 获取城市
    首先说明一下这是h5端,是的,他娘的h5端。然后先用uni.getLocation(我用的是wgs84)获取到经纬度,什么?你告诉我pc端无法获取,老是报什么网络错误的错误,连手机端也是这样??哦多茄~~......
  • vue源码分析-diff算法核心原理
    这一节,依然是深入剖析Vue源码系列,上几节内容介绍了VirtualDOM是Vue在渲染机制上做的优化,而渲染的核心在于数据变化时,如何高效的更新节点,这就是diff算法。由于源码中关于d......
  • B - Cake
    B-CakeHPU专题训练(-1)GCD&amp;&amp;素筛&amp;&amp;快速幂_____B-Cake一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大......