//DPBMARK_END #region 订单及退款 /// <summary> /// 退款申请接口 /// </summary> /// <returns></returns> public async Task <IActionResult> Refund() { try { WeixinTrace.SendCustomLog("进入退款流程", "1"); string nonceStr = TenPayV3Util.GetNoncestr(); string outTradeNo = HttpContext.Session.GetString("BillNo"); if (!TradeNumberToTransactionId.TryGetValue(outTradeNo, out string transactionId)) { return(Content("transactionId 不正确,可能是服务器还没有收到微信回调确认通知,退款失败。请稍后刷新再试。")); } WeixinTrace.SendCustomLog("进入退款流程", "2 outTradeNo:" + outTradeNo + ",transactionId:" + transactionId); string outRefundNo = "OutRefunNo-" + SystemTime.Now.Ticks; int totalFee = int.Parse(HttpContext.Session.GetString("BillFee")); int refundFee = totalFee; string opUserId = TenPayV3Info.MchId; var notifyUrl = "https://sdk.weixin.senparc.com/TenPayRealV3/RefundNotifyUrl"; //var dataInfo = new TenPayV3RefundRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, TenPayV3Info.Key, // null, nonceStr, null, outTradeNo, outRefundNo, totalFee, refundFee, opUserId, null, notifyUrl: notifyUrl); //TODO:该接口参数二选一传入 var dataInfo = new RefundRequsetData(transactionId, null, outRefundNo, "Senparc TenPayV3 demo退款测试", notifyUrl, null, new RefundRequsetData.Amount(refundFee, null, refundFee, "CNY"), null); //#region 新方法(Senparc.Weixin v6.4.4+) //var result = TenPayOldV3.Refund(_serviceProvider, dataInfo);//证书地址、密码,在配置文件中设置,并在注册微信支付信息时自动记录 //#endregion var result = await _basePayApis.RefundAsync(dataInfo); WeixinTrace.SendCustomLog("进入退款流程", "3 Result:" + result.ToJson()); ViewData["Message"] = $"退款结果:{result.status} {result.ResultCode}。您可以刷新当前页面查看最新结果。"; return(View()); //return Json(result, JsonRequestBehavior.AllowGet); } catch (Exception ex) { WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex)); throw; } }
// TODO: 待测试 /// <summary> /// 申请退款接口 /// </summary> /// <param name="data">请求数据</param> /// <param name="timeOut">超时时间,单位为ms</param> /// <returns></returns> public async Task <RefundReturnJson> RefundAsync(RefundRequsetData data, int timeOut = Config.TIME_OUT) { try { var url = ReurnPayApiUrl($"https://api.mch.weixin.qq.com/{{0}}v3/refund/domestic/refunds"); TenPayApiRequest tenPayApiRequest = new(_tenpayV3Setting); return(await tenPayApiRequest.RequestAsync <RefundReturnJson>(url, data, timeOut)); } catch (Exception ex) { SenparcTrace.BaseExceptionLog(ex); return(new RefundReturnJson() { ResultCode = new TenPayApiResultCode() { ErrorMessage = ex.Message } }); } }