📄 posls.c
字号:
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 + -