Пример #1
0
        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);
        }
Пример #2
0
 public async Task <MessageModel <PayRefundReturnResultModel> > PayRefund(PayRefundNeedModel payModel)
 {
     return(await _payServices.PayRefund(payModel));
 }