跟随前一篇文章。NET Core微信小程序支付——(统一下单)’,本文将实现统一退款功能。如果你能付款,你应该能退款。一般涉及金钱的事情都是比较敏感的,所以在设计退款流程的时候一定要严格,不能出错,否则会面临自己掏钱的可能。先说说退款的实施步骤。
规则
1.交易时间超过一年的订单不能退款;
2.微信支付退款支持单笔交易多次退款。多次退款需要提交原付款单的商户订单号,并设置不同的退款订单号。退款申请的总金额不能超过订单金额。如果退款失败,请重新提交。请不要更改退款号码。请使用原商家退款号。
3.请求频率限制:150qps,即正常情况下每秒退款请求次数不超过150次
错误或无效的申请频率限制:6qps,即每秒不超过6个异常或错误的退款申请请求
4.每个付款订单的部分退款数量不能超过50
接口地址
接口链接:https://api.mch.weixin.qq.com/secapi/pay/refund
相关参数
官方退款文件
文件地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?章=9 _ 4索引=6
先去商家后台下载证书,退款是需要的。下图为商户后台下载证书的界面:
参考包:
森帕克。Weixin.WxOpen
森帕克。微信.财付通
注册微信官方账号,小程序信息
服务。添加服务(配置)。添加服务(配置);IRegisterService register=注册服务.开始(env,senparcSetting .值)。UseSenparcGlobal(false,null);注册使用SenparcWeixin(senparcweixin设置).值,senparcSetting .价值。)registerstenpayv3(senparcWeixinseting .Value,' appid ');
///摘要///退款回调////摘要[HttpSet(' RefAnDnotifYURl ')]公共操作结果RefAnDnotifyURl(){响应结果结果=新响应结果();ResponseHandler resHandler=new ResponseHandler(HttpContext);字符串return_code=resHandler .GetParameter(' return _ code ');字符串return_msg=resHandler .GetParameter(' return _ msg ');尝试{ var mch_key=Senparc .微信。配置。senparcweixinseting。tenpayv3 _ Keyif(返回代码.ToOpper()==' SUCCESS '){//字符串result_code=resHandler .GetParameter(' result _ code ');//字符串appId=resHandler .getParameter(' appid ');//字符串mch_id=resHandler .getParameter(' mch _ id ');//string nonce_str=resHandler .GetParameter(' nonce _ str ');字符串req_info=resHandler .GetParameter(' req _ info ');var decodeReqInfo=TenPayV3Util .DecodeRefundReqInfo(req_info,mch _ key);var decodeDoc=XDocument .解析(DecodeReqinfo);var refundNotifyXml=decodeDoc .SerializeObject();//获取接口中需要用到的信息string out_trade_no=decodeDoc .根元素(' out_trade_no ').价值;字符串输出_退款_no=decodeDoc .根元素(' out _退款_no ').价值;string transaction_id=decodeDoc .根元素("事务标识")。价值;线退款_id=decodeDoc .根元素("退款标识")。价值;int total_fee=int .解析(decodeDoc .根元素("总费用")。价值);(同Internationalorganizations)国际组织退款_fee=int .解析(decodeDoc .根元素("退款_费用")。价值);RefundNotifyParam参数=new RefundNotifyParam(){ PayNo=out _ trade _ no,//商户订单号PayPrice=(浮动)退款_手续费ToInt()/100).ToDecimal(),//退款金额出去退款_no=out _退款_否,//商户退款单号TransactionNo=transaction_id,//微信订单号退款_id=退款_id,//微信退款单号};伐木工。信息(字符串。格式('退款回调参数,return_code={0},return_msg={1},refundNotifyXml={ 2 } ',return_code,return_msg,RefAnDnotifyXMl));结果=服务RefundNotifyUrl(参数);if (result.errno!=0) { //回调处理逻辑失败伐木工。错误(字符串。格式('退款回调业务处理失败:退款单号{0},{1},参数出去退款_不,结果。errmsg));} else { Logger .信息(字符串。格式('退款回调业务处理成功,退款单号:{0} ',参数出去退款_ no));字符串xml=字符串。格式(@ XML return _ code![CData[{ 0 }]/return _ code return _ msg![CData[{ 1 }]/return _ msg/XML ',return_code,return _ msg);返回内容(xml,‘text/XML’);} } else { //错误的订单处理伐木工。错误(字符串。格式('退款回调失败,return_code={0},return_msg={1} ',return_code,return _ msg));} } catch (Exception ex) { Logger .错误(字符串。格式('退款回调异常:消息={0},堆栈跟踪={1},例如。留言,前任堆栈跟踪));}返回内容("失败"、"文本/XML ");}注:如果业务处理退款成功后,请返回结果告诉微信成功,否则微信也会按规则不停发送退款回调给服务器,直到次数用完为止,具体查看上面规则文档。
总结
以上所述是小编给大家介绍的。净核心微信小程序退款步骤——(统一退款),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!