static int pack_body(TRANS& trans,std::string& body) { int ret = 0; gReader.fetchRow(); //生成交易流水号并记录 ret = GetNewRefno(trans.refno); if (ret) { return ret; } TiXmlDocument doc; { TiXmlElement root("ROOT"); doc.InsertEndChild(root); } char dt[15] = {0}; getsysdatetime(dt); string now(dt); stringstream ss; TiXmlNode& root = *(doc.FirstChild()); //版本号 ec_add_xml_node_value(root,"VERSION", "010101" ); //交易代码 ec_add_xml_node_value(root,"TRANS_TYPE", "120321" ); //动作代码 ec_add_xml_node_value(root,"ACTION_TYPE", "1"); /*//响应代码 ec_add_xml_node_value(root,"RESP_CODE", );*/ //登录身份类型 ec_add_xml_node_value(root,"LOGIN_TYPE", "1"); //交易渠道 ec_add_xml_node_value(root,"TRANS_SOURCE", "BP"); //登录机构代码 ec_add_xml_node_value(root,"LOGIN_INST_CODE", "48080000"); //交易日期 { string str; str.assign(trans.accdate,8); ec_add_xml_node_value(root,"TXN_DATE", str); } //交易时间 { string str; str.assign(trans.acctime,6); ec_add_xml_node_value(root,"TXN_TIME", str); } //跟踪号/流水号 { string str; str.assign(trans.refno,14); //str[6]='0'; //str[7]='0'; str=str.substr(6); //str.append(1,'1'); ec_add_xml_node_value(root,"TRACE_NO", str); } //登录网点代码 { string str; ret = get_ec_para(YTCEC_LOGIN_MERCH, str); if (ret) { LOG(ERROR, "中银通登录网点代码未配置"); return E_COMMON_ERR; } ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", str); } //ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", "J001"); //登录操作员代码 { string str; ret = get_ec_para(YTCEC_LOGIN_USER, str); if (ret) { LOG(ERROR, "中银通登录操作员代码未配置"); return E_COMMON_ERR; } ec_add_xml_node_value(root,"LOGIN_USER_CODE", str); } //ec_add_xml_node_value(root,"LOGIN_USER_CODE", "A5"); std::string ocard_no ; // 旧卡卡号 std::string validtid ; // 持卡人身份验证 std::string password ; // 密码 std::string idcode ; // 客户证件类型 std::string idtype ; // 客户证件号码 std::string name ; // 客户名 std::string familyname ; // 客户姓 std::string name_spell ; // 拼音名 std::string familyname_spell ; // 拼音姓 std::string birthday ; // 生日 std::string telphone ; // 电话号码 std::string mobile ; // 手机 std::string corpname ; // 工作单位 std::string address ; // 地址 std::string postcode ; // 邮编 std::string email ; // 电邮 std::string roomno ; // 房间 std::string floorno ; // 楼层 std::string homeaddr ; // 住址 std::string estate ; // ESTATE std::string street ; // 街道 std::string district ; // DISTRICT std::string area ; // 地区 std::string newcardno ; // 新卡号 std::string selectpin ; // 卡密码选择 std::string activeswitch ; // 是否激活 std::string feeswitch ; // 收费标志 std::string fee ; // 换卡费金额 std::string paytype ; // 付款方式 std::string creditcardno ; // 信用卡号 std::string memocode ; // 回执号码 std::string reason ; // 换卡原因 std::string newcardfield55; //55域 string reserved; //保留 //旧卡卡号 { ss.str(""); COL2VAR(ocard_no); ss << ocard_no; ec_add_xml_node_value(root,"PRIMARY_ACCT_NUM",ss.str()); } //持卡人身份验证 { ss.str(""); COL2VAR(validtid); ss << validtid; ec_add_xml_node_value(root,"VALIDTID",ss.str()); } //密码 { ss.str(""); COL2VAR(password); ss << password; ec_add_xml_node_value(root,"CUSTPASSWORD",ss.str()); } //客户证件类型 { ss.str(""); COL2VAR(idcode); ss << idcode; ec_add_xml_node_value(root,"IDTYPE",ss.str()); } //客户证件号码 { ss.str(""); COL2VAR(idtype); ss << idtype; ec_add_xml_node_value(root,"IDCODE",ss.str()); } //客户名 { ss.str(""); COL2VAR(name); ss << name; ec_add_xml_node_value(root,"NAME",ss.str()); } //客户姓 { ss.str(""); COL2VAR(familyname); ss << familyname; ec_add_xml_node_value(root,"SNAME",ss.str()); } //拼音名 { ss.str(""); COL2VAR(name_spell); ss << name_spell; ec_add_xml_node_value(root,"SPELL_NAME",ss.str()); } //拼音姓 { ss.str(""); COL2VAR(familyname_spell); ss << familyname_spell; ec_add_xml_node_value(root,"SPELL_SNAME",ss.str()); } //生日 { ss.str(""); COL2VAR(birthday); ss << birthday; ec_add_xml_node_value(root,"BIRTHDAY",ss.str()); } //电话号码 { ss.str(""); COL2VAR(telphone); ss << telphone; ec_add_xml_node_value(root,"COPHONE",ss.str()); } //手机 { ss.str(""); COL2VAR(mobile); ss << mobile; ec_add_xml_node_value(root,"MOBILE",ss.str()); } //工作单位 { ss.str(""); COL2VAR(corpname); ss << corpname; ec_add_xml_node_value(root,"BUS_NAME",ss.str()); } //地址 { ss.str(""); COL2VAR(address); ss << address; ec_add_xml_node_value(root,"ADDR",ss.str()); } //邮编 { ss.str(""); COL2VAR(postcode); ss << postcode; ec_add_xml_node_value(root,"POST",ss.str()); } //电邮 { ss.str(""); COL2VAR(email); ss << email; ec_add_xml_node_value(root,"EMAIL",ss.str()); } //房间 { ss.str(""); COL2VAR(roomno); ss << roomno; ec_add_xml_node_value(root,"ROOM",ss.str()); } //楼层 { ss.str(""); COL2VAR(floorno); ss << floorno; ec_add_xml_node_value(root,"FLOOR",ss.str()); } //住址 { ss.str(""); COL2VAR(homeaddr); ss << homeaddr; ec_add_xml_node_value(root,"BUILDING",ss.str()); } //ESTATE { ss.str(""); COL2VAR(estate); ss << estate; ec_add_xml_node_value(root,"ESTATE",ss.str()); } //街道 { ss.str(""); COL2VAR(street); ss << street; ec_add_xml_node_value(root,"STREET",ss.str()); } //DISTRICT { ss.str(""); COL2VAR(district); ss << district; ec_add_xml_node_value(root,"DISTRICT",ss.str()); } //地区 { ss.str(""); COL2VAR(area); ss << area; ec_add_xml_node_value(root,"REGION",ss.str()); } //新卡号 { ss.str(""); COL2VAR(newcardno); ss << newcardno; ec_add_xml_node_value(root,"NCARD_NO",ss.str()); } //卡密码选择 { ss.str(""); COL2VAR(selectpin); ss << selectpin; ec_add_xml_node_value(root,"SELECTPIN",ss.str()); } //是否激活 { ss.str(""); COL2VAR(activeswitch); ss << activeswitch; ec_add_xml_node_value(root,"ACTIVE",ss.str()); } //收费标志 { ss.str(""); COL2VAR(feeswitch); ss << feeswitch; ec_add_xml_node_value(root,"FEEFLG",ss.str()); } //换卡费金额 { ss.str(""); COL2VAR(fee); ss << fee; ec_add_xml_node_value(root,"FEE",ss.str()); } //付款方式 { ss.str(""); COL2VAR(paytype); ss << paytype; ec_add_xml_node_value(root,"PAYMENTWAY",ss.str()); } //信用卡号 { ss.str(""); COL2VAR(creditcardno); ss << creditcardno; ec_add_xml_node_value(root,"CREDITNO",ss.str()); } //回执号码 { ss.str(""); COL2VAR(memocode); ss << memocode; ec_add_xml_node_value(root,"MEMOCODE",ss.str()); } //换卡原因 { ss.str(""); COL2VAR(reason); ss << reason; ec_add_xml_node_value(root,"REAS",ss.str()); } //IC卡数据域(对应银联标准中55域,下列都是其子域) ec_add_xml_node_value(root,"ICC_DATA", ""); TiXmlNode* icc_data; ec_xml_get_xml_childnode(root,"ICC_DATA",&icc_data); //解析55域字段,存入map map<std::string,std::string> tag_map; COL2VAR(newcardfield55); string field55(newcardfield55); LOG(DEBUG, "55"<<newcardfield55); string tag_field_name(""),tag_field_value(""); while (field55.length()>0) { get_first_field(field55,tag_field_name,tag_field_value); LOG(DEBUG, "tag_field_name"<<tag_field_name<<"tag_field_value"<<tag_field_value); tag_map[tag_field_name]=tag_field_value; } //交易计数器 ec_add_xml_node_value(*icc_data, "TAG_9F36", tag_map["9F36"]); //应用密文 ec_add_xml_node_value(*icc_data, "TAG_9F26", tag_map["9F26"]); //发卡行自定义数据 ec_add_xml_node_value(*icc_data, "TAG_9F10", tag_map["9F10"]); //授权金额 ec_add_xml_node_value(*icc_data, "TAG_9F02", tag_map["9F02"]); //其他金额 ec_add_xml_node_value(*icc_data, "TAG_9F03", tag_map["9F03"]); //终端国家代码 ec_add_xml_node_value(*icc_data, "TAG_9F1A", tag_map["9F1A"]); //终端验证结果 ec_add_xml_node_value(*icc_data, "TAG_95", tag_map["95"]); //交易货币代码 ec_add_xml_node_value(*icc_data, "TAG_5F2A", tag_map["5F2A"]); //交易日期 ec_add_xml_node_value(*icc_data, "TAG_9A", tag_map["9A"]); //交易类型 ec_add_xml_node_value(*icc_data, "TAG_9C", tag_map["9C"]); //不可预知数 ec_add_xml_node_value(*icc_data, "TAG_9F37", tag_map["9F37"]); //应用交互特征 ec_add_xml_node_value(*icc_data, "TAG_82", tag_map["82"]); //第一币种货币代码 ec_add_xml_node_value(*icc_data, "TAG_9F71", tag_map["9F71"]); //第一币种余额 ec_add_xml_node_value(*icc_data, "TAG_9F79", tag_map["9F79"]); //保留域 { ss.str(""); COL2VAR(reserved); ss<<reserved; ec_add_xml_node_value(root,"RESERVED",ss.str()); } //报文鉴别码 // ec_add_xml_node_value(root, "MESG_AUTHN_CODE", "87AE"); ec_bank_any_ytc::calc_trans_mac(&root); TiXmlPrinter printer; doc.Accept(&printer); char xml_header[100]="<?xml version='1.0' encoding='GBK'?>\n"; body.append(xml_header); body += printer.CStr(); return 0; }
int F846333(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); des2src(pAccTrans->trans.opercode,rPack->semp); pAccTrans->trans.transcode=TC_EACCDEPOSIT; ret=pAccTrans->InitTrans(); if(ret) return ret; TRANS& trans=pAccTrans->trans; T_t_transdtl transdtl; //add by chen 2012-01-04 memset(&transdtl, 0, sizeof(transdtl)); //add by chen 2012-01-04 ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); des2src(trans.craccno,rPack->sbank_acc); //贷方账号 des2src(trans.eaccno,rPack->sbank_acc); //电子钱包账号 if(!strlen(trans.eaccno)) return E_INPUTNULL_ACCNO; //检查客户 //去帐户信息 T_t_netacc tNetAcc; memset(&tNetAcc,0,sizeof(tNetAcc)); ret=DB_t_netacc_read_by_accno(trans.eaccno,&tNetAcc); if(ret) { writelog(LOG_ERR,"accno[%s]",trans.eaccno); if(DB_NOTFOUND==ret) return E_NOTEXIST_EACCNO; else return E_DB_ACCOUNT_R; } if(tNetAcc.status[0]!=STATUS_NORMAL) { return E_EACCNO_LOGOUT; } // 创建账号 pAccTrans->trans.custid=tNetAcc.custid; //客户号 pAccTrans->trans.inputamt=rPack->damt0; //输入金额 pAccTrans->trans.unusedamt = trans.inputamt; //剩余金额 if(!pAccTrans->trans.inputamt) return E_INPUT_AMT_NULL; pAccTrans->trans.fundtype=rPack->lvol9; //资金类型 des2src(pAccTrans->trans.voucherno,rPack->scust_auth2); ret=pAccTrans->doTrans(); if(ret) return ret; SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); des2src(outPack->sdate3,pAccTrans->trans.accdate); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; sprintf(outPack->vsmess,"客户[%s] %s 帐户余额:%.2f元",tNetAcc.accname,pAccTrans->remark.c_str(),pAccTrans->trans.craccaftbal); des2src(trans.remark,outPack->vsmess); PutRow(handle,outPack,pRetCode,szMsg); //start add by chen 2012-01-04 transdtl.transflag = 1; //交易标志 1为充值 transdtl.status[0] = '3'; //流水状态 3是成功 transdtl.termid = trans.termid; //终端编号 transdtl.termseqno = trans.termseqno; //终端流水号 strncpy(transdtl.transdate, trans.transdate, 8); //交易日期 strncpy(transdtl.transtime, trans.transtime, 6); //交易时间 transdtl.transcode = trans.transcode; //交易码 transdtl.custid = trans.custid; //客户号 GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); //学工号 strncpy(transdtl.custname, tNetAcc.accname, 61); //客户名 strncpy(transdtl.voucherno, trans.voucherno, 21); //凭证号 transdtl.amount= trans.transamt; //交易金额 transdtl.cardbefbal= trans.craccbefbal; //交易前余额 transdtl.cardaftbal = trans.craccaftbal; //交易后余额 transdtl.paytype = rPack->lvol9; //支付方式 strncpy(transdtl.accdate, trans.accdate, 8); //记账日期 strncpy(transdtl.acctime, trans.acctime, 6); //记账时间 strncpy(transdtl.opercode, trans.opercode, 9); //操作员 // 产生交易参考号 T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); get_random(tRefno.mac); ret= GetNewRefno(tRefno.refno); if(ret) return ret; des2src(tRefno.lastsaved,trans.sysdatetime); des2src(tRefno.accdate,trans.accdate); tRefno.termid = trans.termid; tRefno.termseqno = trans.termseqno; tRefno.status = RS_SUCC; ret=DB_t_refno_add(&tRefno); if(ret) { if(DB_REPEAT==ret) return E_DB_REFNO_E; else return E_DB_REFNO_I; } strncpy(transdtl.refno, tRefno.refno, 14); //交易参考号 //添加交易流水记录 ret = DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT == ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } //end add by chen 2012-01-04 return 0; }
int F846340(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; trans.transcode=TC_EACC2SHOP; trans.transtype = TRANSTYPE_EACCPAYMENT; // 支付交易 //trans.termid=TERMID_WEB; trans.termid=rPack->lcert_code; // 使用支付网关的注册ID ret=pAccTrans->InitTrans(); if(ret) return ret; trans.inputamt=D4U5(rPack->damt0,2); trans.unusedamt = trans.inputamt; trans.transamt=trans.inputamt; if(amtcmp(trans.inputamt,0)==0) return E_INPUT_AMT_NULL; if(amtcmp(trans.inputamt,0)<0) return E_INPUT_AMT; //查询电子钱包帐户 T_t_netacc tNetAccount; memset(&tNetAccount,0,sizeof(tNetAccount)); ret=DB_t_netacc_read_by_accno(rPack->scust_no,&tNetAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_EACCNO,rPack->scust_no); else return E_DB_ACCOUNT_R; } //检查电子钱包密码 if(rPack->lvol1 == 0) { // 检查电子账户密码 检查账户余额 if(strcmp(rPack->snote2,tNetAccount.paypwd)!=0) return E_EACCPWD; } if(tNetAccount.status[0]!=STATUS_NORMAL) // 账户状态 return ERRINFO(E_EACCNO_LOGOUT,tNetAccount.accno); if(tNetAccount.stoppayflag[0]=='1') // 止付标志 return ERRINFO(E_EACC_STOPPAY,tNetAccount.accno); if(rPack->lvol1 == 0) { // 检查电子账户密码 检查账户余额 if(amtcmp(trans.inputamt,tNetAccount.balance)>0) return ERRINFO(E_EACC_BALANCE_SHORTAGE,trans.inputamt-tNetAccount.balance); } /* double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); */ des2src(trans.draccno,tNetAccount.accno); trans.custid=tNetAccount.custid; des2src(trans.custname,tNetAccount.accname); // 支付转账 T_t_shop shop; memset(&shop,0,sizeof(shop)); ret=DB_t_shop_read_by_shopid(rPack->lvol0,&shop); if(ret) { if(DB_NOTFOUND==ret) return E_NOTEXIST_SHOPID; else return E_DB_SHOP_R; } if(shop.status[0]!=STATUS_NORMAL) return E_SHOP_LOGOUT; if(shop.shoptype!=SHOPTYPE_ESHOP) return ERRIF_SHOP_TYPE; des2src(trans.craccno,shop.accno); // 产生交易参考号 T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); get_random(tRefno.mac); ret= GetNewRefno(tRefno.refno); if(ret) return ret; des2src(tRefno.lastsaved,trans.sysdatetime); des2src(tRefno.accdate,trans.accdate); tRefno.termid = trans.termid; tRefno.termseqno = trans.termseqno; tRefno.status = RS_SUCC; ret=DB_t_refno_add(&tRefno); if(ret) { if(DB_REPEAT==ret) return E_DB_REFNO_E; else return E_DB_REFNO_I; } des2src(trans.refno, tRefno.refno); ret=pAccTrans->doTrans(); if(ret) return ret; // 添加电子账户支付信息 T_t_epay_record t_epay_record; memset(&t_epay_record,0,sizeof(t_epay_record)); des2src(t_epay_record.refno, tRefno.refno); t_epay_record.shopid = shop.shopid; des2src(t_epay_record.oid, rPack->sbankname); des2src(t_epay_record.accno,tNetAccount.accno); des2src(t_epay_record.accname,tNetAccount.accname); t_epay_record.amount = trans.inputamt; des2src(t_epay_record.currency,rPack->sstock_code); des2src(t_epay_record.epay_date,trans.accdate); des2src(t_epay_record.epay_time,trans.acctime); t_epay_record.status = 1; // 交易成功 t_epay_record.transcode = trans.transcode; des2src(t_epay_record.remark,rPack->snote); ret=DB_t_epay_record_add(&t_epay_record); if(ret) return ret; // 添加交易流水 T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.refno,tRefno.refno); // 交易参考号 des2src(transdtl.transdate,trans.accdate); des2src(transdtl.transtime,trans.acctime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.transflag=TF_PAY; transdtl.managefee=trans.totalfeeamt; des2src(transdtl.custname,tNetAccount.accname); transdtl.amount = trans.inputamt; des2src(transdtl.opercode,trans.opercode); transdtl.cardbefbal = trans.draccbefbal; transdtl.cardaftbal = trans.draccaftbal; des2src(transdtl.coldate,trans.accdate); des2src(transdtl.coltime,trans.acctime); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.revflag[0]='0'; transdtl.custid=tNetAccount.custid; GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_SCUST_NO, F_SDATE0,F_STIME0, F_DAMT0,F_SPHONE3,F_SADDR,F_VSMESS,0); outPack->lvol0=shop.shopid; des2src(outPack->scust_no,tNetAccount.accno); des2src(outPack->sdate0,trans.accdate); des2src(outPack->stime0,trans.acctime); des2src(outPack->sphone3,tRefno.refno); // 一卡通流水号,冲正使用 des2src(outPack->saddr,tRefno.mac); // MAC 冲正使用 outPack->damt0=trans.draccaftbal; // 余额 char temp[128]=""; sprintf(temp,"%s 支付成功,电子钱包余额:%.2f", tNetAccount.accname, trans.draccaftbal); pAccTrans->remark+=temp; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); des2src(trans.remark,outPack->vsmess); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
int F240020(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); pAccTrans->trans.transcode=TC_BANKTRANS; TRANS& trans=pAccTrans->trans; trans.termid=rPack->lcert_code; ret=pAccTrans->InitTrans(); if(ret) return ret; trans.inputamt = rPack->lvol5/100.0; trans.unusedamt=trans.inputamt; trans.cardflag=1; trans.usecardflag=1; trans.cardbefbal=rPack->lvol6/100.00; trans.dpscnt=rPack->lvol1+1; //充值次数 trans.cardaftbal=trans.cardbefbal; //转账不允许转小数金额 if((rPack->lvol5)%100>0) { writelog(LOG_ERR,"trans money is not a integer!,transmoney=[%f]",rPack->lvol5/100.0); strcpy(szMsg,"转账金额必须是整数"); return E_TRANS_TRANSMONEY_OUTRANGE; } if(rPack->lvol5<1) { writelog(LOG_ERR,"trans money is not a integer!,transmoney=[%f]",rPack->lvol5/100.0); strcpy(szMsg,"转账金额不能为0"); return E_TRANS_TRANSMONEY_OUTRANGE; } T_t_account tAccount; //帐户表 T_t_card card; T_t_bankcard bankcard; T_t_cfgbank cfgbank; T_t_device device; memset(&cfgbank,0,sizeof cfgbank); memset(&tAccount,0,sizeof(tAccount)); memset(&card,0,sizeof(card)); memset(&bankcard,0,sizeof(bankcard)); memset(&device,0,sizeof device); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_SCUST_AUTH,F_SNAME,F_SNAME2,F_LSERIAL0,F_STX_PWD,F_LVOL5,F_LVOL6,0); /*判断设备是否登陆 if(0!=device_login_yes_or_no(trans.termid)) { writelog(LOG_ERR,"Device don't login"); return E_TRANS_TERM_NOLOGIN; } */ /* char buffer[16]=""; //判断是否处于日终结算状态 ret=GetSysParaVal(GLOBE_FLAG_BALANCE,buffer); if(ret) { writelog(LOG_ERR,"GetSysParaVal error,errcode=[%d]",ret); return E_TRANS_UNKNOW_ERROR; } else if(strncmp(buffer,"0",1)!=0) { writelog(LOG_ERR,"System is balance now!"); return E_TRANS_BANK_SERVICE_NOEXIT; } */ ret=DB_t_device_read_by_deviceid(trans.termid, &device); if(ret) { writelog(LOG_ERR,"DB_t_device_read_by_deviceid err,errcode=[%d],device_id=[%d]",ret,trans.termid); return E_DB_DEVICE_R; } trans.cardno=rPack->lvol0; ret=pAccTrans->CheckAcc(&card,&tAccount); if(ret) return ret; if(amtcmp(trans.cardbefbal-tAccount.balance,MAXAMT_CARDGTACC)>=0) { writelog(LOG_ERR,"cardbefbal[%.2lf]account balance[%.2lf]",trans.cardbefbal,tAccount.balance); return ERRIF_CARDBAL_EXCEPT; } double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.feetype=card.feetype; trans.cardtype=card.cardtype; trans.custid=card.custid; // if(tAccount.lastdpscnt>trans.dpscnt) // { // return ERRINFO(E_CARDCNT_LT_LASTCARDCNT,trans.dpscnt,tAccount.lastdpscnt); // } //校验绑定关系 ret = DB_t_bankcard_read_by_custid(card.custid, &bankcard); if(ret) { if(DB_NOTFOUND==ret) { strcpy(szMsg,"学工号和银行卡号未绑定"); return E_DB_BANKCARD_N; } else { return E_DB_BANKCARD_R; } } ret = DB_t_cfgbank_read_by_bankcode(bankcard.bankcode,&cfgbank); if(ret) { return E_DB_CFGBANK_R; } if(strncmp(trans.acctime,cfgbank.bankstarttime,6) < 0 || strncmp(trans.acctime,cfgbank.bankendtime,6) > 0) { return E_OUT_BANKTIME; } //取流水号 ret=pAccTrans->GetTermSeqno(); if(ret) { writelog(LOG_ERR,"GetTermSeqno error,error code=[%d]",ret); return ret; } T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); get_random(tRefno.mac); ret= GetNewRefno(tRefno.refno); if(ret) return ret; des2src(tRefno.lastsaved,trans.sysdatetime); des2src(tRefno.accdate,trans.transdate); tRefno.termid = trans.termid; tRefno.termseqno = trans.termseqno; ret=DB_t_refno_add(&tRefno); if(ret) { if(DB_REPEAT==ret) return E_DB_REFNO_E; else return E_DB_REFNO_I; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag = TF_DPS; transdtl.cardcnt=trans.dpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.inputamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=tAccount.custid; //transdtl.sysid= rPack->lvol2; transdtl.exttype=EXTTYPE_BANKCARD; des2src(transdtl.extdata,bankcard.bankcardno); des2src(transdtl.showcardno,card.showcardno); transdtl.status[0]=DTLSTATUS_INIT; des2src(transdtl.refno,tRefno.refno); des2src(transdtl.devphyid,device.devphyid); GetCustBaseInfoByCustID(card.custid,transdtl.custname,transdtl.stuempno,NULL); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } des2src(out_pack->scust_auth,bankcard.bankcardno); // 银行卡号 des2src(out_pack->sname,transdtl.stuempno); // 学工号 des2src(out_pack->sname2,transdtl.refno); // 交易参考号 des2src(out_pack->stx_pwd,tRefno.mac); // 随机数 out_pack->lserial0=trans.termseqno; // 终端流水号 out_pack->lvol5 = D2I(trans.inputamt*100); // 交易金额 (分) out_pack->lvol6 = D2I(trans.cardbefbal*100); // 入卡值(分) writelog(LOG_INFO,"bankcardno[%s],stuempno[%s],refno[%s],termseqno[%d],inputamt[%d],befbal[%d]",out_pack->scust_auth, out_pack->sname,out_pack->sname2,out_pack->lserial0,out_pack->lvol5,out_pack->lvol6); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F240024(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; int request_type = 2401; int drtp_branch = 0; int base_funcno = 0; int bcc_timeout = 0; char bankcode[3] = ""; ST_CPACK bPack; ST_PACK *out_pack = &(bPack.pack); ResetNormalCPack(&bPack,0,1); SetCol(handle,0); SetCol(handle,F_DAMT0,0); ST_PACK ArrayPack; // 设置返回包 ST_CPACK aPack; // 设置应答包 ST_CPACK sPack; // 设置发送包 T_t_card card; memset(&card,0x00,sizeof card); T_t_bankcard bankcard; memset(&bankcard,0,sizeof bankcard); T_t_device device; memset(&device,0x00,sizeof device); ResetNormalCPack(&aPack, 0, 1); memset(&ArrayPack, 0, sizeof(ArrayPack)); ResetNormalCPack(&sPack, 0, 1); sPack.head.RequestType = request_type; SetHeadCol(&sPack,F_LCERT_CODE,F_SCUST_AUTH,F_LVOL0,F_LVOL1,F_SDATE0, F_SHOLDER_AC_NO,F_SPHONE,F_SPHONE3,F_SCUST_LIMIT,F_SCUST_LIMIT2,F_SCUST_AUTH,F_SCUST_AUTH2,F_DAMT0,F_SBANK_PWD, F_VSVARSTR0,F_VSVARSTR1,F_SORDER2,0); ret = DB_t_bankcard_read_by_bankcardno(rPack->scust_auth, &bankcard); if(ret) { strcpy(szMsg,"您的校园卡号和银行卡号未绑定"); return E_DB_BANKCARD_R; } ret=DB_t_card_read_by_custid_and_status(bankcard.custid, "1", &card); if(ret) { strcpy(szMsg,"校园卡已经注销"); return E_DB_CARD_N; } //校验绑定关系 ret = DB_t_bankcard_read_by_custid(card.custid, &bankcard); if(ret) { writelog(LOG_ERR,"DB_t_bankcard_read_by_custid err,errcode=[%d]",ret); if(DB_NOTFOUND==ret) { strcpy(szMsg,"学工号和银行卡号未绑定"); return E_DB_BANKCARD_N; } else { return E_DB_BANKCARD_R; } } ret = DB_t_bankcard_read_by_custid_and_bankcardno(card.custid,rPack->scust_auth, &bankcard); if(ret) { strcpy(szMsg,"学工号和银行卡号没绑定"); return E_DB_BANKCARD_R; } des2src(bankcode,bankcard.bankcode); T_t_cfgbank cfgbank; memset(&cfgbank,0,sizeof cfgbank); ret = DB_t_cfgbank_read_by_bankcode(bankcode,&cfgbank); if(ret) { return E_DB_CFGBANK_R; } if(strncmp(getsystime(NULL),cfgbank.bankstarttime,6) < 0 || strncmp(getsystime(NULL),cfgbank.bankendtime,6) > 0) { return E_OUT_BANKTIME; } T_t_customer customer; memset(&customer,0,sizeof customer); ret = DB_t_customer_read_by_custid(card.custid, &customer); if(ret) { return E_DB_CUSTOMER_R; } ret=DB_t_device_read_by_deviceid(rPack->lcert_code, &device); if(ret) { return E_DB_DEVICE_R; } drtp_branch = cfgbank.bccdrtpno; // drtp 编号 base_funcno = cfgbank.bccfuncno; // 前置主功能号 bcc_timeout = cfgbank.bcctimeout; // 前置超时时间 sPack.pack.lcert_code = 240100; // 交易码 des2src(sPack.pack.scust_limit2,cfgbank.bankip); // 银行ip sPack.pack.lvol0 = cfgbank.bankport; // 银行端口 sPack.pack.lvol1 = cfgbank.banktimeout; // 银行超时时间 GetNewRefno(sPack.pack.sholder_ac_no); // 一卡通交易参考号 db_commit(); des2src(sPack.pack.sdate0,getsysdate(NULL)); // 交易日期 des2src(sPack.pack.scust_limit,customer.custname); // 姓名 des2src(sPack.pack.scust_auth2,customer.idno); // 身份证号 des2src(sPack.pack.scust_auth,rPack->scust_auth); // 银行卡号 des2src(sPack.pack.sphone3,rPack->sphone3); //银行卡密码,ansi加密处理过 des2src(sPack.pack.vsvarstr0, rPack->vsvarstr0); //二磁道数据 des2src(sPack.pack.vsvarstr1, rPack->vsvarstr1); //三磁道数据 des2src(sPack.pack.sorder2,device.devphyid); //设备物理ID if(bcc_timeout<5) bcc_timeout=5; ret = ExtCall(0, drtp_branch, base_funcno, 0, bcc_timeout, &sPack, &aPack, &ArrayPack); if (ret < 0 || aPack.head.retCode != 0) { writelog(LOG_ERR,"extcall 2401 ret[%d],retcode[%d] timeout[%d] ",ret,aPack.head.retCode,bcc_timeout); if (ret < 0) // 通讯错误,要冲正的 { writelog(LOG_ERR,"调用后台业务失败,业务终止"); return E_BCC_NETWORK; } else // 收到前置返回的错误 { writelog(LOG_ERR,"%s",aPack.pack.vsmess); strcpy(szMsg,aPack.pack.vsmess); return E_COMMON_ERR; } } if(aPack.pack.lvol1 != 1) // 前置解包错误 { writelog(LOG_ERR,"接收银行数据错误"); return E_BCC_NETWORK; } out_pack->damt0=aPack.pack.damt0; PutRow(handle,out_pack,pRetCode,szMsg); return 0; }
int F846336(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); TRANS& trans=pAccTrans->trans; //des2src(pAccTrans->trans.opercode,rPack->semp); trans.termid=rPack->lcert_code; int transflag=rPack->lvol3; if(transflag) { trans.transcode=TC_EACC2CARD; } else { trans.transcode=TC_CARD2EACC; } ret=pAccTrans->InitTrans(); if(ret) return ret; char pwd_crypt[33]=""; des2src(pwd_crypt,rPack->scust_limit); // 卡密码 trans.cardflag=1; trans.usecardflag=1; trans.cardno=rPack->lvol0; trans.purseno=PURSE_NO_ONE; trans.dpscnt=rPack->lvol5+1; trans.paycnt=rPack->lvol6+1; trans.cardbefbal=rPack->lvol7/100.0; trans.cardaftbal=trans.cardbefbal; trans.inputamt=D4U5(rPack->damt0,2); trans.unusedamt = trans.inputamt; // transdtl.cardaftbal=rPack->lvol8; // transdtl.siteno=rPack->lcert_code; // transdtl.frontno=0; //des2src(transdtl.devphyid,rPack->sname); //transdtl.devseqno=rPack->lserial0; //des2src(transdtl.bankcode,rPack->sbank_code); //des2src(transdtl.bankcardno,rPack->scard0); //des2src(transdtl.mobile,rPack->sphone2); // des2src(transdtl.remark,rPack->ssectypes); T_t_refno tRefno; memset(&tRefno,0,sizeof(tRefno)); get_random(tRefno.mac); ret= GetNewRefno(tRefno.refno); if(ret) return ret; des2src(tRefno.lastsaved,trans.sysdatetime); des2src(tRefno.accdate,trans.accdate); tRefno.termid = trans.termid; tRefno.termseqno = trans.termseqno; tRefno.status = RS_SUCC; ret=DB_t_refno_add(&tRefno); if(ret) { if(DB_REPEAT==ret) return E_DB_REFNO_E; else return E_DB_REFNO_I; } //检查客户 des2src(trans.cardphyid,rPack->sstation0); T_t_card tCard; memset(&tCard,0,sizeof(tCard)); ret=doCard(tCard); if(ret) { return ret; } //查询卡帐户 T_t_account tCardAccount; memset(&tCardAccount,0,sizeof(tCardAccount)); ret=DB_t_account_read_by_accno(tCard.accno,&tCardAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_CARDACCNO,tCard.accno); else return E_DB_ACCOUNT_R; } if(tCardAccount.status[0]!=STATUS_NORMAL) { return ERRINFO(E_CARDACC_LOGOUT,tCardAccount.accno); } //根据客户号查询电子钱包帐户 T_t_netacc tNetAccount; memset(&tNetAccount,0,sizeof(tNetAccount)); ret=DB_t_netacc_read_by_custid(tCardAccount.custid,&tNetAccount); if(ret) { if(DB_NOTFOUND==ret) return ERRINFO(E_NOTEXIST_EACCNO,tCardAccount.custid); else return E_DB_ACCOUNT_R; } if(tNetAccount.status[0]!=STATUS_NORMAL) return ERRINFO(E_EACCNO_LOGOUT,tNetAccount.accno); strcpy(trans.cardaccno,tCardAccount.accno); trans.feetype=tCard.feetype; trans.custid=tCard.custid; strcpy(trans.cardaccno,tCardAccount.accno); strcpy(trans.eaccno,tNetAccount.accno); if(TC_CARD2EACC==trans.transcode) { //检查卡密码 if(strcmp(tCard.cardpwd,pwd_crypt)!=0) { return E_CARDPWD; } if(amtcmp(trans.inputamt,trans.cardbefbal)>0) return ERRINFO(E_CARD_BALANCE_SHORTAGE,trans.cardbefbal); } else { char inpwd_crypt[65]=""; des2src(inpwd_crypt,rPack->snote2); //检查电子钱包密码 if(!strlen(inpwd_crypt)) return E_EACCPWD; if(strcmp(inpwd_crypt,tNetAccount.paypwd)!=0) return E_EACCPWD; //if(tNetAccount.stoppayflag[0]=='1') // return ERRINFO(E_EACC_STOPPAY,tNetAccount.accno); if(amtcmp(trans.inputamt,tNetAccount.balance)>0) return ERRINFO(E_EACC_BALANCE_SHORTAGE,trans.inputamt-tNetAccount.balance); double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); } trans.feetype=0; trans.usecardflag=1; trans.custid=tCard.custid; ret=pAccTrans->doTrans(); if(ret) return ret; T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.refno,tRefno.refno); // 交易参考号 des2src(transdtl.transdate,trans.accdate); des2src(transdtl.transtime,trans.acctime); des2src(transdtl.coldate,trans.accdate); des2src(transdtl.coltime,trans.acctime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; des2src(transdtl.custname,tNetAccount.accname); if(TC_EACC2CARD==trans.transcode) { transdtl.transflag=TF_DPS; transdtl.cardcnt = trans.dpscnt; } else { transdtl.transflag=TF_PAY; transdtl.cardcnt = trans.paycnt; } transdtl.cardbefbal=trans.cardbefbal; transdtl.cardaftbal=trans.cardaftbal; transdtl.managefee=trans.totalfeeamt; transdtl.amount=trans.inputamt; des2src(transdtl.opercode,trans.opercode); transdtl.status[0]=DTLSTATUS_SUCCESS; transdtl.revflag[0]='0'; des2src(transdtl.showcardno,tCard.showcardno); transdtl.custid=tCard.custid; GetStuempnoByCustid(transdtl.custid,transdtl.stuempno); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } ST_CPACK aPack; ST_PACK *outPack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_LVOL0,F_LVOL8,F_SDATE0,F_SPHONE3,F_SADDR, F_SDATE3,F_STIME3,F_SEMP,F_LWITHDRAW_FLAG,F_LSERIAL1,F_VSMESS,0); strcpy(outPack->sphone3,tRefno.refno); strcpy(outPack->saddr,tRefno.mac); outPack->lvol0=tCard.cardno; outPack->lvol8=D4U5(trans.cardaftbal*100,0); des2src(outPack->sdate3,trans.accdate); des2src(outPack->stime3,trans.acctime); des2src(outPack->semp,trans.opercode); outPack->lwithdraw_flag=trans.termid; outPack->lserial1=trans.termseqno; char temp[128]=""; if(TC_EACC2CARD==trans.transcode) { sprintf(temp,"电子账户向卡转账 %.2f 元成功,电子账户余额:%.2f 卡余额:%.2f", trans.inputamt, trans.draccaftbal, trans.cardaftbal); } else { sprintf(temp,"卡向电子账户转账 %.2f 元成功,电子账户余额:%.2f 卡余额:%.2f", trans.inputamt, trans.craccaftbal, trans.cardaftbal); } pAccTrans->remark+=temp; strcpy(outPack->vsmess,pAccTrans->remark.c_str()); des2src(trans.remark,outPack->vsmess); PutRow(handle,outPack,pRetCode,szMsg); return 0; }
static int pack_body(TRANS& trans,std::string& body) { int ret = 0; gReader.fetchRow(); //生成交易流水号并记录 ret = GetNewRefno(trans.refno); if (ret) { return ret; } TiXmlDocument doc; { TiXmlElement root("ROOT"); doc.InsertEndChild(root); } char dt[15] = {0}; getsysdatetime(dt); string now(dt); TiXmlNode& root = *(doc.FirstChild()); //版本号 ec_add_xml_node_value(root,"VERSION", "010101" ); //交易代码 ec_add_xml_node_value(root,"TRANS_TYPE", "120226" ); //动作代码 ec_add_xml_node_value(root,"ACTION_TYPE", "1"); /*//响应代码 ec_add_xml_node_value(root,"RESP_CODE", );*/ //登录身份类型 ec_add_xml_node_value(root,"LOGIN_TYPE", "1"); //交易渠道 ec_add_xml_node_value(root,"TRANS_SOURCE", "BP"); //登录机构代码 ec_add_xml_node_value(root,"LOGIN_INST_CODE", "10006"); //交易日期 { string str; str.assign(trans.accdate,8); ec_add_xml_node_value(root,"TXN_DATE", str); } //交易时间 { string str; str.assign(trans.acctime,6); ec_add_xml_node_value(root,"TXN_TIME", str); } //跟踪号/流水号 { string str; str.assign(trans.refno,14); //str[6]='0'; //str[7]='0'; str=str.substr(6); //str.append(1,'1'); ec_add_xml_node_value(root,"TRACE_NO", str); } //受卡机终端标识码 ec_add_xml_node_value(root,"CARD_ACCPTR_TERMNL_ID", "12345676"); //登录网点代码 { string str; ret = get_ec_para(YTCEC_LOGIN_MERCH, str); if (ret) { LOG(ERROR, "中银通登录网点代码未配置"); return E_COMMON_ERR; } ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", str); } //ec_add_xml_node_value(root,"LOGIN_MERCH_CODE", "J001"); //登录操作员代码 { string str; ret = get_ec_para(YTCEC_LOGIN_USER, str); if (ret) { LOG(ERROR, "中银通登录操作员代码未配置"); return E_COMMON_ERR; } ec_add_xml_node_value(root,"LOGIN_USER_CODE", str); } //ec_add_xml_node_value(root,"LOGIN_USER_CODE", "A5"); string cardno_begin; //开始卡号 string cardno_end; //结束卡号 int cardcnt; //卡数量 string product_group_code; //产品组代码 string product_code; //产品代码 int in_fee_amt; //内收手续费 int out_fee_amt; //外收手续费 int receivable_amt; //应收金额 int is_guarantee_deposit; //是否收取押金 int guarantee_deposit; //押金 int is_get_fee; //是否收费 int fee_amt; //发卡费 string idcode; //持卡人证件号码 string idtype; //持卡人证件类型 string name; //持卡人名 string familyname; //持卡人姓 string name_spell; //持卡人名-拼音 string familyname_spell; //持卡人姓-拼音 string birthday; //持卡人生日 string telphone; //持卡人电话号码 string mobile; //持卡人手机 string address; //持卡人地址 string postcode; //持卡人邮编 string email; //持卡人电邮 string corpname; //持卡人单位名称 string comments; //持卡人备注 string reserved; //保留 //卡片数量 { stringstream ss; COL2VAR(cardcnt); ss << cardcnt; ec_add_xml_node_value(root,"CARDCOUNT",ss.str()); } //起始卡号 { stringstream ss; COL2VAR(cardno_begin); ss <<cardno_begin; ec_add_xml_node_value(root,"STARTCARD",ss.str()); } //结束卡号 { stringstream ss; COL2VAR(cardno_end); ss <<cardno_end; ec_add_xml_node_value(root,"ENDCARD",ss.str()); } //产品组 { stringstream ss; COL2VAR(product_group_code); ss <<product_group_code; ec_add_xml_node_value(root,"PRD_GRP_CODE",ss.str()); } //产品 { stringstream ss; COL2VAR(product_code); ss <<product_code; ec_add_xml_node_value(root,"PRD_CODE",ss.str()); } //内收手续费 { stringstream ss; COL2VAR(in_fee_amt); ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<in_fee_amt; ec_add_xml_node_value(root,"TOTAL_IN_FEE_AMT",ss.str()); } //外收手续费 { stringstream ss; COL2VAR(out_fee_amt); ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<out_fee_amt; ec_add_xml_node_value(root,"TOTAL_OUT_FEE_AMT",ss.str()); } //应收金额 { stringstream ss; COL2VAR(receivable_amt); ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<receivable_amt; ec_add_xml_node_value(root,"BALAMT",ss.str()); } //是否收取押金 { stringstream ss; COL2VAR(is_guarantee_deposit); ss <<is_guarantee_deposit; ec_add_xml_node_value(root,"PLEDGEFLG",ss.str()); } //押金 { stringstream ss; COL2VAR(guarantee_deposit); ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<guarantee_deposit; ec_add_xml_node_value(root,"PLEDGE",ss.str()); } //是否收费 { stringstream ss; COL2VAR(is_get_fee); ss <<is_get_fee; ec_add_xml_node_value(root,"FEEFLG",ss.str()); } //发卡费 { stringstream ss; COL2VAR(fee_amt); ss << setiosflags(ios::right)<<setw(12) <<setfill('0') <<fee_amt; ec_add_xml_node_value(root,"FEE",ss.str()); } //持卡人证件号码 { stringstream ss; COL2VAR(idcode); ss <<idcode; ec_add_xml_node_value(root,"IDCODE",ss.str()); } //持卡人证件类型 { stringstream ss; COL2VAR(idtype); ss <<idtype; ec_add_xml_node_value(root,"IDTYPE",ss.str()); } //持卡人名 { stringstream ss; COL2VAR(name); ss <<name; ec_add_xml_node_value(root,"NAME",ss.str()); } //持卡人姓 { stringstream ss; COL2VAR(familyname); ss <<familyname; ec_add_xml_node_value(root,"SURNAME",ss.str()); } //持卡人拼音名 { stringstream ss; COL2VAR(name_spell); ss <<name_spell; ec_add_xml_node_value(root,"SPELL_NAME",ss.str()); } //持卡人拼音姓 { stringstream ss; COL2VAR(familyname_spell); ss <<familyname_spell; ec_add_xml_node_value(root,"SPELL_SURNAME",ss.str()); } //持卡人生日 { stringstream ss; COL2VAR(birthday); ss <<birthday; ec_add_xml_node_value(root,"BIRTHDAY",ss.str()); } //持卡人电话号码 { stringstream ss; COL2VAR(telphone); ss<<telphone; ec_add_xml_node_value(root,"COPHONE",ss.str()); } //持卡人手机 { stringstream ss; COL2VAR(mobile); ss<<mobile; ec_add_xml_node_value(root,"MOBILE",ss.str()); } //持卡人地址 { stringstream ss; COL2VAR(address); ss<<address; ec_add_xml_node_value(root,"ADDR",ss.str()); } //持卡人邮编 { stringstream ss; COL2VAR(postcode); ss<<postcode; ec_add_xml_node_value(root,"POST",ss.str()); } //持卡人电邮 { stringstream ss; COL2VAR(email); ss<<email; ec_add_xml_node_value(root,"EMAIL",ss.str()); } //持卡人单位名称 { stringstream ss; COL2VAR(corpname); ss<<corpname; ec_add_xml_node_value(root,"COMNAME",ss.str()); } //持卡人备注 { stringstream ss; COL2VAR(comments); ss<<comments; ec_add_xml_node_value(root,"CUSTRES",ss.str()); } //保留域 { stringstream ss; COL2VAR(reserved); ss<<reserved; ec_add_xml_node_value(root,"RESERVED",ss.str()); } //报文鉴别码 // ec_add_xml_node_value(root, "MESG_AUTHN_CODE", "87AE"); ec_bank_any_ytc::calc_trans_mac(&root); TiXmlPrinter printer; doc.Accept(&printer); char xml_header[100]="<?xml version='1.0' encoding='GBK'?>\n"; body.append(xml_header); body += printer.CStr(); return 0; }
int F240002(TRUSERID *handle,int iRequest,ST_PACK *rPack,int *pRetCode,char *szMsg) { int ret=0; CAccTrans *pAccTrans=CAccTrans::getInstance(); pAccTrans->trans.transcode=TC_BANKTRANS; TRANS& trans=pAccTrans->trans; trans.termid=atoi(rPack->sorder2); ret=pAccTrans->InitTrans(); if(ret) return ret; trans.inputamt = rPack->lvol5/100.0; trans.unusedamt=trans.inputamt; trans.cardflag=1; trans.usecardflag=1; trans.cardbefbal=rPack->lvol6/100.00; trans.dpscnt=rPack->lvol1+1; trans.cardaftbal=trans.cardbefbal; //转账不允许转小数金额 if((rPack->lvol5)%100>0) { writelog(LOG_ERR,"trans money is not a integer!,transmoney=[%f]",rPack->lvol5/100.0); strcpy(szMsg,"转账金额必须是整数"); return E_TRANS_TRANSMONEY_OUTRANGE; } if(rPack->lvol5<1) { writelog(LOG_ERR,"trans money is not a integer!,transmoney=[%f]",rPack->lvol5/100.0); strcpy(szMsg,"转账金额不能为0"); return E_TRANS_TRANSMONEY_OUTRANGE; } T_t_account tAccount; //帐户表 T_t_card card; memset(&tAccount,0,sizeof(tAccount)); memset(&card,0,sizeof(card)); ST_CPACK aPack; ST_PACK *out_pack = &(aPack.pack); ResetNormalCPack(&aPack,0,1); SetCol(handle,0); SetCol(handle,F_DAMT0,F_DAMT1,F_DAMT2,F_LVOL1,F_LVOL2,F_LSERIAL0,F_SNAME2,0); //判断设备是否登陆 if(0!=device_login_yes_or_no(trans.termid)) { writelog(LOG_ERR,"Device don't login"); return E_TRANS_TERM_NOLOGIN; } trans.cardno=atoi(rPack->sserial0); ret=pAccTrans->CheckAcc(&card,&tAccount); if(ret) return ret; if(amtcmp(trans.cardbefbal-tAccount.balance,MAXAMT_CARDGTACC)>=0) { writelog(LOG_ERR,"cardbefbal[%.2lf]account balance[%.2lf]",trans.cardbefbal,tAccount.balance); return ERRIF_CARDBAL_EXCEPT; } double CardMaxBal=0; ret=GetPurseMaxBal(PURSE_NO_ONE,CardMaxBal); if(ret) return ret; if(amtcmp(trans.inputamt+trans.cardbefbal,CardMaxBal)>0) return ERRINFO(E_AMT_EXCEED_MAX,CardMaxBal); trans.feetype=card.feetype; trans.cardtype=card.cardtype; trans.custid=card.custid; des2src(trans.cardaccno,tAccount.accno); //贷方帐户,持卡人账户 des2src(trans.draccno,rPack->sstation0); //借方帐号,由前置机上传 ret=pAccTrans->doFeeTrans(); if(ret) return ret; ret=pAccTrans->doMainTrans(); if(ret) return ret; ret=pAccTrans->doTransEnd(); if(ret) return ret; //业务结束后,回滚事务 ret=db_rollback(); if(ret) { writelog(LOG_ERR,"db_rollback error,error code=[%d]",ret); return E_DB_ROLLBACK; } //重新取流水号 ret=pAccTrans->GetTermSeqno(); if(ret) { writelog(LOG_ERR,"GetTermSeqno error,error code=[%d]",ret); return ret; } T_t_transdtl transdtl; memset(&transdtl,0,sizeof(transdtl)); des2src(transdtl.transdate,trans.transdate); des2src(transdtl.transtime,trans.transtime); strcpy(transdtl.accdate,trans.accdate); strcpy(transdtl.acctime,trans.acctime); transdtl.termid=trans.termid; transdtl.termseqno=trans.termseqno; transdtl.transcode=trans.transcode; transdtl.paytype=trans.fundtype; des2src(transdtl.voucherno,trans.voucherno); transdtl.cardno=trans.cardno; transdtl.purseno=trans.purseno; transdtl.transflag=TF_DPS; transdtl.cardcnt=trans.dpscnt; transdtl.cardbefbal=trans.cardbefbal; transdtl.amount=trans.totaltransamt; transdtl.managefee=trans.totalfeeamt; transdtl.cardaftbal=trans.cardaftbal; transdtl.custid=card.custid; //transdtl.sysid= rPack->lvol2; transdtl.exttype=EXTTYPE_BANKCARD; des2src(transdtl.extdata,rPack->scust_auth); des2src(transdtl.showcardno,card.showcardno); transdtl.status[0]=DTLSTATUS_FAIL; ret=GetNewRefno(transdtl.refno); if(ret) { ERRTIP("取交易参考号失败"); return ret; } GetCustBaseInfoByCustID(card.custid,transdtl.custname,transdtl.stuempno,NULL); ret=DB_t_transdtl_add(&transdtl); if(ret) { if(DB_REPEAT==ret) return E_DB_TRANSDTL_E; else return E_DB_TRANSDTL_I; } char sMsg[255]=""; char sDebugMsg[255]=""; sprintf(sDebugMsg,"流水号:%d ",trans.termseqno); sprintf(sMsg,"充值前卡余额:%.2lf 转帐后卡余额:%.2lf ",trans.cardbefbal,trans.cardaftbal); strcat(sDebugMsg,sMsg); writelog(LOG_DEBUG,sDebugMsg); des2src(out_pack->sname2,transdtl.refno); out_pack->lserial0=trans.termseqno; out_pack->damt0=trans.cardaftbal; out_pack->damt1=transdtl.amount; out_pack->damt2=transdtl.managefee; out_pack->lvol1=transdtl.termseqno; out_pack->lvol2=D2I(trans.cardaftbal*100); PutRow(handle,out_pack,pRetCode,szMsg); return 0; }