public async Task <MessageModel <PayRefundReturnResultModel> > PayRefund(PayRefundNeedModel payModel) { _logger.LogInformation("退款开始"); MessageModel <PayRefundReturnResultModel> messageModel = new MessageModel <PayRefundReturnResultModel>(); messageModel.response = new PayRefundReturnResultModel(); try { _logger.LogInformation($"原始GET参数->{_httpContextAccessor.HttpContext.Request.QueryString}"); string REQUEST_SN = StringHelper.GetGuidToLongID().ToString().Substring(0, 16); //请求序列码 string CUST_ID = StaticPayInfo.MERCHANTID; //商户号 string USER_ID = StaticPayInfo.USER_ID; //操作员号 string PASSWORD = StaticPayInfo.PASSWORD; //密码 string TX_CODE = "5W1004"; //交易码 string LANGUAGE = "CN"; //语言 //string SIGN_INFO = "";//签名信息 //string SIGNCERT = "";//签名CA信息 //外联平台客户端服务部署的地址+设置的监听端口 string sUrl = StaticPayInfo.OutAddress; //XML请求报文 //string sRequestMsg = $" requestXml=<?xml version=\"1.0\" encoding=\"GB2312\" standalone=\"yes\" ?><TX><REQUEST_SN>{REQUEST_SN}</REQUEST_SN><CUST_ID>{CUST_ID}</CUST_ID><USER_ID>{USER_ID}</USER_ID><PASSWORD>{PASSWORD}</PASSWORD><TX_CODE>{TX_CODE}</TX_CODE><LANGUAGE>{LANGUAGE}</LANGUAGE><TX_INFO><MONEY>{payModel.MONEY}</MONEY><ORDER>{payModel.ORDER}</ORDER><REFUND_CODE>{payModel.REFUND_CODE}</REFUND_CODE></TX_INFO><SIGN_INFO></SIGN_INFO><SIGNCERT></SIGNCERT></TX> "; string sRequestMsg = $"<?xml version=\"1.0\" encoding=\"GB2312\" standalone=\"yes\" ?><TX><REQUEST_SN>{REQUEST_SN}</REQUEST_SN><CUST_ID>{CUST_ID}</CUST_ID><USER_ID>{USER_ID}</USER_ID><PASSWORD>{PASSWORD}</PASSWORD><TX_CODE>{TX_CODE}</TX_CODE><LANGUAGE>{LANGUAGE}</LANGUAGE><TX_INFO><MONEY>{payModel.MONEY}</MONEY><ORDER>{payModel.ORDER}</ORDER><REFUND_CODE>{payModel.REFUND_CODE}</REFUND_CODE></TX_INFO><SIGN_INFO></SIGN_INFO><SIGNCERT></SIGNCERT></TX> "; //string sRequestMsg = readRequestFile("E:/02-外联平台/06-测试/测试报文/商户网银/客户端连接-5W1001-W06.txt"); //注意:请求报文必须放在requestXml参数送 sRequestMsg = "requestXml=" + sRequestMsg; _logger.LogInformation("请求地址:" + sUrl); _logger.LogInformation("请求报文:" + sRequestMsg); HttpWebRequest request = (System.Net.HttpWebRequest)HttpWebRequest.Create(sUrl); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.KeepAlive = false; request.Connection = ""; //外联平台使用GB18030编码,这里进行转码处理 byte[] byteRquest = Encoding.GetEncoding("GB18030").GetBytes(sRequestMsg); request.ContentLength = byteRquest.Length; //发送请求 Stream writerStream = request.GetRequestStream(); await writerStream.WriteAsync(byteRquest, 0, byteRquest.Length); writerStream.Flush(); writerStream.Close(); //接收请求 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream result = response.GetResponseStream(); StreamReader readerResult = new StreamReader(result, System.Text.Encoding.GetEncoding("GB18030")); string sResult = await readerResult.ReadToEndAsync(); _logger.LogInformation("响应报文:" + sResult); var Xmlresult = XmlHelper.ParseFormByXml <PayRefundReturnModel>(sResult, "TX"); if (Xmlresult.RETURN_CODE.Equals("000000")) { messageModel.success = true; messageModel.msg = "退款成功"; } else { messageModel.success = false; messageModel.msg = "退款失败"; } messageModel.response.RETURN_MSG = Xmlresult.RETURN_MSG; messageModel.response.TX_CODE = Xmlresult.TX_CODE; messageModel.response.REQUEST_SN = Xmlresult.REQUEST_SN; messageModel.response.RETURN_CODE = Xmlresult.RETURN_CODE; messageModel.response.CUST_ID = Xmlresult.CUST_ID; messageModel.response.LANGUAGE = Xmlresult.LANGUAGE; messageModel.response.AMOUNT = Xmlresult.TX_INFO?.AMOUNT; messageModel.response.PAY_AMOUNT = Xmlresult.TX_INFO?.PAY_AMOUNT; messageModel.response.ORDER_NUM = Xmlresult.TX_INFO?.ORDER_NUM; } catch (Exception ex) { messageModel.success = false; messageModel.msg = "服务错误"; messageModel.response.RETURN_MSG = ex.Message; _logger.LogInformation($"异常信息:{ex.Message}"); _logger.LogInformation($"异常堆栈:{ex.StackTrace}"); } finally { _logger.LogInformation($"返回数据->{JsonHelper.GetJSON<MessageModel<PayRefundReturnResultModel>>(messageModel)}"); _logger.LogInformation("退款结束"); } return(messageModel); }
public async Task <MessageModel <PayRefundReturnResultModel> > PayRefund(PayRefundNeedModel payModel) { return(await _payServices.PayRefund(payModel)); }