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

📄 posls.c

📁 界面库
💻 C
📖 第 1 页 / 共 4 页
字号:
			pcs.Acq_host_id);
#endif

		return 0;

	default:
		return 1;
	}
}

/*------------------------------------------------
为查 cur_tran_ls, his_tran_ls 组查询包
REFUND,ADJUST,POS_VOID,CONFIRM,RESERVAL交易,需要组织查询流水
数据包。
ENTRY:		table_name	= "cur_tran_ls" / "his_tran_ls"
RETURN:		0	OK	--> sqlstr
		1	NEED NOT PACK
--------------------------------------------------*/
int pack_sqlstr1( sqlstr, table_name )
char	*sqlstr;
char	*table_name;
{
S_tran_ls		tran_ls;

	switch(pcs.Tran_type) {

	case	REFUND:
	case	ADJUST:

	    if (pcs.Void_invoice_no != 0) {
		sprintf(sqlstr, "				\
		SELECT	*	FROM	%s			\
		WHERE	acq_bank_id	=	\'%s\'		\
		AND	acq_host_id	=	\'%s\'		\
		AND	card_no		=	\'%s\'		\
		AND	merchant_id	=	\'%s\'		\
		AND	terminal_id	=	\'%s\'		\
		AND	tran_flag	=	\'0\'		\
		AND	saf_flag	=	\'0\'		\
		AND	resp_code	=	\'00\'		\
		AND	((tran_type	=	%d)		\
			OR (tran_type	=	%d))		\
		AND	invoice_no	=	%ld",
		table_name,
		pcs.Acq_bank_id,
		pcs.Acq_host_id,
		pcs.Card_no,
	 	pcs.Merchant_id,
	 	pcs.Terminal_id,
		PURCHASE, CONFIRM,
		pcs.Void_invoice_no);
	    } 
	    else 
	    {
		tran_ls.trace_no	= pcs.Void_trace_no;

		sprintf(sqlstr, "				\
		SELECT	*	FROM	%s			\
		WHERE	acq_bank_id	=	\'%s\'		\
		AND	acq_host_id	=	\'%s\'		\
		AND	card_no		=	\'%s\'		\
		AND	merchant_id	=	\'%s\'		\
		AND	terminal_id	=	\'%s\'		\
		AND	tran_flag	=	\'0\'		\
		AND	saf_flag	=	\'0\'		\
		AND	resp_code	=	\'00\'		\
		AND	(  (tran_type 	=	%d	)	\
			OR (tran_type 	=	%d	))	\
		AND	trace_no	=	%ld",
		table_name,
		pcs.Acq_bank_id,
		pcs.Acq_host_id,
		pcs.Card_no,
		pcs.Merchant_id,
		pcs.Terminal_id,
		PURCHASE, CONFIRM,
		tran_ls.trace_no);
	    }
	    return 0;


	case	CONFIRM:

		tran_ls.tran_type	=	PRE_AUTH;

		sprintf(sqlstr, "				\
		SELECT	*	FROM	%s			\
		WHERE	acq_bank_id	=	\'%s\'		\
		AND	acq_host_id	=	\'%s\'		\
		AND	card_no		=	\'%s\'		\
		AND	merchant_id	=	\'%s\'		\
		AND	tran_flag	=	\'0\'		\
		AND	saf_flag	=	\'0\'		\
		AND	resp_code	=	\'00\'		\
		AND	tran_type	=	%d		\
		AND	auth_no		=	\'%s\'	",
		table_name,
		pcs.Acq_bank_id,
		pcs.Acq_host_id,
		pcs.Card_no, 
		pcs.Merchant_id, 
		tran_ls.tran_type,
		pcs.Auth_no);

		return 0;


	case	POS_VOID:
		tran_ls.tran_type	=	pcs.Void_tran_type;
		tran_ls.invoice_no	=	pcs.Void_invoice_no;
		tran_ls.trace_no	=	pcs.Void_trace_no;
		break;


	case	REVERSAL:

		sprintf(sqlstr, "				\
		SELECT	*	FROM	%s			\
		WHERE	acq_bank_id	=	\'%s\'		\
		AND	acq_host_id	=	\'%s\'		\
		AND	card_no		=	\'%s\'		\
		AND	merchant_id	=	\'%s\'		\
		AND	terminal_id	=	\'%s\'		\
		AND	saf_flag	=	\'0\'		\
		AND	snd_settle_flag =	\'N\'		\
		AND	rcv_settle_flag =	\'N\'		\
		AND	agt_settle_flag =	\'N\'		\
		AND	adv_settle_flag =	\'N\'		\
		AND	resp_code	=	\'00\'		\
		AND	trace_no	=	%ld",
		table_name,
		pcs.Acq_bank_id,
	 	pcs.Acq_host_id,
		pcs.Card_no,
		pcs.Merchant_id,
		pcs.Terminal_id,
		pcs.Trace_no);

		return 0;
		
	default:
		return 1;
	}

	//各个方向的清算标志是否需要考虑。

	if (pcs.Void_invoice_no != 0) {
		//增加撤消交易金额为0时, 查找原交易时不使用交易金额
		//作为判断条件
		if (fabs(atol(pcs.Tran_amount)/100.) < 0.001) { 

			sprintf(sqlstr, "			\
			SELECT	*	FROM	%s		\
			WHERE	acq_bank_id	=	\'%s\'	\
			AND	acq_host_id	=	\'%s\'	\
			AND	card_no		=	\'%s\'	\
			AND	merchant_id	=	\'%s\'	\
			AND	terminal_id	=	\'%s\'	\
			AND	tran_flag	=	\'0\'	\
			AND	saf_flag	=	\'0\'	\
			AND	snd_settle_flag =	\'N\'	\
			AND	resp_code	=	\'00\'	\
			AND	invoice_no	=	%ld",
			table_name,
			pcs.Acq_bank_id,
			pcs.Acq_host_id,
			pcs.Card_no,
			pcs.Merchant_id,
			pcs.Terminal_id,
			pcs.Void_invoice_no);
		}
		else {
			sprintf(sqlstr, "			\
			SELECT	*	FROM	%s		\
			WHERE	acq_bank_id	=	\'%s\'	\
			AND	acq_host_id	=	\'%s\'	\
			AND	card_no		=	\'%s\'	\
			AND	merchant_id	=	\'%s\'	\
			AND	terminal_id	=	\'%s\'	\
			AND	tran_flag	=	\'0\'	\
			AND	saf_flag	=	\'0\'	\
			AND	snd_settle_flag =	\'N\'	\
			AND	resp_code	=	\'00\'	\
			AND	invoice_no	=	%ld	\
			AND	(tran_amt - %lf) < 0.001        \
			AND	(tran_amt - %lf) > -0.001",
			table_name,
			pcs.Acq_bank_id,
			pcs.Acq_host_id,
			pcs.Card_no,
			pcs.Merchant_id,
			pcs.Terminal_id,
			pcs.Void_invoice_no,
			atol(pcs.Tran_amount)/100.,
			atol(pcs.Tran_amount)/100. );
		}
	}
	else {
		//修改票据号为0时, 原使用TRACE_NO作为查找原交易的依据, 
		//为使用AUTH_NO作为查找原交易的依据.
		if (fabs(atol(pcs.Tran_amount)/100.) < 0.01) {
			sprintf(sqlstr, "			\
			SELECT	*	FROM	%s		\
			WHERE	acq_bank_id	=	\'%s\'	\
			AND	acq_host_id	=	\'%s\'	\
			AND	card_no		=	\'%s\'	\
			AND	merchant_id	=	\'%s\'	\
			AND	terminal_id	=	\'%s\'	\
			AND	tran_flag	=	\'0\'	\
			AND	saf_flag	=	\'0\'	\
			AND	snd_settle_flag =	\'N\'	\
			AND	resp_code	=	\'00\'	\
			AND	auth_no		=	\'%s\'",
			table_name,
			pcs.Acq_bank_id,
			pcs.Acq_host_id,
			pcs.Card_no,
			pcs.Merchant_id,
			pcs.Terminal_id,
			pcs.Auth_no);
		}
		else {
			sprintf(sqlstr, "			\
			SELECT	*	FROM	%s		\
			WHERE	acq_bank_id	=	\'%s\'	\
			AND	acq_host_id	=	\'%s\'	\
			AND	card_no		=	\'%s\'	\
			AND	merchant_id	=	\'%s\'	\
			AND	terminal_id	=	\'%s\'	\
			AND	tran_flag	=	\'0\'	\
			AND	saf_flag	=	\'0\'	\
			AND	snd_settle_flag =	\'N\'	\
			AND	resp_code	=	\'00\'	\
			AND	auth_no		=	\'%s\'	\
			AND	(tran_amt - %lf) < 0.001	\
			AND	(tran_amt - %lf) > -0.001",
			table_name,
			pcs.Acq_bank_id,
			pcs.Acq_host_id,
			pcs.Card_no,
			pcs.Merchant_id,
			pcs.Terminal_id,
			pcs.Auth_no,
			atol(pcs.Tran_amount)/100.,
			atol(pcs.Tran_amount)/100.);
		}
	}
	
	return 0;
}

/********************************************************
为查 cur_tran_ls, his_tran_ls 组查询包
REFUND交易,需要组织查询流水数据包。
ENTRY:		table_name	= cur_tran_ls/his_tran_ls"
RETURN:		0	OK	--> sqlstr
		1	NEED NOT PACK
*********************************************************/
int pack_sqlstr_2( sqlstr, table_name )
char	*sqlstr;
char	*table_name;
{
S_tran_ls	tran_ls;
double		tran_amount=0.;

	switch(pcs.Tran_type) {
	case	REFUND:
		tran_amount = atol(pcs.Tran_amount) / 100.;

		sprintf(sqlstr, "				\
		SELECT	*	FROM	%s			\
		WHERE	acq_bank_id	=	\'%s\'		\
		AND	acq_host_id	=	\'%s\'		\
		AND	card_no		=	\'%s\'		\
		AND	merchant_id	=	\'%s\'		\
		AND	terminal_id	=	\'%s\'		\
		AND	tran_flag	=	\'0\'		\
		AND	saf_flag	=	\'0\'		\
		AND	resp_code	=	\'00\'		\
		AND	(  (tran_type	=	%d)		\
			OR (tran_type	=	%d)  )		\
		AND	(tran_amt - %lf) < 0.001		\
		AND	(tran_amt - %lf) > -0.001",
		table_name,
		pcs.Acq_bank_id,
		pcs.Acq_host_id,
		pcs.Card_no,
	 	pcs.Merchant_id,
	 	pcs.Terminal_id,
		PURCHASE, CONFIRM,
		tran_amount,
		tran_amount);

		return 0;

	default:
		return 0;
	}
}

/****************************************************
把 PUBLIC --> S_tran_ls
ENTRY:
RETURN:
*****************************************************/
pcs2posls ( ls, pcs )
PUBLIC		*pcs;
S_tran_ls	*ls;
{
char	wdate[9];
char	wtime[7];
	
	memset(ls, '\0', sizeof(S_tran_ls));

	//增加对数据库中非空字段的处理
	if (pcs->Acq_bank_id[0] == '\0' ||
	    pcs->Acq_bank_id[0] == ' ') {
		sprintf(pcs->Acq_bank_id, G_sys_param.bank_id);
	}

	if (pcs->Acq_host_id[0] == '\0' ||
	    pcs->Acq_host_id[0] == ' ') {
		sprintf(pcs->Acq_host_id, G_sys_param.host_id);
	}

	if (pcs->Iss_bank_id[0] == '\0' ||
	    pcs->Iss_bank_id[0] == ' ') {
		sprintf(pcs->Iss_bank_id, "9999");
	}

	strcpy(ls->acq_bank_id,	pcs->Acq_bank_id);
	strcpy(ls->acq_host_id,	pcs->Acq_host_id);
	strcpy(ls->iss_bank_id,	pcs->Iss_bank_id);
	strcpy(ls->snd_bank_id,	pcs->Snd_bank_id);
	strcpy(ls->snd_host_id,	pcs->Snd_host_id);
	strcpy(ls->rcv_bank_id,	pcs->Rcv_bank_id);
	strcpy(ls->rcv_host_id,	pcs->Rcv_host_id);

	errcall(ERROR, "G_sys_param.logic_date[%s]", G_sys_param.logic_date);
	strcpy(ls->local_logic_date, G_sys_param.logic_date);
	strcpy(ls->snd_logic_date, pcs->Snd_settle_date);
	strcpy(ls->rcv_logic_date, pcs->Rcv_settle_date);
	strcpy(ls->agt_logic_date, pcs->Agent_settle_date);
	strcpy(ls->adv_logic_date, pcs->Host_settle_date);
	
	//增加对数据库中非空字段的处理
	if (pcs->Local_sys_date[0] == '\0' ||
	    pcs->Local_sys_date[0] == ' ') {
		getdatef(wdate, "");
		strcpy(pcs->Local_sys_date, wdate);
	}

	if (pcs->Local_sys_time[0] == '\0' ||
	    pcs->Local_sys_time[0] == ' ') {
		getdatef(wtime, "");
		strcpy(pcs->Local_sys_time, wtime);
	}

	strcpy(ls->local_sys_date, pcs->Local_sys_date);
	strcpy(ls->local_sys_time, pcs->Local_sys_time);
	strcpy(ls->tran_sys_time, pcs->Tran_sys_time);
	
	strcpy(ls->terminal_id, pcs->Terminal_id);
	strcpy(ls->merchant_id, pcs->Merchant_id);
	strcpy(ls->merchant_name, pcs->Merchant_name);
	
	strcpy(ls->mcc, pcs->Mcc);
	
	strcpy(ls->bank_type, pcs->Bank_type);
	strcpy(ls->card_type, pcs->Card_type);

	strcpy(ls->card_no, pcs->Card_no);
	strcpy(ls->exp_date, pcs->Exp_date);

	ls->id_type[0] = pcs->Person_id_type;
	strcpy(ls->person_id, pcs->Person_id);

	ls->tran_type = pcs->Tran_type;
	ls->void_tran_type = pcs->Void_tran_type;
	ls->void_old_tran_type = pcs->Void_old_tran_type;

	ls->adv_flag[0] = '0';
	ls->saf_flag[0] = '0';	
	ls->tran_flag[0] = '0';	
	/* tran_flag: 	 '0'--正常交易  
			 '1'--已撤消  
			 '2'--已确认 
			 '3'--已调整  
			 '4'--已退货 
	*/

	ls->trace_no	=	pcs->Trace_no;
	ls->void_trace_no	=	pcs->Void_trace_no;

	ls->host_ls_no	=	pcs->Host_tran_ls;
	ls->batch_no	=	pcs->Batch_no;
	ls->invoice_no	=	pcs->Invoice_no;
	ls->void_invoice_no =	pcs->Void_invoice_no;

	if (pcs->Tran_type == POS_VOID){
		ls->tran_amt = 0.;
		ls->void_amt = atol(pcs->Tran_amount) / 100.;
	}
	else {
		ls->tran_amt = atol(pcs->Tran_amount) / 100.;
		ls->void_amt = atol(pcs->Void_amount) / 100.;
	}

	ls->add_amount	=	atol(pcs->Fee)/100.;

	strcpy(ls->resp_code,	pcs->Resp_code);
	strcpy(ls->resp_bank_id, pcs->Resp_bank_id);
	strcpy(ls->resp_host_id, pcs->Resp_host_id);

	strcpy(ls->auth_no,	pcs->Auth_no);
	strcpy(ls->tran_rrn,	pcs->Rrn);
	strcpy(ls->oper_no,	pcs->Oper_no);

	ls->edc_err_flag[0] = '0';
	ls->offline_flag[0] = '0';		/* 正常交易 */

	if (pcs->Tran_type == ISS_ADVICE	||
		pcs->Tran_type == ISS_REV_ADVICE)
		ls->offline_flag[0] = '1';  /* 离线交易,通知发卡交易 */
	
	if (pcs->Ccy_code[0] == '\0')
		strcpy(ls->ccy_code, "156");
	else
		strcpy(ls->ccy_code, pcs->Ccy_code);

	ls->snd_settle_flag[0] = 'N';
	ls->rcv_settle_flag[0] = 'N';
	ls->agt_settle_flag[0] = 'N';
	ls->adv_settle_flag[0] = 'N';

	ls->manual_flag[0] = 'N';
	if (!memcmp(pcs->Terminal_id, "TEL", 3) ||
	    !memcmp(pcs->Terminal_id, "TRM", 3) ||
	    !memcmp(pcs->Terminal_id, "TLX", 3) ||
	    !memcmp(pcs->Terminal_id, "VOC", 3)) 
		ls->manual_flag[0] = 'Y';

	strcpy(ls->input_mode, pcs->Input_mode);
	
	memcpy(ls->track2, pcs->Card_track2, TRACK2_LEN);
	memcpy(ls->track3, pcs->Card_track3, TRACK3_LEN);
	ls->track2[TRACK2_LEN] = '\0';
	ls->track3[TRACK3_LEN] = '\0';

	memcpy(ls->add_data, pcs->Add_data, 250);
	ls->add_data[250] = '\0';

	getdatef(wdate,"");
	sprintf(ls->update_date,"%8.8s",wdate);
	gettimef(wtime,"");
	sprintf(ls->update_time,"%6.6s",wtime);

	return;
}

/************************************************************
功能:
	检查黑名单:
ENTRY:	pcs->card_no
RETURN:	-1	FAIL	
	0	正常卡
	1	黑名单卡
************************************************************/
int check_hmd()
{
S_wb_list	hm;
int		i=0;

	if (strlen(pcs.Card_no) > sizeof(hm.card_no)) {
		strncpy(hm.card_no, pcs.Card_no, sizeof(hm.card_no));
		hm.card_no[strlen(hm.card_no)] = '\0';
	}
	else
		strcpy(hm.card_no, pcs.Card_no);

	i = select_hmd(&hm);
	switch(i) {
	    case -2:				/* not found */
		return 0;
	    case 0:				/* wb_card */
		i = atoi(hm.wb_type);
		switch(i) {
		    case 208:
			strcpy(pcs.Resp_code, LOST_CARD);
			break;
		    case 209:
			strcpy(pcs.Resp_code, STOLEN_CARD);
			break;
		    default:
			strcpy(pcs.Resp_code, LIMIT_CARD);
			break;
		}
		strcpy(pcs.Resp_bank_id, G_sys_param.bank_id);
		strcpy(pcs.Resp_host_id, G_sys_param.host_id);
		return 1;

	    case -1:			
		strcpy(pcs.Resp_code, SYS_FAIL);
		strcpy(pcs.Resp_bank_id, G_sys_param.bank_id);
		strcpy(pcs.Resp_host_id, G_sys_param.host_id);
		return -1;
	}
}

⌨️ 快捷键说明

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