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

📄 addadv.ec

📁 界面库
💻 EC
📖 第 1 页 / 共 2 页
字号:
	//消费-存款-退货-取款-确认-调整-预授-离线-撤消-冲正 
	memset(buf, '\0', sizeof(buf));
	if (!strcmp(pcs->Card_type, CREDIT_CARD)) {
		readtab("sysparam.tab", "ADVICE_ENABLE",
			"CREDIT_ISS_ADVICE", buf);

		switch(pcs->Tran_type){
		case PURCHASE:
			if (buf[0] != '1') 
				return;
			break;
		case WITHDRAWAL:
			if (buf[1] != '1') 
				return;
			break;
		case REFUND:
			if (buf[2] != '1') 
				return;
			break;
		case DEPOSIT:
			if (buf[3] != '1') 
				return;
			break;
		case CONFIRM:
			if (buf[4] != '1') 
				return;
			break;
		case ADJUST:
			if (buf[5] != '1') 
				return;
			break;
		case PRE_AUTH:
			if (buf[6] != '1') 
				return;
			break;
		case OFFLINE:
			if (buf[7] != '1') 
				return;
			break;
		case POS_VOID:
			if (buf[8] != '1' || pcs->Void_tran_type == PRE_AUTH) 
				return;
			break;
		case REVERSAL:
			if (buf[9] != '1') 
				return;
			break;
		default:
			return;
		}
	}
	else if (!strcmp(pcs->Card_type, DEBIT_CARD)) {
		readtab("sysparam.tab", "ADVICE_ENABLE",
			"DEBIT_ISS_ADVICE", buf);

		switch(pcs->Tran_type){
		case PURCHASE:
			if (buf[0] != '1') 
				return;
			break;
		case WITHDRAWAL:
			if (buf[1] != '1') 
				return;
			break;
		case REFUND:
			if (buf[2] != '1') 
				return;
			break;
		case DEPOSIT:
			if (buf[3] != '1') 
				return;
			break;
		case CONFIRM:
			if (buf[4] != '1') 
				return;
			break;
		case ADJUST:
			if (buf[5] != '1') 
				return;
			break;
		case PRE_AUTH:
			if (buf[6] != '1') 
				return;
			break;
		case OFFLINE:
			if (buf[7] != '1') 
				return;
			break;
		case POS_VOID:
			if (buf[8] != '1' || pcs->Void_tran_type == PRE_AUTH) 
				return;
			break;
		case REVERSAL:
			if (buf[9] != '1') 
				return;
			break;
		default:
			return;
		}
	}
	else {
		readtab("sysparam.tab", "ADVICE_ENABLE",
			"FOREIGN_ISS_ADVICE", buf);

		switch(pcs->Tran_type){
		case PURCHASE:
			if (buf[0] != '1') 
				return;
			break;
		case WITHDRAWAL:
			if (buf[1] != '1') 
				return;
			break;
		case REFUND:
			if (buf[2] != '1') 
				return;
			break;
		case DEPOSIT:
			if (buf[3] != '1') 
				return;
			break;
		case CONFIRM:
			if (buf[4] != '1') 
				return;
			break;
		case ADJUST:
			if (buf[5] != '1') 
				return;
			break;
		case PRE_AUTH:
			if (buf[6] != '1') 
				return;
			break;
		case OFFLINE:
			if (buf[7] != '1') 
				return;
			break;
		case POS_VOID:
			if (buf[8] != '1' || pcs->Void_tran_type == PRE_AUTH) 
				return;
			break;
		case REVERSAL:
			if (buf[9] != '1') 
				return;
			break;
		default:
			return;
		}
	}

	for(i=0; i<G_bank_base_num; i++)
	{
		if (!strcmp((G_bank_tab+i)->bank_id, pcs->Iss_bank_id))
			if (strcmp((G_bank_tab+i)->nas_version, "060")<0)
				return;
		else
			break;
	}

#ifdef wyz_mod_020121
	if (i == G_bank_base_num)
		return;
#endif

	//如果为本地卡,不发送发卡行通知
	if (!strcmp(pcs->Iss_bank_id, G_sys_param.bank_id)) 
		return;

	if (strcmp(pcs->Resp_code, SUCCESS)) 
		return;

	if (pcs->Tran_type != PURCHASE   &&
	    pcs->Tran_type != AUTH_PUR   &&
	    pcs->Tran_type != WITHDRAWAL &&
	    pcs->Tran_type != REFUND     &&
	    pcs->Tran_type != DEPOSIT    &&
	    pcs->Tran_type != PRE_AUTH   &&
	    pcs->Tran_type != CONFIRM    &&
	    pcs->Tran_type != POS_VOID   &&
	    pcs->Tran_type != ADJUST     &&
	    pcs->Tran_type != OFFLINE    &&
	    pcs->Tran_type != REVERSAL) 
		return;

	pcs2adv_iss(pcs, &adv);

	$insert into saf_ls values (:adv);
	if (SQLCODE) {
		errcall(ERROR, "Error insert into saf_ls![%d]", SQLCODE);
		advfile(pcs);
	}

	return;
}

