예제 #1
0
        /// <summary>
        /// 生成支付经办请求信息xml字符串
        /// </summary>
        /// <param name="payInfo"></param>
        /// <returns></returns>
        private string PaySAVInfoXMLStr(PaySAVInfo payInfo)
        {
            string        head = "<?xml version='1.0' encoding='GBK'?><PGK><DATA><![CDATA[";
            StringBuilder sb   = new StringBuilder();

            sb.Append("<?xml version='1.0' encoding='GBK'?>");
            sb.Append("<CBSERPPGK>");
            sb.Append("<INFO><FUNNAM>ERPAYSAV</FUNNAM></INFO>");
            sb.Append("<APPAYSAVX>");
            sb.Append($"<BNKTYP>{payInfo.BNKTYP}</BNKTYP>");
            sb.Append($"<BUSTYP>{payInfo.BUSTYP}</BUSTYP>");
            sb.Append($"<CCYNBR>{payInfo.CCYNBR}</CCYNBR>");
            sb.Append($"<PAYTYP>{payInfo.PAYTYP}</PAYTYP>");
            sb.Append($"<CLTACC>{payInfo.CLTACC}</CLTACC>");
            sb.Append($"<CLTNBR>{payInfo.CLTNBR}</CLTNBR>");
            sb.Append($"<EPTDAT>{payInfo.EPTDAT}</EPTDAT>");
            sb.Append($"<EPTTIM>{payInfo.EPTTIM}</EPTTIM>");
            sb.Append($"<EXTTX1>{payInfo.EXTTX1}</EXTTX1>");
            sb.Append($"<OPRMOD>{payInfo.OPRMOD}</OPRMOD>");
            sb.Append($"<OPRTYP>{payInfo.OPRTYP}</OPRTYP>");
            sb.Append($"<REFNBR>{payInfo.REFNBR}</REFNBR>");
            sb.Append($"<REVACC>{payInfo.REVACC}</REVACC>");
            sb.Append($"<REVBNK>{payInfo.REVBNK}</REVBNK>");
            sb.Append($"<REVCIT>{payInfo.REVCIT}</REVCIT>");
            sb.Append($"<REVEML/><REVMOB/>");
            sb.Append($"<REVNAM>{payInfo.REVNAM}</REVNAM>");
            sb.Append($"<REVPRV>{payInfo.REVPRV}</REVPRV>");
            sb.Append($"<TRSAMT>{payInfo.TRSAMT}</TRSAMT>");
            sb.Append($"<TRSUSE>{payInfo.TRSUSE}</TRSUSE>");
            sb.Append("</APPAYSAVX>");
            sb.Append("</CBSERPPGK>");

            string body      = sb.ToString();
            string mbody     = body.Replace("\n", "").Replace("\r", "");
            string checkCode = this.CheckCode(CRC32_PASSWORD + Key + mbody);
            string end       = $"]]></DATA><CHECKCODE>{checkCode}</CHECKCODE></PGK>";

            return(head + body + end);
        }
예제 #2
0
        /// <summary>
        /// 支付经办
        /// </summary>
        /// <param name="payInfo">支付信息</param>
        /// <param name="startIndex">支付失败开启轮询的起始数字</param>
        /// <param name="endIndex">支付失败开启轮询的终止数字</param>
        /// <param name="cbsRespAction">cbs返回参数回调函数,主要用于记录日志</param>
        /// <param name="payParamAction">支付参数回调函数,主要用于记录日志,返回失败才会执行,第一个参数是请求参数,第二个参数是错误信息</param>
        /// <returns>item1:客户业务参考号  item2:业务流水号</returns>
        public Tuple <string, string> PaySAV(PaySAVInfo payInfo, int startIndex, int endIndex, Action <string> cbsRespAction = null, Action <string, string> payParamAction = null)
        {
            string error = "";
            //生成支付请求信息参数
            string param   = this.PaySAVInfoXMLStr(payInfo);
            string respStr = HttpHelper.Post(Url, param);

            cbsRespAction?.Invoke(respStr);

            respStr = this.GetXMLInnerData(respStr);
            CBSERPPGK respObj = XMLHelper.DeserializeToObject <CBSERPPGK>(respStr);

            if (!respObj.IsSucess)
            {
                bool flag1 = false;
                bool flag2 = false;
                bool flag3 = false;

                if (respObj.INFO != null)
                {
                    respObj.INFO.ERRMSG = respObj.INFO.ERRMSG.Replace("\n", "");
                    if (!string.IsNullOrEmpty(respObj.INFO.ERRMSG))
                    {
                        error += "\n" + respObj.INFO.ERRMSG;
                    }
                    else
                    {
                        flag1 = !flag1;
                    }
                }
                if (respObj.APPAYSAVZ != null)
                {
                    respObj.APPAYSAVZ.ERRMSG = respObj.APPAYSAVZ.ERRMSG.Replace("\n", "");
                    if (!string.IsNullOrEmpty(respObj.APPAYSAVZ.ERRMSG))
                    {
                        error += "\n" + respObj.APPAYSAVZ.ERRMSG;
                    }
                    else
                    {
                        flag2 = !flag2;
                    }
                }
                if (respObj.SYCOMRETZ != null)
                {
                    respObj.SYCOMRETZ.ERRMSG = respObj.SYCOMRETZ.ERRMSG.Replace("\n", "");
                    if (!string.IsNullOrEmpty(respObj.SYCOMRETZ.ERRMSG))
                    {
                        error += "\n" + respObj.SYCOMRETZ.ERRMSG;
                    }
                    else
                    {
                        flag3 = !flag3;
                    }
                }

                payParamAction?.Invoke(param, error);

                //非支付信息错误问题导致的支付失败,轮询请求
                if (flag1 && flag2 && flag3 && startIndex <= endIndex)
                {
                    startIndex += 1;
                    this.PaySAV(payInfo, startIndex, endIndex, cbsRespAction, payParamAction);
                }
                return(new Tuple <string, string>(null, null));
            }
            else
            {
                Tuple <string, string> tuple = new Tuple <string, string>(respObj.APPAYSAVZ.REFNBR, respObj.APPAYSAVZ.BUSNBR);
                return(tuple);
            }
        }