📄 addadv.ec
字号:
//消费-存款-退货-取款-确认-调整-预授-离线-撤消-冲正
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 + -