⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xe_ssjj.ec

📁 本程序主要是实现小额支付业务系统中实时借记功能
💻 EC
字号:
#define EXTERNEXEC SQL include "acckz.h";EXEC SQL include "xezf.h";int XE_ssjjlr(struct accjz *);int XE_ssjjjz(struct accjz *);int XE_ssjjcx1(struct accjz *);int XE_ssjjcx2(struct accjz *);int iXE_ssczjz(struct accjz *);/*小额支付实时借记*/XE_SSJJ(TPSVCINFO * rqst){    struct accjz tBuf;     /*交易报文结构*/    struct appfunc tApp;    /*业务处理函数*/    int iRet;    /*调用交易公共初始化例程*/    iRet = PubTrBegin(rqst,&tBuf,&tApp);    if( iRet == 0 )    {        tApp.func_jylr= XE_ssjjlr;        tApp.func_jyjz= XE_ssjjjz;        tApp.func_jycx1 = XE_ssjjcx1;        tApp.func_jycx2 = XE_ssjjcx2;        /*调用交易流程控制函数*/        iRet = PubTrApp( &tApp, &tBuf );    }    /*调用交易公共结束例程*/    PubTrEnd(iRet,&tBuf);}int XE_ssjjcx1(struct accjz *ptBuf){    ZF_ZFHHMC tZfhhmc;    /*接收行*/     acclog("p_bh1=%s",ptBuf->p_bh1);    if(XPub_GetZfhhmc(ptBuf -> p_bh1, &tZfhhmc) < 0)    {        PLOG("调用XPub_GetZfhhmc()错");        acclog("p_bh11=%s",ptBuf->p_bh1);        return -1;    }    strcpy(ptBuf -> p_dh1, tZfhhmc.lname); /*付款行名称*/    strcpy(ptBuf -> p_zjh1, tZfhhmc.qshh); /*付款行清算行号*/    /*发起行*/    if(XPub_GetZfhhmc(ptBuf -> p_wdh, &tZfhhmc) < 0)    {        PLOG("调用XPub_GetZfhhmc()错");        return -1;    }    strcpy(ptBuf -> p_bh2, tZfhhmc.zfxthh); /*发起行行号*/    strcpy(ptBuf -> p_zjh2, tZfhhmc.qshh); /*发起行清算行号*/    return 0;}int XE_ssjjcx2(struct accjz *ptBuf){	ACCINFO*pAccQs = NULL;	struct zhxx     tB1;	memset( (char *)&tB1, 0, sizeof( tB1 ) );/* 收款人帐号 */	PUBACCINIT("zh2", ptBuf->p_zh2, NULL, NULL, &pAccQs);/* 取帐户详细信息 */	PUBGETFHXX(pAccQs, &tB1);	if(tB1.zhzt[0] == '1')	{		PubErr(-1,__FILE__,__LINE__,PXYM,"[%s]已销户", tB1.zh);		return -1;	}	if(strncmp(tB1.khjg, ptBuf->p_wdh, 5))	{       PubErr(-1,__FILE__,__LINE__,PXYM,"[%s]非本机构帐号", tB1.zh);       return -1;   	}   if(tB1.zl[0] != '2' && tB1.zl[0] != '3')   {       PubErr(-1,__FILE__,__LINE__,PXYM,"[%s]不是客户存款帐户", tB1.zh);       return -1;   }/** 所有对公户都能做小额 *   if(tB1.zl[0] == '2' && tB1.bz[2] != '1')   {       PubErr(-1,__FILE__,__LINE__,PXYM,"对公帐号必须是结算户", tB1.zh);       return -1;   }**/	/* 无个人结算户标志,必须通过科目号判断 ***/   if(tB1.zl[0] == '3' && strncmp(tB1.kmh , "2110102" ,7) != 0)   {       PubErr(-1,__FILE__,__LINE__,PXYM,"储蓄帐号必须是个人结算户", tB1.zh);       return -1;   }   strcpy(ptBuf->p_mc2,tB1.zhmc);    return 0;}int XE_ssjjlr(struct accjz *ptBuf){    if(atol(ptBuf -> p_bz1) == 30101)  /*储蓄通兑*/    {        if(ptBuf -> p_bz3[0] == '1')   /*转帐缴手续费*/            ptBuf -> p_je3 = ptBuf -> p_je1 + ptBuf -> p_je2;        else            ptBuf -> p_je3 = ptBuf -> p_je1;        if(ptBuf -> p_bz7[0] == '0')   /*现金通兑*/        {            PubStrTrim(ptBuf -> p_wdh);            sprintf(ptBuf -> p_zh2, "%s01101101000001", ptBuf -> p_wdh);            strcpy(ptBuf -> p_mc2, "现金");        }     }    else        ptBuf -> p_je3 = ptBuf -> p_je1;    return 0;}    int  XE_ssjjjz(struct accjz *ptBuf){    EXEC SQL BEGIN DECLARE SECTION;        XE_WZ tWz;        XE_LZ tLz;        ZF_ZFHHMC tZfhhmc;        long lXgls ,lPlbxh;        XE_FJSJ tFjsj;        struct accjz tBuf;    EXEC SQL END DECLARE SECTION;    int iCount,iRet;/**    struct zhjzxx jzxx;update by fdx **/ 	struct zhxx jzxx;/**    struct AB20ZWZD tB20; update by fdx**/	    memcpy(&tBuf, ptBuf, sizeof(struct accjz));    memset(&tLz, 0x00, sizeof(XE_LZ));    /*写小额往帐登记簿*/    memset(&tWz, 0x00, sizeof(XE_WZ));    tWz.lsh = ptBuf -> p_zjls;          /*流水号*/    tWz.xglsh = ptBuf -> p_zjls;        /*相关流水号*/      tWz.jzrq = ptBuf -> p_jyrq;         /*登记日期*/    if(XPub_GetXeXtrq(&tWz.wtrq) < 0)    /*委托日期*/    {        PLOG("调用XPub_GetXeXtrq()错");        return -1;    }    if(XPub_GetXh(XEXH_WZB, &lPlbxh) < 0) /*批量包序号*/    {        PLOG("调用XPub_GetXh()错");        return -1;    }    sprintf(tWz.plbxh, "%08d", lPlbxh);    acclog("plbxh=%s",tWz.plbxh);    strcpy(tWz.jgh, ptBuf -> p_wdh);    strcpy(tWz.sjgh, ptBuf -> p_wdh);    tWz.je = ptBuf -> p_je3 ;             /*清算金额*/    tWz.wzbz[0] = '4';                   /*已组包发送*/    tWz.wzbz[1] = '3';                   /*已组包发送*/    strcpy(tWz.plblxh, "004");           /*批量包类型号*/    if(XPub_GetXh(XEXH_ZFWZJY, &(tWz.zfjyxh)) < 0)   /*支付交易序号*/    {        PLOG("调用XPub_GetXh()错");        return -1;    }    strcpy(tWz.ywlx, "30101");    /*业务类型*/    strcpy(tWz.ywzl, "90");              /*业务种类*/    strcpy(tWz.fkrkhhh, ptBuf -> p_bh1); /*付款人开户行号*/    strcpy(tWz.jshh, ptBuf -> p_bh1);    /*接收行行号*/    strcpy(tWz.skrkhhh, ptBuf -> p_bh2); /*收款人开户行号*/    strcpy(tWz.txcyfqhh, ptBuf -> p_bh2);/*发报行行号*/    strcpy(tWz.jsqshh, ptBuf -> p_zjh1); /*接收清算行行号*/    strcpy(tWz.fqqshh, ptBuf -> p_zjh2); /*发报清算行行号*/    strcpy(tWz.fkrzh, ptBuf -> p_zh1);   /*付款人帐号*/    strcpy(tWz.fkrmc, ptBuf -> p_mc1);   /*付款人名称*/    strcpy(tWz.fkrdz, ptBuf -> p_dz1);   /*付款人地址*/    strcpy(tWz.skrzh, ptBuf -> p_zh2);   /*收款人帐号*/    strcpy(tWz.skrmc, ptBuf -> p_mc2);   /*收款人名称*/    if(PubGetLsh(&(tWz.xglsh)) < 0)     /*此处取得流水号 */    {        PLOG("调用PubGetLsh()错");        return -1;    }    EXEC SQL insert into xe_wz values(:tWz);    if(sqlca.sqlcode != 0)    {        PubErr(-1,__FILE__,__LINE__,PXYM,"写表xe_wz错");        return -1;    }        /*登记附加数据*/    memset(&tFjsj, 0x00, sizeof(XE_FJSJ));    tFjsj.rq = tWz.jzrq;          /*日期*/    tFjsj.lsh = tWz.lsh;          /*日期*/    tFjsj.lb[0] = '1';            /*往帐*/    tFjsj.je = ptBuf -> p_je1;    /*交易金额*/    tFjsj.dfje = ptBuf -> p_je2;  /*委托行手续费*/     tFjsj.fkrzhlx[0] = ptBuf -> p_bz4[0]; /*付款人帐户类型*/    tFjsj.skrzhlx[0] = ptBuf -> p_bz5[0]; /*收款人帐户类型*/    if(ptBuf -> p_bz7[0] == '0') /*现金通兑*/    {       strcpy(tFjsj.jflx,"0");    }    else    {       strcpy(tFjsj.jflx,"1");    }    tFjsj.mmlx[0] = ptBuf -> p_bz6[0];     /*密码类型*/     PubStrncpy(tFjsj.mmyzsf, ptBuf -> p_bz2, 2); /*密码验证算法*/    tFjsj.yxxxh=strlen(ptBuf -> p_zh6);    PubStrTrim(ptBuf -> p_zh6);    strcpy(tFjsj.mmyzm, ptBuf -> p_zh6);         /*密码验证码*/    EXEC SQL insert into xe_fjsj values(:tFjsj);    if(sqlca.sqlcode != 0)    {        PubErr(-1,__FILE__,__LINE__,PXYM,"写表xe_fjsj错");        return -1;    }    acclog("p_bz5=%s,p_zjls=%ld,p_jyrq=%ld,p_jysj=%ld,p_zglx=%s",ptBuf->p_bz5,   ptBuf->p_zjls,ptBuf->p_jyrq,ptBuf->p_jysj,ptBuf->p_zgxl);    /****     报文发送***/    iRet = ssb_cl( &tWz);    if ( iRet < 0 )    {        PubErr(-1,__FILE__,__LINE__,PXYM,"实时包发送失败");        return -1;    }    if (tpfcommit() < 0)    {        tpfabort();        return PubErr(-1, __FILE__, __LINE__, PXYM, "提交事务错!");    }    /*接收实时借记回执*/    iCount = 0;    for(;;)    {         if(iCount == 80)           {		     sprintf(ptBuf->p_xh2,"%d", tWz.zfjyxh);		     iRet = iXE_ssczjz(ptBuf);		     if ( iRet < 0 )		     {                  PubErr(-1,__FILE__,__LINE__,PXYM,"实时包冲正失败");                  return -1;             }             else             {                   PubErr(-1,__FILE__,__LINE__,"800","该交易已发起冲正请查询变更登记簿");                  return 0;             }           }         EXEC SQL select * into :tLz from xe_lz where ywtrq = :tWz.wtrq             and yzfjyxh = :tWz.zfjyxh and jsqshh = :tWz.fqqshh;        PubErr(0,__FILE__,__LINE__,PXYM,"wtrq=%d,ywtrq=%d,zfjyxh=%d",               tWz.wtrq,tWz.ywtrq,tWz.zfjyxh);        if(SQLCODE == 0) /*收到回执*/        {            break;        }        sleep(1);        iCount ++;    }     switch ( atol ( tLz.cljg ) )    {        case 0:             PubErr(0,__FILE__,__LINE__,PXYM,"成功");             break;        case 1:             PubErr(-1,__FILE__,__LINE__,PXYM,"账号不存在");             return -1;        case 2:             PubErr(-1,__FILE__,__LINE__,PXYM,"账号户名不符");             return -1;        case 3:             PubErr(-1,__FILE__,__LINE__,PXYM,"账户余额不足");             return -1;        case 4:             PubErr(-1,__FILE__,__LINE__,PXYM,"当天通兑金额超上限");             return -1;        case 10:             PubErr(-1,__FILE__,__LINE__,PXYM,"账户密码错");             return -1;        case 11:             PubErr(-1,__FILE__,__LINE__,PXYM,"帐户状态错误");             return -1;        case 99:             PubErr(-1,__FILE__,__LINE__,PXYM,"其他错误");             return -1;        default:             PubErr(-1,__FILE__,__LINE__,PXYM,                    "错误代码非法,请检查该笔业务[%s]", tLz.cljg);             return -1;    }    /*下一段事务*/     if (tpfbegin(60) < 0)        /*定义事务 */    {        PubErr(-1, __FILE__, __LINE__, PXYM, "启始事务出错!");        return -1;    }    if(ssjj_zwclfdx(ptBuf) < 0)    {        PLOG("调用ssjj_zwcl()错");        tpfabort();        return -1;    }    /*修改实借回执记录*/    EXEC SQL update xe_lz set lzbz[1] = '1' where ywtrq = :tWz.wtrq         and yzfjyxh = :tWz.zfjyxh and jsqshh = :tWz.fqqshh;    if(sqlca.sqlcode != 0 || sqlca.sqlerrd[2] != 1)    {        PubErr(-1,__FILE__,__LINE__, PXYM, "修改来帐标志错");        tpfabort();        return -1;    }     /*修改往报批量包信息*/    PubErr(-1,__FILE__,__LINE__, PXYM, "wtrq=%d,plbxh=%s,fchh=%s",         tWz.wtrq,tWz.plbxh,tWz.fqqshh);    EXEC SQL update xe_plbxx set bz[1] = '1' where wtrq = :tWz.wtrq           and fcbxh = :tWz.plbxh and wlbz[1] = '1' and fchh = :tWz.fqqshh;     if(sqlca.sqlcode != 0 || sqlca.sqlerrd[2] != 1)    {        PubErr(-1,__FILE__,__LINE__, PXYM, "修改往帐包信息错");        tpfabort();        return -1;    }     /*修改来报批量包信息*/    PubErr(-1,__FILE__,__LINE__, PXYM, "wtrq=%d,plbxh=%s,fchh=%s",         tWz.wtrq,tLz.plbxh,tLz.fqqshh);    EXEC SQL update xe_plbxx set bz[1] = '1' where ywtrq = :tWz.wtrq         and jsbxh = :tLz.plbxh and wlbz[1] = '0' and fchh = :tLz.fqqshh;     if(sqlca.sqlcode != 0 || sqlca.sqlerrd[2] != 1)    {        PubErr(-1,__FILE__,__LINE__, PXYM, "修改往帐报信息错");        tpfabort();        return -1;    }      if (tpfcommit(60) < 0)        /*定义事务 */    {        PubErr(-1, __FILE__, __LINE__, PXYM, "提交事务出错!");        return -1;    }    if (tpfbegin(60) < 0)        /*定义事务 */    {        PubErr(-1, __FILE__, __LINE__, PXYM, "启始事务出错!");        return -1;    }    return 0;}int ssjj_zwclfdx(struct accjz * ptBuf){	EXEC SQL BEGIN DECLARE SECTION ;   	EXEC SQL END   DECLARE SECTION ;    ACCINFO     *pAcc = NULL ;    char  zh[33];   memset(zh,0,sizeof(zh));   INITAMTINFO( "lzje", CUR_STD, NULL, ptBuf->p_je3, NULL );   sprintf(zh,"%-*.*s%s", 5, 5, pTrInfo->fswd, XEXTLZ);   PUBACCINIT( "LZZH", zh, NULL, NULL, &pAcc );   INITAMTINFO( "qxje", CUR_STD, NULL, ptBuf->p_je3, NULL );   INITAMTINFO( "yjje", CUR_STD, NULL, ptBuf->p_je3, NULL );   INITAMTINFO( "sxf", CUR_STD, NULL, ptBuf->p_je2, NULL );   if(ptBuf -> p_bz7[0] == '0') /*现金通兑*/   {      INITAMTINFO( "xjje", CUR_STD, NULL, ptBuf->p_je1, NULL );   }   if(ptBuf -> p_bz7[0] != '0')  /*转帐通兑*/   {      INITAMTINFO( "JZJE", CUR_STD, NULL, ptBuf->p_je1, NULL );      PUBACCINIT( "khzh", ptBuf->p_zh2, NULL, NULL, &pAcc );   }   /*手续费分录*/   if(strcmp(ptBuf->p_bz3,"0")==0)   {       INITAMTINFO( "sxfxj", CUR_STD, NULL, ptBuf->p_je2, NULL );   }   /****/   RUNACCCORE( ACC_JZ );   PubErr(-1,__FILE__,__LINE__,PXYM,"============sucess======\n");   return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -