退款也比较简单,需要注意的是退款是需要证书的,需要去 微信商户平台(pay.weixin.qq.com)–>账户中心–>账户设置–>API安全–>证书下载, 把证书下载好后代入请求中。相关链接:申请退款

这是WxPayApi.cs的一个方法,其他的方法可以去基础帮助类里面看

/*** * 申请退款* @param WxPayData inputObj 提交给申请退款API的参数* @param int timeOut 超时时间* @throws WxPayException* @return 成功时返回接口调用结果,其他抛异常*/public static WxPayData Refund(WxPayData inputObj, int timeOut = 6){string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";//检测必填参数if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id")){throw new Exception("退款申请接口中,out_trade_no、transaction_id至少填一个!");}else if (!inputObj.IsSet("out_refund_no")){throw new Exception("退款申请接口中,缺少必填参数out_refund_no!");}else if (!inputObj.IsSet("total_fee")){throw new Exception("退款申请接口中,缺少必填参数total_fee!");}else if (!inputObj.IsSet("refund_fee")){throw new Exception("退款申请接口中,缺少必填参数refund_fee!");}else if (!inputObj.IsSet("op_user_id")){throw new Exception("退款申请接口中,缺少必填参数op_user_id!");}inputObj.SetValue("appid", Config.AppID);//公众账号IDinputObj.SetValue("mch_id", Config.MchID);//商户号inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串//异步通知url未设置,则使用配置文件中的urlif (!inputObj.IsSet("notify_url")){inputObj.SetValue("notify_url", Config.NotifyUrl);//异步通知url}inputObj.SetValue("sign_type", WxPayData.SIGN_TYPE_HMAC_SHA256);//签名类型inputObj.SetValue("sign", inputObj.MakeSign());//签名string xml = inputObj.ToXml();var start = DateTime.Now;//Log.Debug("WxPayApi", "Refund request : " + xml);string response = HttpService.Post(xml, url, true, timeOut);//调用HTTP通信接口提交数据到API//Log.Debug("WxPayApi", "Refund response : " + response);var end = DateTime.Now;int timeCost = (int)((end - start).TotalMilliseconds);//获得接口耗时//将xml格式的结果转换为对象以返回WxPayData result = new WxPayData();result.FromXml(response);ReportCostTime(url, timeCost, result);//测速上报return result;}

op_user_id 这个是微信支付那配置的子人员的标号,没有就随便填就行,主要是用于多个系统的时候只有一个支付号的情况,其他情况没想到

        /// <summary>/// 申请退款完整业务流程逻辑/// </summary>public Hashtable Refund(){string transaction_id = GetStr("transaction_id");string out_trade_no = GetStr("out_trade_no");//订单总金额,单位分int total_fee = GetInt("total_fee");//退款金额,单位分int refund_fee = GetInt("refund_fee");//商户退款单号string out_refund_no = GetStr("out_refund_no");if (string.IsNullOrEmpty(transaction_id) && string.IsNullOrEmpty(out_trade_no)){throw new Exception("微信订单号和商户订单号至少填写一个,微信订单号优先!");}WxPayData data = new WxPayData();if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准{data.SetValue("transaction_id", transaction_id);}else//微信订单号不存在,才根据商户订单号去退款{data.SetValue("out_trade_no", out_trade_no);}data.SetValue("total_fee", total_fee);data.SetValue("refund_fee", refund_fee);data.SetValue("out_refund_no", out_refund_no);data.SetValue("op_user_id", Config.MchID);//操作员,默认为商户号WxPayData result = WxPayApi.Refund(data);//提交退款申请给API,接收返回数据return result.ToHashtable();}

没什么坑,就记得带上证书就好。