/*=================================================================
功能:
将发卡行通知交易的PUBLIC结构中的内容填入SAF表结构中

ENTRY:  PUBLIC结构 *pcs
	S_saf_ls   *adv
RETURN:	SUCC
===================================================================*/
int pcs2adv_iss(PUBLIC *pcs, S_saf_ls *adv)
{

char 	wdate[10];
char 	wtime[7];

	memset(adv, 0, sizeof(S_saf_ls));

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

	strcpy(adv->acq_bank_id, pcs->Acq_bank_id);
	strcpy(adv->acq_host_id, pcs->Acq_host_id);
	strcpy(adv->iss_bank_id, pcs->Iss_bank_id);

	strcpy(adv->snd_bank_id, pcs->Snd_bank_id);
	strcpy(adv->snd_host_id, pcs->Snd_host_id);
	strcpy(adv->rcv_bank_id, pcs->Rcv_bank_id);
	strcpy(adv->rcv_host_id, pcs->Rcv_host_id);

	strcpy(adv->adv_logic_date, pcs->Host_settle_date);
	strcpy(adv->snd_logic_date, pcs->Snd_settle_date);
	strcpy(adv->rcv_logic_date, pcs->Rcv_settle_date);
	strcpy(adv->agt_logic_date, pcs->Agent_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);
	}

	if (pcs->Tran_sys_time[0] == '\0' ||
	    pcs->Tran_sys_time[0] == ' ') {
		sprintf(pcs->Tran_sys_time, "%04s%06s",
			pcs->Local_sys_date+4,
			pcs->Local_sys_time);
	}

	strcpy(adv->local_sys_date, pcs->Local_sys_date);
	strcpy(adv->local_sys_time, pcs->Local_sys_time);

	//设置交易系统时间
	strcpy(adv->tran_sys_time, pcs->Tran_sys_time);

	strcpy(adv->terminal_id, pcs->Terminal_id);
	strcpy(adv->merchant_id, pcs->Merchant_id);
	strcpy(adv->merchant_name, pcs->Merchant_name);
	strcpy(adv->mcc, pcs->Mcc);

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

	if (pcs->Person_id_type == '\0')
		adv->id_type[0] = '1';
	strcpy(adv->person_id, pcs->Person_id);

	switch(pcs->Tran_type) {
	case	REVERSAL:
		adv->tran_type = ISS_REV_ADVICE;
		adv->void_tran_type = pcs->Void_tran_type;
		adv->void_old_tran_type = pcs->Void_old_tran_type;
		break;

	default:
		adv->tran_type = ISS_ADVICE;
		adv->void_tran_type = pcs->Tran_type;
		adv->void_old_tran_type = pcs->Void_tran_type;
		break;
	}
	
	adv->rcv_module_id = pcs->Module_id;

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

	adv->invoice_no = pcs->Invoice_no;
	adv->void_invoice_no = pcs->Void_invoice_no;

	adv->host_ls_no = pcs->Host_tran_ls;
	adv->batch_no = pcs->Batch_no;

	strcpy(adv->auth_no, pcs->Auth_no);
	strcpy(adv->tran_rrn, pcs->Rrn);


	adv->tran_amt = atol(pcs->Tran_amount)/100.;
	adv->void_amt = atol(pcs->Void_amount)/100.;

	//保存这些信息后,存储转发模块处理时如何区分
	//附加金额为手续费还是小费
	if (atol(pcs->Fee) > 0)
		adv->add_amount = atol(pcs->Fee)/100.;
	if (atol(pcs->Tip) > 0)
		adv->add_amount = atol(pcs->Tip)/100.;
	
	//设置和转账交易相关的标志
	strcpy(adv->agent_tran_type, pcs->Agent_type);
	strcpy(adv->trans_acct_type, pcs->Virement_type);
	strcpy(adv->acct_type, pcs->Accnt_type);
	strcpy(adv->acct_no_type, pcs->Accounts_type);

	strcpy(adv->trans_acct_no, pcs->Trans_card_no);

	strcpy(adv->bank_type, pcs->Bank_type);
	strcpy(adv->card_type, pcs->Card_type);

	strcpy(adv->ccy_code, pcs->Ccy_code);

	adv->adv_flag[0] = '1';
	adv->saf_flag[0] = 'R';

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

#ifdef wyz020503_mod
	strcpy(adv->void_resp_code, pcs->Old_resp_code);
	strcpy(adv->void_resp_bank_id, pcs->Old_resp_bank_id);
	strcpy(adv->void_resp_host_id, pcs->Old_resp_host_id);
#else
	strcpy(adv->void_resp_bank_id, pcs->Sign_bankid);
#endif

	strcpy(adv->oper_no, pcs->Oper_no);

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

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

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

	getdatef(wdate,"");
	sprintf(adv->update_date,"%8.8s",wdate);
	gettimef(wtime,"");
	sprintf(adv->update_time,"%6.6s",wtime);
	
	return 0;
}

