/// <summary> /// 记录支付宝返回信息到数据库 /// </summary> /// <param name="info"></param> /// <param name="jysj"></param> /// <param name="msg"></param> /// <returns></returns> private int LogAlipayRetInfo(AlipayReplyInfo info, DateTime jysj, out string msg) { OracleConnection connection = new OracleConnection(WebConfigParameter.ConnectionHisString); OracleDataReader dr = null; int ret = -1; msg = ""; long count = 0; try { string sql = _builder.AlipayShtzCountSql(info.tradeno); dr = DbHelperOra.ExecuteReader(sql, connection); if (dr.Read()) { count = !dr.IsDBNull(0) ? dr.GetInt64(0) : 0; } if (count > 0) { msg = "已经交易记录,无需插入"; ret = 38; return(ret); } //记录支付宝返回记录 ret = WriteAlipayRetInfoToDB(info, jysj, out msg); if (ret != 0) { msg += "记录日志失败"; ret = 39; } return(ret); } catch (Exception ex) { msg = GetExceptionInfo(ex); return(-1); } finally { if (null != dr) { dr.Close(); } if (null != connection && connection.State == ConnectionState.Open) { connection.Close(); } } }
/// <summary> /// 支付宝返回信息写入到数据库 /// </summary> /// <param name="info"></param> /// <param name="jysj"></param> /// <param name="msg"></param> /// <returns></returns> private int WriteAlipayRetInfoToDB(AlipayReplyInfo info, DateTime jysj, out string msg) { int ret = -1; OracleConnection conn1 = new OracleConnection(WebConfigParameter.ConnectionHisString); if (conn1.State != ConnectionState.Open) { conn1.Open(); } OracleTransaction tx1 = conn1.BeginTransaction(); try { string ylcode = "", ylmc = "支付宝服务窗"; string insertSql = _builder.InsertAlipaySHTZSql(info, jysj); string updateStatus = _builder.UpdateAlipayDDStatusSql(info, ylcode, ylmc); ArrayList listSql = new ArrayList(); int exeSql; listSql.Add(insertSql); listSql.Add(updateStatus); exeSql = -1; DbHelperOra.ExecuteSqlTran(conn1, tx1, listSql, out exeSql, out msg); if (exeSql != 0) { tx1.Rollback(); return(exeSql); } tx1.Commit(); return(0); } catch (Exception ex) { msg = GetExceptionInfo(ex); ret = -1; return(ret); } finally { if (null != conn1 && ConnectionState.Open == conn1.State) { conn1.Close(); } } }
/// <summary> /// 订单表中是否存在订单 /// </summary> /// <param name="info"></param> /// <param name="brid"></param> /// <param name="brlx"></param> /// <param name="czje"></param> /// <param name="msg"></param> /// <returns></returns> private int ExistAlipayOrder(AlipayReplyInfo info, out string brid, out string brlx, out double czje, out string msg) { OracleConnection connection = new OracleConnection(WebConfigParameter.ConnectionHisString); OracleDataReader dr = null; int ret = -1; msg = ""; brid = ""; brlx = ""; czje = 0; try { string findId = _builder.QueryOrderInfoSql(info.tradeno); dr = DbHelperOra.ExecuteReader(findId, connection); if (dr.Read()) { brid = !dr.IsDBNull(0) ? Convert.ToString(dr.GetInt64(0)) : ""; czje = !dr.IsDBNull(1) ? dr.GetDouble(1) : 0; brlx = !dr.IsDBNull(2) ? Convert.ToString(dr.GetInt32(2)) : ""; ret = 0; } else { msg = "没有该订单,数据非法"; ret = 40; } return(ret); } catch (Exception ex) { msg = GetExceptionInfo(ex); ret = -1; return(ret); } finally { if (null != dr) { dr.Close(); } if (null != connection && ConnectionState.Open == connection.State) { connection.Close(); } } }
/// <summary> /// 充值金额是否正常 /// </summary> /// <param name="info"></param> /// <param name="czje"></param> /// <param name="msg"></param> /// <returns></returns> private int AlipayValidAmount(AlipayReplyInfo info, double czje, out string msg) { int ret = -1; msg = ""; if (czje <= 0 || czje > 10000 || (Convert.ToDouble(info.money) != czje)) { msg = "充值金额异常"; ret = 41; } else { ret = 0; } return(ret); }
/// <summary> /// 商户通知预存成功 /// </summary> /// <param name="openid">用户标识</param> /// <param name="patientname">病人姓名</param> /// <param name="patientid">病人ID</param> /// <param name="tradeno">订单号</param> /// <param name="paymenttradeno">支付平台订单号</param> /// <param name="money">金额</param> /// <param name="paymentparameters">通知参数</param> /// <returns></returns> public XmlDocument PredepositSuccess(AlipayReplyInfo info, string brlx) { XmlDocument doc = new XmlDocument(); try { //以下实现数据操作逻辑 AilpayPaymentDB pdb = new AilpayPaymentDB(); string error_msg; int ret = pdb.DB_InsertAlipay(info, brlx, out error_msg); if (ret == 0) { XmlElement root = doc.CreateElement(AppUtils.Tag_REXML_Root); doc.AppendChild(root); XmlElement eleResult = doc.CreateElement(AppUtils.Tag_REXML_Result); eleResult.InnerText = AppUtils.Value_Return_Success; root.AppendChild(eleResult); XmlElement eleMsg = doc.CreateElement(AppUtils.Tag_REXML_Message); root.AppendChild(eleMsg); XmlElement eleValue = doc.CreateElement(AppUtils.Tag_REXML_Value); eleMsg.AppendChild(eleValue); XmlElement eleYylsh = doc.CreateElement(AppUtils.Tag_User_Tradeno); eleValue.AppendChild(eleYylsh); eleYylsh.InnerText = StringHelper.YylshHasPrefix(info.tradeno); } else { doc = ErrorReturnXml(ret, error_msg); } } catch (Exception ex) { doc = ReplyXmlDoc.GetExceptionXML(AppUtils.Default_Exception_Code, ex); } return(doc); }
/// <summary> /// 商户通知 /// </summary> /// <param name="info">通知信息</param> /// <param name="brlx">病人类型</param> /// <returns>0:成功 大于0:出错 小于0:异常</returns> public int DB_InsertAlipay(AlipayReplyInfo info, string brlx, out string msg) { UtilLog.GetInstance().WriteOrderLog("Order: ", info.AlipayInfoToString()); msg = ""; DateTime jysj; if (DB_Sysdate(out jysj) == false) { msg = "读取系统时间出错"; return(24); } int ret = -1; try { //记录支付宝返回信息到数据库 ret = LogAlipayRetInfo(info, jysj, out msg); if (ret != 0) { return(ret); } if (string.IsNullOrEmpty(info.paymenttradeno) || string.IsNullOrEmpty(info.paymentparameters)) { msg = "银联返回充值不成功"; return(25); } //判断订单是否存在 double czje = 0; string brid = null, brlx2 = null; ret = ExistAlipayOrder(info, out brid, out brlx2, out czje, out msg); if (ret != 0) { return(ret); } if (brlx != brlx2) { msg = "订单病人类型异常"; return(26); } //充值金额是否正常 ret = AlipayValidAmount(info, czje, out msg); if (ret != 0) { return(ret); } //更新HIS ret = DB_InsertAlipayForHis(info, brid, brlx, czje, jysj, out msg); return(ret); } catch (Exception ex) { UtilLog.GetInstance().WriteProgramLog(System.Reflection.MethodBase.GetCurrentMethod().Name, ex); msg = GetExceptionInfo(ex); return(-1); } }
private int DB_InsertAlipayForHis(AlipayReplyInfo info, string brid, string brlx, double czje, DateTime jysj, out string msg) { int ret = -1; msg = ""; OracleConnection conn = new OracleConnection(WebConfigParameter.ConnectionHisString); if (conn.State != ConnectionState.Open) { conn.Open(); } OracleTransaction tx = conn.BeginTransaction(); try { //更新HIS表记录 if (WebConfigParameter.HospitalName() == AppUtils.HOSPITALNAME.WZSDQRMYY) { int otherResult = -99; if (!string.IsNullOrEmpty(info.paymenttradeno) && !string.IsNullOrEmpty(info.paymentparameters)) { otherResult = DB_AlipayUpdateHisCharge(conn, tx, info.paymenttradeno, czje, brid, brlx, jysj, out msg); if (otherResult != 0) { tx.Rollback(); msg = "HIS更新数据不成功。"; return(36); } msg = "充值成功。"; ret = 00; } else { msg = "银联返回失败"; ret = 37; } } tx.Commit(); ret = 0; return(ret); } catch (Exception ex) { tx.Rollback(); UtilLog.GetInstance().WriteProgramLog(System.Reflection.MethodBase.GetCurrentMethod().Name, ex); msg = GetExceptionInfo(ex); ret = -1; return(ret); } finally { if (null != conn && conn.State == ConnectionState.Open) { conn.Close(); } } }