微信支付的退款功能开发

阅读 12515  ·  发布日期 2020-08-24 17:26  ·  温州雄霸网络科技有限公司|建站|APP小程序制作|做网站SEO推广优化
【摘要】 这次给大家带来微信支付的退款功能开发,微信支付退款功能开发的注意事项有哪些,下面就是实战案例,一起来看一下。先吐槽下微信的文档和demo,重要的步骤信息没有强调清楚,.net的demo就没有跑成功过。1.微信扫码登录2.微信PC端支付几经摸索才走通这个退款功能。下面介绍下微信支付退款功能的开发步骤:一、下载证书并导入到... 【温州小程序开发,温州微信公众号,平阳做网站,平阳网站建设公司,平阳小程序商城制作,昆阳万全做网站,鳌江水头小程序,萧江腾蛟微信公众号,山门顺溪南雁海西南麂凤卧麻步怀溪网络网店服务,政采云网店管理服务】...

微信支付的退款功能开发

这次给大家带来微信支付的退款功能开发,微信支付退款功能开发的注意事项有哪些,下面就是实战案例,一起来看一下。
先吐槽下微信的文档和demo,重要的步骤信息没有强调清楚,.net的demo就没有跑成功过。
1.微信扫码登录2.微信PC端支付几经摸索才走通这个退款功能。
下面介绍下微信支付退款功能的开发步骤:
一、下载证书并导入到系统微信退款是需要证书的,这个证书不是官方demo中的证书,而是需要自己在微信商户平台中的api安全栏下载的证书,在官方的证书使用实例的一个word文档看到下面话:
C#有一点需要注意,除了在代码中使用apiclient_cert.p12之外还需要将该证书导入操作系统才能使用,1、代码中使用、;2、导入操作系统,二者缺一不可。
.NET版本需要大于2.0 之前就是不知道这两步,浪费了太多时间。
所以先下载证书:
下载的时候需要手机验证及登录密码。
下载后找到apiclient_cert.p12这个证书,双击导入,导入的时候提示输入密码,这个密码就是商户ID,且必须是在自己的商户平台下载的证书。
否则会出现密码错误的提示:
导入正确的提示:
二、代码退款 这个地方可以直接用官方demo中的代码,demo下载 需要修改WxPayConfig中的几个参数:
    public const string APPID = "wxf6dd794bcexxxx";
public const string MCHID = "xxxx";
public const string KEY = "xxxxx849ba56abbe56e05xxxxx";
public const string APPSECRET = "---";
//=======【证书路径设置】===================================== /* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要) */ public const string SSLCERT_PATH = "/WxPayAPI/cert/apiclient_cert.p12";
public const string SSLCERT_PASSWORD = "131xxxx";
上面的SSLCERT_PASSWORD就是MCHID,也就是商户ID,SSLCERT_PASSWORD错误会出现指定的网络密码不正确的提示:
接下来在控制器中增加一个退款方法,包含微信订单号、商户订单号、总金额和退款金额。
商户订单号和微信订单号二选一。
详细参数 public ActionResult DoRefund() {
string result = Refund.Run("","131667780120trade_no", "1", "1");
return Content(result);
}
Refund类的Run方法:
/*** * 申请退款完整业务流程逻辑 * @param transaction_id 微信订单号(优先使用) * @param out_trade_no 商户订单号 * @param total_fee 订单总金额 * @param refund_fee 退款金额 * @return 退款结果(xml格式) */ public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee) {
Logger.Info("Refund is processing...");
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", int.Parse(total_fee));
//订单总金额 data.SetValue("refund_fee", int.Parse(refund_fee));
//退款金额 data.SetValue("out_refund_no", out_trade_no);
//随机生成商户退款单号 data.SetValue("op_user_id", WxPayConfig.MCHID);
//操作员,默认为商户号 WxPayData result = WxPayApi.Refund(data);
//提交退款申请给API,接收返回数据 Logger.Info("Refund process complete, result : " + result.ToXml());
return result.ToPrintStr();
}
Refund:
方法 /** * * 申请退款 * @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 WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!");
}
else if (!inputObj.IsSet("out_refund_no")) {
throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!");
}
else if (!inputObj.IsSet("total_fee")) {
throw new WxPayException("退款申请接口中,缺少必填参数total_fee!");
}
else if (!inputObj.IsSet("refund_fee")) {
throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!");
}
else if (!inputObj.IsSet("op_user_id")) {
throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!");
}
inputObj.SetValue("appid", WxPayConfig.APPID);
//公众账号ID inputObj.SetValue("mch_id", WxPayConfig.MCHID);
//商户号 inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));
//随机字符串 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;
}
生产环境中记得修改成自己的参数。
如果参数都正确,将会返回:
而且,微信马上回收到退款通知:
小结:
至此,退款功能已经走通,其实如果参数和流程对了,这个地方还是很简单的,微信的规定是可以申请一年内交易的退款。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!推荐阅读:
ss3的渐变如何使用jQuery、Angular、node中的Promise详解H5的视频播放库video.js详解以上就是微信支付的退款功能开发的详细内容,更多请关注php中文网其它相关文章!
微信
分享相关标签:
开发 功能 退款本文原创发布php中文网,转载请注明出处,感谢您的尊重!
上一篇:
微信硬件H5开发之控制灯光
下一篇:
微信扫码支付的Asp.Net MVC开发相关文章相关视频修改微信号有什么影响吗?微信中共享实时位置什么意思数据库设计的基本原则是什么?微信小程序调用图片安全API微信支付的退款功能开发PHP开发基础教程之环境搭建PHP开发基础教程之学习之语法PHP开发基础教程之变量PHP开发基础教程之输出语句PHP开发基础教程之数据类型 [温州做微信公众号]