/*=================================================================
功能:
将通知交易的PUBLIC结构中的内容填入SAF文件中

ENTRY:  PUBLIC结构 *pcs
	S_saf_ls   *adv
RETURN:	SUCC
	-1 FAIL
==================================================================*/
int advfile(PUBLIC *pcs)
{

FILE 		*fp;
char 		date[11], time[9];


	fp = fopen((char *)getfname(WORKDIR, "/log/adv_file"), "a");
	if (fp == NULL) {
		errcall(ERROR, "Open host_log error!");
		return -1;
	}

	getdatef(date, "/");
	gettimef(time, ":");
	fprintf(fp, "------ %s %s ------\n", date, time);

	fprintf(fp, "host_logic_date[%s]  ", pcs->Host_settle_date);
	fprintf(fp, "snd_logic_date[%s] \n ", pcs->Snd_settle_date);
	fprintf(fp, "rcv_logic_date[%s]  ", pcs->Rcv_settle_date);
	fprintf(fp, "agent_logic_date[%s]  \n", pcs->Agent_settle_date);

	fprintf(fp, "local_sys_date[%s]  ", pcs->Local_sys_date);
	fprintf(fp, "local_sys_time[%s]\n", pcs->Local_sys_time);

	fprintf(fp, "acq_bank_id[%s]  ", pcs->Acq_bank_id);
	fprintf(fp, "acq_host_id[%s]  ", pcs->Acq_host_id);
	fprintf(fp, "iss_bank_id[%s]\n", pcs->Iss_bank_id);
	fprintf(fp, "snd_bank_id[%s]  ", pcs->Snd_bank_id);
	fprintf(fp, "snd_host_id[%s]  \n", pcs->Snd_host_id);
	fprintf(fp, "rcv_bank_id[%s]", pcs->Rcv_bank_id);
	fprintf(fp, "rcv_host_id[%s]\n", pcs->Rcv_host_id);

	fprintf(fp, "msg_id[%s]  ", pcs->Msg_id);
	fprintf(fp, "proc_code[%s]\n", pcs->Proc_code);

	fprintf(fp, "tran_type[%d]  ", pcs->Tran_type);
	fprintf(fp, "void_tran_type[%d]\n", pcs->Void_tran_type);

	fprintf(fp, "merchant_id[%s]  ", pcs->Merchant_id);
	fprintf(fp, "mcc[%s]  ", pcs->Mcc);
	fprintf(fp, "terminal_id[%s]\n", pcs->Terminal_id);

	fprintf(fp, "oper_no[%s]  ", pcs->Oper_no);
	fprintf(fp, "mode[%s]\n", pcs->Input_mode);

	fprintf(fp, "card_no[%s]  ", pcs->Card_no);
	fprintf(fp, "expire[%s]  ", pcs->Exp_date);
	fprintf(fp, "card_no2[%s]\n", pcs->Trans_card_no);
	fprintf(fp, "bank_type[%s]  ", pcs->Bank_type);
	fprintf(fp, "card_type[%s]\n", pcs->Card_type);

	fprintf(fp, "amount[%s]  ", pcs->Tran_amount);
	fprintf(fp, "void_amount[%s]  ", pcs->Void_amount);
	fprintf(fp, "current_balance[%s]\n", pcs->Current_balance);
	fprintf(fp, "fee[%s]	", pcs->Fee);
#ifndef wyz_mod_0410
	fprintf(fp, "tip[%s]\n", pcs->Tip);
#endif

	fprintf(fp, "batch_no[%ld]  ", pcs->Batch_no);
	fprintf(fp, "trace_no[%ld]  ", pcs->Trace_no);
	fprintf(fp, "void_trace_no[%ld]\n", pcs->Void_trace_no);
	fprintf(fp, "invoice_no[%ld]  ", pcs->Invoice_no);
	fprintf(fp, "void_invoice_no[%ld]  ", pcs->Void_invoice_no);
	fprintf(fp, "host_tran_ls[%ld]  ", pcs->Host_tran_ls);
	fprintf(fp, "auth_no[%s]\n", pcs->Auth_no);

#ifndef wyz_mod_0410
	fprintf(fp, "agent_tran_type[%s]	", pcs->Agent_type);
	fprintf(fp, "trans_acct_type[%s]	", pcs->Virement_type);
	fprintf(fp, "acct_type[%s]	", pcs->Accnt_type);
	fprintf(fp, "acct_no_type[%s]\n", pcs->Accounts_type);
	fprintf(fp, "trans_acct_no[%s]\n", pcs->Trans_card_no);
#endif

	fprintf(fp, "resp_code[%s]\n\n", pcs->Resp_code);
	fprintf(fp, "resp_bank[%s]\n\n", pcs->Resp_bank_id);
	fprintf(fp, "resp_host[%s]\n\n", pcs->Resp_host_id);

	fclose(fp);
	return 0;
}

⌨️ 快捷键说明

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