C#微信支付(五)—— 申请退款相关推荐

  1. java微信支付v3系列——7.微信支付之申请退款

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  2. 浅析微信支付:申请退款、退款回调接口、查询退款

    本文是[浅析微信支付]系列文章的第八篇,主要讲解商户如何处理微信申请退款.退款回调.查询退款接口,其中有一些坑的地方,会着重强调. 浅析微信支付系列已经更新七篇了哟-,没有看过的朋友们可以看一下哦. ...

  3. PHP微信根据订单号查询支付结果,9. PHP接入微信支付订单、退款订单、转款订单的查询...

    微信并未提供一个统一的查询接口.对应每种查询均需要不同的api.为了便于大家在项目中使用,忽略细节.对以上三种进行了封装.通过工厂的方式降低调用成本. $wxconfig = [ 'app_id' = ...

  4. 微信支付调用接口退款,返回SSL certificate not found: 是什么问题?

    微信支付调用接口退款,返回SSL certificate not found: 是什么问题? 处理方法 :将路径换成服务器的路径就可以了:

  5. 微信支付订单、退款订单、转款订单的查询

    payment 项目2.0版本 微信并未提供一个统一的查询接口.对应每种查询均需要不同的api.为了便于大家在项目中使用,忽略细节.对以上三种进行了封装.通过工厂的方式降低调用成本. $wxconfi ...

  6. 微信支付接口怎么申请 微信支付接口申请教程

     微信支付接口:点击进去 一直让大家翘首以盼的微信最核心的杀手锏--"微信支付"终于开放申请了!今天微信团队在官网发布消息,微信公众平台支付功能已正式开放申请,已开通公众号的 ...

  7. PHP实现小程序微信支付v3版本退款,以及对退款订单进行查询

    PS:本篇文章仅用作对小程序微信支付v3版本的退款流程以及对退款订单进行查询的流程展示,如要用于实际,还请自行修改代码 文章中调用的API_Connect.php 与API_v3Connect.php ...

  8. nodejs开发微信支付之接收退款申请通知

    nodejs开发微信支付之退款结果通知url 前言 步骤 1.先对加密串A进行base64解密 2.对商户key做md5,得到32位小写key 3.用key*对加密串B做AES-256-ECB解密 前 ...

  9. php 微信支付证书,微信支付后台进行退款操作时提示证书已过期处理(PHP)

    之前没做过退款操作,因为业务没有涉及到,并且退款比支付流程还要复杂.没有特别要求是不会去搞的. 但小程序平台是已经接好了微信退款操作,这个时候报错就得处理一下了. [notice]只有退款的时候才需要 ...

  10. android 微信支付接口申请分享

    开头不那么多废话直接给大家上过程:1.进入微信开发平台 连接 [微信开发平台](https://open.weixin.qq.com/) 登陆帐号然后选择移动应用接入. 进去进行创建应用,创建的时候要 ...

最新文章

  1. Swift3.0语言教程获取字符串编码与哈希地址
  2. jsp对弹出jsp传值 和刷新网页后js仍然没有刷新的解决方法
  3. 中澜视讯产品运营总监黄超强:产品+付费+未来汽车
  4. 电脑软件:巧用微软小工具解决日常问题!
  5. MySQL 开启远程访问权限 | 宝塔系统
  6. pthread_join函数
  7. C++学习之路(一)
  8. 获得显示器设置的分辨率
  9. 大屏监控系统实战(7)-后端整合MybatisPlus并暴露服务
  10. python操作mysql中的表_带你了解什么是Python操作MySQL数据库
  11. 漫游Kafka实战篇clientAPI
  12. 安装篇——nginx安装ssl模块转发https请求
  13. 点菜系统软件源码(点菜软件源码分享)
  14. linux下ab压力测试工具
  15. Spring Cloud Gateway初体验
  16. Git报错remote: error: hook declined to update refs/heads/feature/XXX
  17. 微信开发平台第三方平台86004无效微信号
  18. cmd脚本命令--之基本命令锦集
  19. 重磅开源:基于.NET 6.0 自研轻量级ORM框架
  20. CTP穿透式监管怎么实现代码, 穿透测试API

热门文章

  1. 三国志战略版:Daniel_武将分析-左慈
  2. windows防火墙设置允许FTP命令传输
  3. AD PCB常用系统快捷键及自定义快捷键
  4. Go语言 正则表达式
  5. 7-14 汉诺塔问题 (10 分)——每日一题
  6. 知识问答 - 西游记连环画绘本
  7. 【转载】提高Ubuntu虚拟机运行速度
  8. DNS劫持和HTTP劫持有什么区别、运营商劫持如何预防与解决
  9. mysql增加字段类型_mysql 增加修改字段类型及删除字段类型
  10. 2n皇后问题C语言实现