/*PB3.0系统自动生成demo源码文件*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <string.h>
#include <signal.h>
#include <setjmp.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <dirent.h>
#include <ctype.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <math.h>
#include "pbconstval.h"
#include "pbstructdef.h"
#include "atmi.h" /* TUXEDO Header File */
#include "stdarg.h"
#ifdef ORACLE_DATABASE
EXEC SQL include "pbranchdb.h";
#else
#include "pbranchdb.h"
#endif
#include "pberrlog.h"
#include "pbglbvardef.h"
#include "pbbasefunc.h"
EXEC SQL INCLUDE "pbappdb.h";
EXEC SQL INCLUDE "pbdbfunc.h";
EXEC SQL INCLUDE "pbbusi/busi004.h";
#define ENTRY_ROW 100
#define ENTRY_COL 1024
/* Fuction : Data_CashWithdrawal_RQ
* Action : CashWithdrawalRequest
* Input :
* Output :
* Author :
* Date : 2014/11/06
*/
int
Data_CashWithdrawal_RQ()
{
EXEC SQL BEGIN DECLARE SECTION;
char systracenum[6+1];
char trandatetime[10+1];
EXEC SQL END DECLARE SECTION;
char entry[ENTRY_ROW][ENTRY_COL];
int entry_count = 0;
int i =0;
struct S_CSTM_INFO s_cstm_info[1];
char pbjourno[10+1];
char hostjourno[10+1];
char listjourno[10+1];
char pwd[6+1];
char pwd_enc[6+1];
char filename[50+1];
char filepath[128+1];
char fullfilepath[256+1];
FILE *fp=NULL;
char strbuf[10240+1];
char trandate[8+1];
char AccNum[10+1];
int ret = -1;
int rellen = 0;
char card_id[32+1];
char tmp_str[100+1];
char currtype[2+1];
double tmp_tran_amt = 0.00;
char PAccNum[99+1];
char ProcCode[6+1];
char tran_amt[12+1];
char tran_date_time[10+1];
char sys_trace_num[6+1];
char local_time[6+1];
char local_tran_date[4+1];
char expiry_date[4+1];
char settle_date[4+1];
char merchant_type[4+1];
char acq_ins_cou_code[3+1];
char ser_entry_mod[3+1];
char ser_cond_code[2+1];
char tran_fee[9+1];
char acq_ins_id[99+1];
char track2_data[99+1];
char retr_ref_num[12+1];
char card_accp_termid[8+1];
char card_accp_id[15+1];
char card_accp_name_loc[40+1];
char tran_curr_code[3+1];
char pin_block_data[16+1];
memset(systracenum,0x00,sizeof(systracenum));
memset(trandatetime,0x00,sizeof(trandatetime));
memset(entry,0,sizeof(entry));
memset(AccNum,0,sizeof(AccNum));
memset(pwd,0,sizeof(pwd));
memset(pwd_enc,0,sizeof(pwd_enc));
memset(&s_cstm_info,0x00,sizeof(s_cstm_info));
memset(pbjourno,0x00,sizeof(pbjourno));
memset(hostjourno,0x00,sizeof(hostjourno));
memset(listjourno,0x00,sizeof(listjourno));
memset(filename,0x00,sizeof(filename));
memset(filepath,0x00,sizeof(filepath));
memset(fullfilepath,0x00,sizeof(fullfilepath));
memset(strbuf,0x00,sizeof(strbuf));
memset(trandate,0x00,sizeof(trandate));
memset(card_id,0x00,sizeof(card_id));
memset(tmp_str,0x00,sizeof(tmp_str));
memset(currtype,0x00,sizeof(currtype));
memset(PAccNum,0x00,sizeof(PAccNum));
memset(ProcCode,0x00,sizeof(ProcCode));
memset(tran_amt,0x00,sizeof(tran_amt));
memset(tran_date_time,0x00,sizeof(tran_date_time));
memset(sys_trace_num,0x00,sizeof(sys_trace_num));
memset(local_time,0x00,sizeof(local_time));
memset(local_tran_date,0x00,sizeof(local_tran_date));
memset(expiry_date,0x00,sizeof(expiry_date));
memset(settle_date,0x00,sizeof(settle_date));
memset(merchant_type,0x00,sizeof(merchant_type));
memset(acq_ins_cou_code,0x00,sizeof(acq_ins_cou_code));
memset(ser_entry_mod,0x00,sizeof(ser_entry_mod));
memset(ser_cond_code,0x00,sizeof(ser_cond_code));
memset(tran_fee,0x00,sizeof(tran_fee));
memset(acq_ins_id,0x00,sizeof(acq_ins_id));
memset(track2_data,0x00,sizeof(track2_data));
memset(retr_ref_num,0x00,sizeof(retr_ref_num));
memset(card_accp_termid,0x00,sizeof(card_accp_termid));
memset(card_accp_id,0x00,sizeof(card_accp_id));
memset(card_accp_name_loc,0x00,sizeof(card_accp_name_loc));
memset(tran_curr_code,0x00,sizeof(tran_curr_code));
memset(pin_block_data,0x00,sizeof(pin_block_data));
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] begin =========");
/* Get the data */
ret = Get_pbjourno(pbjourno,hostjourno,listjourno);
if( ret != PB_OK )
{
WriteLog(ERR_LVL , "Err Get_pbjourno" );
Pb_ReturnClient8583("06");
return PB_ERR;
}
GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
trim(pbjourno);
trim(hostjourno);
trim(listjourno);
trim(trandate);
WriteLog(ERR_LVL,"pbjourno[%s]",pbjourno);
WriteLog(ERR_LVL,"hostjourno[%s]",hostjourno);
WriteLog(ERR_LVL,"listjourno[%s]",listjourno);
WriteLog(ERR_LVL,"trandate[%s]",trandate);
GetPoolDataByName("Bconnex8583","PAccNum",0,0,PAccNum,&rellen);
GetPoolDataByName("Bconnex8583","ProcCode",0,0,ProcCode,&rellen);
GetPoolDataByName("Bconnex8583","tran_amt",0,0,tran_amt,&rellen);
GetPoolDataByName("Bconnex8583","tran_date_time",0,0,tran_date_time,&rellen);
GetPoolDataByName("Bconnex8583","sys_trace_num",0,0,sys_trace_num,&rellen);
GetPoolDataByName("Bconnex8583","local_time",0,0,local_time,&rellen);
GetPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,&rellen);
GetPoolDataByName("Bconnex8583","expiry_date",0,0,expiry_date,&rellen);
GetPoolDataByName("Bconnex8583","settle_date",0,0,settle_date,&rellen);
GetPoolDataByName("Bconnex8583","merchant_type",0,0,merchant_type,&rellen);
GetPoolDataByName("Bconnex8583","acq_ins_cou_code",0,0,acq_ins_cou_code,&rellen);
GetPoolDataByName("Bconnex8583","ser_entry_mod",0,0,ser_entry_mod,&rellen);
GetPoolDataByName("Bconnex8583","ser_cond_code",0,0,ser_cond_code,&rellen);
GetPoolDataByName("Bconnex8583","tran_fee",0,0,tran_fee,&rellen);
GetPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,&rellen);
GetPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,&rellen);
GetPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,&rellen);
GetPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,&rellen);
GetPoolDataByName("Bconnex8583","card_accp_id",0,0,card_accp_id,&rellen);
GetPoolDataByName("Bconnex8583","card_accp_name_loc",0,0,card_accp_name_loc,&rellen);
GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
GetPoolDataByName("Bconnex8583","pin_block_data",0,0,pin_block_data,&rellen);
rtrim(PAccNum);
rtrim(ProcCode);
rtrim(tran_amt);
rtrim(tran_date_time);
rtrim(sys_trace_num);
rtrim(local_time);
rtrim(local_tran_date);
rtrim(expiry_date);
rtrim(settle_date);
rtrim(merchant_type);
rtrim(acq_ins_cou_code);
rtrim(ser_entry_mod);
rtrim(ser_cond_code);
rtrim(tran_fee);
rtrim(acq_ins_id);
rtrim(track2_data);
rtrim(retr_ref_num);
rtrim(card_accp_termid);
rtrim(card_accp_id);
rtrim(card_accp_name_loc);
rtrim(tran_curr_code);
rtrim(pin_block_data);
WriteLog(ERR_LVL,"PAccNum[%s]",PAccNum);
WriteLog(ERR_LVL,"ProcCode[%s]",ProcCode);
WriteLog(ERR_LVL,"tran_amt[%s]",tran_amt);
WriteLog(ERR_LVL,"tran_date_time[%s]",tran_date_time);
WriteLog(ERR_LVL,"sys_trace_num[%s]",sys_trace_num);
WriteLog(ERR_LVL,"local_time[%s]",local_time);
WriteLog(ERR_LVL,"local_tran_date[%s]",local_tran_date);
WriteLog(ERR_LVL,"expiry_date[%s]",expiry_date);
WriteLog(ERR_LVL,"settle_date[%s]",settle_date);
WriteLog(ERR_LVL,"merchant_type[%s]",merchant_type);
WriteLog(ERR_LVL,"acq_ins_cou_code[%s]",acq_ins_cou_code);
WriteLog(ERR_LVL,"ser_entry_mod[%s]",ser_entry_mod);
WriteLog(ERR_LVL,"ser_cond_code[%s]",ser_cond_code);
WriteLog(ERR_LVL,"tran_fee[%s]",tran_fee);
WriteLog(ERR_LVL,"acq_ins_id[%s]",acq_ins_id);
WriteLog(ERR_LVL,"track2_data[%s]",track2_data);
WriteLog(ERR_LVL,"retr_ref_num[%s]",retr_ref_num);
WriteLog(ERR_LVL,"card_accp_termid[%s]",card_accp_termid);
WriteLog(ERR_LVL,"card_accp_id[%s]",card_accp_id);
WriteLog(ERR_LVL,"card_accp_name_loc[%s]",card_accp_name_loc);
WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
WriteLog(ERR_LVL,"pin_block_data[%s]",pin_block_data);
/* 由于报文不包含小数点,需要对tran_amt进行格式化*/
sscanf(tran_amt,"%lf",&tmp_tran_amt);
tmp_tran_amt = tmp_tran_amt/100;
WriteLog(ERR_LVL,"tmp_tran_amt[%lf]",tmp_tran_amt);
/* 根据系统追踪号 和 交易日期时间 检查是否重复记账记录 */
memcpy(systracenum,sys_trace_num,6);
memcpy(trandatetime,tran_date_time,10);
WriteLog(ERR_LVL,"systracenum[%s]",systracenum);
WriteLog(ERR_LVL,"trandatetime[%s]",trandatetime);
EXEC SQL SELECT *
FROM t_ap_journal
WHERE rltseqno = :systracenum
AND hststlmdtime = :trandatetime
AND transtat = "0";
/* 存在重复记账记录,报错返回 */
if(SQLCODE!=100)
{
WriteLog(ERR_LVL,"ERROR: select data err!systracenum[%s] trandatetime[%s] [%s] %ld\n", systracenum,trandatetime,SQLMSG,SQLCODE);
Pb_ReturnClient8583("06");
return PB_ERR;
}
WriteLog(ERR_LVL, "SQLCODE is [%d]", SQLCODE);
/* HostAddHead */
ret = Data_HostAddHead("5712");
if(ret !=0)
{
WriteLog(ERR_LVL,"HostAddHead failed!");
Pb_ReturnClient8583("96");
return PB_ERR;
}
/* HostAddBody */
strncpy(card_id,track2_data+1,19);
rtrim(card_id);
WriteLog(ERR_LVL,"card_id[%s]",card_id);
/**********hsm test************/
char pin_block[6+1];
char mingwen[6+1];
unsigned char pin_data[16+1];
unsigned char sPinOut2[17];
memset(pin_block,0x00,sizeof(pin_data));
memset(mingwen,0x00,sizeof(mingwen));
memset(pin_data,0x00,sizeof(pin_data));
memset(sPinOut2,0x00,sizeof(sPinOut2));
memcpy(pin_block,"111111",6);
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
WriteLog(ERR_LVL,"pin_block[%s]",pin_block);
ret=Data_encry_new(pin_data,card_id,pin_block);
if(ret !=0)
{
WriteLog(ERR_LVL,"call Data_encry failed!");
Pb_ReturnClient8583("96");
return PB_ERR;
}
trim(pin_data);
WriteLog(ERR_LVL,"pin_data=[%s]",pin_data);
ret = Data_decry_new(pin_data,card_id,mingwen);
if(ret !=0)
{
WriteLog(ERR_LVL,"call Data_decry failed!");
Pb_ReturnClient8583("96");
return PB_ERR;
}
trim(mingwen);
WriteLog(ERR_LVL,"mingwen=[%s]",mingwen);
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
/**********hsm test************/
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
/******* 密码软加密 *************/
memcpy(pwd,mingwen,6);
ret = CrtCstmPwd(pwd,pwd_enc);
if( ret != PB_OK )
{
WriteLog( ERR_LVL ,"Err CrtCstmPwd ");
Pb_ReturnClient8583("06");
return PB_ERR;
}
WriteLog( ERR_LVL ,"pwd[%s] pwd_enc[%s]",pwd,pwd_enc);
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
/* 币种转换 */
if(memcmp(currtype,"XX",2)==0)
{
WriteLog( ERR_LVL, "get currtype err!!!! currtype[%s] tran_curr_code[%s]", currtype,tran_curr_code);
Pb_ReturnClient8583("06");
return PB_ERR;
}
else
{
WriteLog( ERR_LVL, "Now currtype[%s]", currtype);
}
/* 币种检查,系统不支持跨币种记账,所以只允许本币取款 */
if(memcmp(currtype,"40",2)!=0)
{
WriteLog( ERR_LVL, "cashwithdrawal currtype err!currtype[%s]", currtype);
Pb_ReturnClient8583("06");
return PB_ERR;
}
/* 5712 body */
sprintf(tmp_str,"%s||%s|%lf|||%s|%s||| ",card_id,currtype,tmp_tran_amt,pwd_enc,track2_data);
WriteLog(ERR_LVL,"5712 condition[%s]",tmp_str);
PutPoolDataByName("FDYL","checkstr",0,0,"01111311111111111011111011100000000000000000000000000000",0);
PutPoolDataByName("FDYL","condition",0,0,tmp_str,0);
/* 5710 body */
PutPoolDataByName( "CBS", "CardFlag", 0, 0, "2" , 0 );
sprintf( filename, "%s-%s.txt", "001003", pbjourno );
sprintf( filepath, "%s/%s/%s",getenv("INST_PATH"),getenv("INST_NO_PATH"), filename );
sprintf( fullfilepath, "%s/%s",getenv("PRINTERDIR"), filepath );
PutPoolDataByName( "CBS", "Track3Data", 0, 0, filepath , 0 );
WriteLog( ERR_LVL, "filepath[%s] ", filepath );
WriteLog( ERR_LVL, "fullfilepath[%s] ", fullfilepath );
memcpy(s_cstm_info[0].acc_no,card_id,19);
s_cstm_info[0].tran_amt = tmp_tran_amt;
s_cstm_info[0].fee_amt = 0.00;
memcpy(s_cstm_info[0].curr_type,currtype,2);
WriteLog( ERR_LVL , "s_cstm_info.acc_no[%s]",s_cstm_info->acc_no);
WriteLog( ERR_LVL , "s_cstm_info.tran_amt[%lf]",s_cstm_info->tran_amt);
WriteLog( ERR_LVL , "s_cstm_info.curr_type[%s]",s_cstm_info->curr_type);
/* write acc file */
fp = fopen( fullfilepath, "w+b" );
if( NULL == fp )
{
WriteLog( ERR_LVL, "Open file error![%s]",fullfilepath );
Pb_ReturnClient8583("96");
return PB_ERR;
}
/* 组装上传记账分录格式 */
ret = GetJourEntryArray3(trandate,s_cstm_info,entry,&entry_count);
if(ret != PB_OK)
{
WriteLog(ERR_LVL,"Err GetJournalEntry");
Pb_ReturnClient8583("96");
return PB_ERR;
}
WriteLog(ERR_LVL,"entry_count[%d]",entry_count);
/* 记账分录写入文件 */
for( i = 0;i<entry_count;i++)
{
fprintf( fp, "%s\n", entry[i] );
WriteLog(ERR_LVL,"entry[%s]",entry[i]);
}
fclose(fp);
sprintf( AccNum ,"%s" , &entry_count );
PutPoolDataByName( "CBS", "AccNum", 0, 0, AccNum , 0 );
/* ftp file to host */
ret = Host_ftpData( filename );
if( ret !=0 )
{
WriteLog(ERR_LVL,"Host_ftpData[%s] err", filename );
Pb_ReturnClient8583("96");
return PB_ERR;
}
/* Pb_ReturnClient8583("00"); */
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] end =========");
return PB_OK;
}
/* Fuction : Data_CashWithdrawal_RP
* Action : CashWithdrawalResponse
* Input :
* Output :
* Author :
* Date : 2014/11/06
*/
int
Data_CashWithdrawal_RP()
{
int ret = -1;
int rellen = 0;
char errcode[10+1];
char errmsg[300+1];
long hoststat=-1;
char pbjourno[10+1];
char hostjourno[10+1];
char listjourno[10+1];
char trandate[10+1];
char rem[300+1];
char rem_str[32+1];
char out_recode[2+1];
char auth_num[4+1];
char resp_code[2+1];
memset(auth_num,0x00,sizeof(auth_num));
memset(resp_code,0x00,sizeof(resp_code));
memset(out_recode, 0x00, sizeof(out_recode));
memset(errcode,0x00,sizeof(errcode));
memset(errmsg,0x00,sizeof(errmsg));
memset(rem,0x00,sizeof(rem));
memset(rem_str,0x00,sizeof(rem_str));
memset(pbjourno,0x00,sizeof(pbjourno));
memset(hostjourno,0x00,sizeof(hostjourno));
memset(listjourno,0x00,sizeof(listjourno));
memset(trandate,0x00,sizeof(trandate));
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] begin =========");
/* Get the data */
GetPoolDataByName("ABSHEAD", "_host_stat", 0, 0, (char *)&hoststat, &rellen );
WriteLog( ERR_LVL, "hoststat[%ld]", hoststat );
GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
WriteLog(ERR_LVL ,"trandate[%s]",trandate);
Get_pbjourno(pbjourno,hostjourno,listjourno);
if(hoststat==0)
{
ret = GetAuthNo(auth_num);
if(ret != PB_OK)
{
WriteLog(ERR_LVL ,"GetAuthNo Err");
Pb_ReturnClient8583("06");
return PB_ERR;
}
PutPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,0);
PutPoolDataByName("Bconnex8583","resp_code",0,0,"00",0);
WriteLog(ERR_LVL ,"Transaction Success!pbjourno[%s] hostjourno[%s] trandate[%s]",pbjourno,hostjourno,trandate);
}
else
{
GetPoolDataByName("ABSHEAD","_error_code",0,0,rem,&rellen);
if(strlen(rem)<=32)
{
memcpy(rem_str,rem,strlen(rem));
}
else
{
memcpy(rem_str,rem,32);
}
sscanf( rem, "[%[^]]]:%[^'']", errcode,errmsg );
trim(errcode);
trim(errmsg);
if(strlen(errcode)==0)
{
sscanf( rem, "%*[^0-9]%*[0-9]%*[^0-9]%[0-9]]:%[^'']",errcode,errmsg);
trim(errcode);
trim(errmsg);
}
WriteLog(ERR_LVL ,"errcode[%s]errmsg[%s]hoststat[%ld]",errcode,errmsg,hoststat);
errcode_transform(errcode,out_recode);
trim(out_recode);
WriteLog(ERR_LVL, "out_recode[%s]", out_recode);
Pb_ReturnClient8583(out_recode);
return PB_ERR;
}
Pb_ReturnClient8583("00");
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] end =========");
return PB_OK;
}
/* Fuction : Data_CashWithdrawal_RQ
* Action : CashWithdrawalRequest
* Input :
* Output :
* Author :
* Date : 2014/11/06
*/
int
Data_CashWithdrawal_RQ()
{
EXEC SQL BEGIN DECLARE SECTION;
char systracenum[6+1];
char trandatetime[10+1];
EXEC SQL END DECLARE SECTION;
char entry[ENTRY_ROW][ENTRY_COL];
int entry_count = 0;
int i =0;
struct S_CSTM_INFO s_cstm_info[1];
char pbjourno[10+1];
char hostjourno[10+1];
char listjourno[10+1];
char pwd[6+1];
char pwd_enc[6+1];
char filename[50+1];
char filepath[128+1];
char fullfilepath[256+1];
FILE *fp=NULL;
char strbuf[10240+1];
char trandate[8+1];
char AccNum[10+1];
int ret = -1;
int rellen = 0;
char card_id[32+1];
char tmp_str[100+1];
char currtype[2+1];
double tmp_tran_amt = 0.00;
char PAccNum[99+1];
char ProcCode[6+1];
char tran_amt[12+1];
char tran_date_time[10+1];
char sys_trace_num[6+1];
char local_time[6+1];
char local_tran_date[4+1];
char expiry_date[4+1];
char settle_date[4+1];
char merchant_type[4+1];
char acq_ins_cou_code[3+1];
char ser_entry_mod[3+1];
char ser_cond_code[2+1];
char tran_fee[9+1];
char acq_ins_id[99+1];
char track2_data[99+1];
char retr_ref_num[12+1];
char card_accp_termid[8+1];
char card_accp_id[15+1];
char card_accp_name_loc[40+1];
char tran_curr_code[3+1];
char pin_block_data[16+1];
memset(systracenum,0x00,sizeof(systracenum));
memset(trandatetime,0x00,sizeof(trandatetime));
memset(entry,0,sizeof(entry));
memset(AccNum,0,sizeof(AccNum));
memset(pwd,0,sizeof(pwd));
memset(pwd_enc,0,sizeof(pwd_enc));
memset(&s_cstm_info,0x00,sizeof(s_cstm_info));
memset(pbjourno,0x00,sizeof(pbjourno));
memset(hostjourno,0x00,sizeof(hostjourno));
memset(listjourno,0x00,sizeof(listjourno));
memset(filename,0x00,sizeof(filename));
memset(filepath,0x00,sizeof(filepath));
memset(fullfilepath,0x00,sizeof(fullfilepath));
memset(strbuf,0x00,sizeof(strbuf));
memset(trandate,0x00,sizeof(trandate));
memset(card_id,0x00,sizeof(card_id));
memset(tmp_str,0x00,sizeof(tmp_str));
memset(currtype,0x00,sizeof(currtype));
memset(PAccNum,0x00,sizeof(PAccNum));
memset(ProcCode,0x00,sizeof(ProcCode));
memset(tran_amt,0x00,sizeof(tran_amt));
memset(tran_date_time,0x00,sizeof(tran_date_time));
memset(sys_trace_num,0x00,sizeof(sys_trace_num));
memset(local_time,0x00,sizeof(local_time));
memset(local_tran_date,0x00,sizeof(local_tran_date));
memset(expiry_date,0x00,sizeof(expiry_date));
memset(settle_date,0x00,sizeof(settle_date));
memset(merchant_type,0x00,sizeof(merchant_type));
memset(acq_ins_cou_code,0x00,sizeof(acq_ins_cou_code));
memset(ser_entry_mod,0x00,sizeof(ser_entry_mod));
memset(ser_cond_code,0x00,sizeof(ser_cond_code));
memset(tran_fee,0x00,sizeof(tran_fee));
memset(acq_ins_id,0x00,sizeof(acq_ins_id));
memset(track2_data,0x00,sizeof(track2_data));
memset(retr_ref_num,0x00,sizeof(retr_ref_num));
memset(card_accp_termid,0x00,sizeof(card_accp_termid));
memset(card_accp_id,0x00,sizeof(card_accp_id));
memset(card_accp_name_loc,0x00,sizeof(card_accp_name_loc));
memset(tran_curr_code,0x00,sizeof(tran_curr_code));
memset(pin_block_data,0x00,sizeof(pin_block_data));
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] begin =========");
/* Get the data */
ret = Get_pbjourno(pbjourno,hostjourno,listjourno);
if( ret != PB_OK )
{
WriteLog(ERR_LVL , "Err Get_pbjourno" );
Pb_ReturnClient8583("06");
return PB_ERR;
}
GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
trim(pbjourno);
trim(hostjourno);
trim(listjourno);
trim(trandate);
WriteLog(ERR_LVL,"pbjourno[%s]",pbjourno);
WriteLog(ERR_LVL,"hostjourno[%s]",hostjourno);
WriteLog(ERR_LVL,"listjourno[%s]",listjourno);
WriteLog(ERR_LVL,"trandate[%s]",trandate);
GetPoolDataByName("Bconnex8583","PAccNum",0,0,PAccNum,&rellen);
GetPoolDataByName("Bconnex8583","ProcCode",0,0,ProcCode,&rellen);
GetPoolDataByName("Bconnex8583","tran_amt",0,0,tran_amt,&rellen);
GetPoolDataByName("Bconnex8583","tran_date_time",0,0,tran_date_time,&rellen);
GetPoolDataByName("Bconnex8583","sys_trace_num",0,0,sys_trace_num,&rellen);
GetPoolDataByName("Bconnex8583","local_time",0,0,local_time,&rellen);
GetPoolDataByName("Bconnex8583","local_tran_date",0,0,local_tran_date,&rellen);
GetPoolDataByName("Bconnex8583","expiry_date",0,0,expiry_date,&rellen);
GetPoolDataByName("Bconnex8583","settle_date",0,0,settle_date,&rellen);
GetPoolDataByName("Bconnex8583","merchant_type",0,0,merchant_type,&rellen);
GetPoolDataByName("Bconnex8583","acq_ins_cou_code",0,0,acq_ins_cou_code,&rellen);
GetPoolDataByName("Bconnex8583","ser_entry_mod",0,0,ser_entry_mod,&rellen);
GetPoolDataByName("Bconnex8583","ser_cond_code",0,0,ser_cond_code,&rellen);
GetPoolDataByName("Bconnex8583","tran_fee",0,0,tran_fee,&rellen);
GetPoolDataByName("Bconnex8583","acq_ins_id",0,0,acq_ins_id,&rellen);
GetPoolDataByName("Bconnex8583","track2_data",0,0,track2_data,&rellen);
GetPoolDataByName("Bconnex8583","retr_ref_num",0,0,retr_ref_num,&rellen);
GetPoolDataByName("Bconnex8583","card_accp_termid",0,0,card_accp_termid,&rellen);
GetPoolDataByName("Bconnex8583","card_accp_id",0,0,card_accp_id,&rellen);
GetPoolDataByName("Bconnex8583","card_accp_name_loc",0,0,card_accp_name_loc,&rellen);
GetPoolDataByName("Bconnex8583","tran_curr_code",0,0,tran_curr_code,&rellen);
GetPoolDataByName("Bconnex8583","pin_block_data",0,0,pin_block_data,&rellen);
rtrim(PAccNum);
rtrim(ProcCode);
rtrim(tran_amt);
rtrim(tran_date_time);
rtrim(sys_trace_num);
rtrim(local_time);
rtrim(local_tran_date);
rtrim(expiry_date);
rtrim(settle_date);
rtrim(merchant_type);
rtrim(acq_ins_cou_code);
rtrim(ser_entry_mod);
rtrim(ser_cond_code);
rtrim(tran_fee);
rtrim(acq_ins_id);
rtrim(track2_data);
rtrim(retr_ref_num);
rtrim(card_accp_termid);
rtrim(card_accp_id);
rtrim(card_accp_name_loc);
rtrim(tran_curr_code);
rtrim(pin_block_data);
WriteLog(ERR_LVL,"PAccNum[%s]",PAccNum);
WriteLog(ERR_LVL,"ProcCode[%s]",ProcCode);
WriteLog(ERR_LVL,"tran_amt[%s]",tran_amt);
WriteLog(ERR_LVL,"tran_date_time[%s]",tran_date_time);
WriteLog(ERR_LVL,"sys_trace_num[%s]",sys_trace_num);
WriteLog(ERR_LVL,"local_time[%s]",local_time);
WriteLog(ERR_LVL,"local_tran_date[%s]",local_tran_date);
WriteLog(ERR_LVL,"expiry_date[%s]",expiry_date);
WriteLog(ERR_LVL,"settle_date[%s]",settle_date);
WriteLog(ERR_LVL,"merchant_type[%s]",merchant_type);
WriteLog(ERR_LVL,"acq_ins_cou_code[%s]",acq_ins_cou_code);
WriteLog(ERR_LVL,"ser_entry_mod[%s]",ser_entry_mod);
WriteLog(ERR_LVL,"ser_cond_code[%s]",ser_cond_code);
WriteLog(ERR_LVL,"tran_fee[%s]",tran_fee);
WriteLog(ERR_LVL,"acq_ins_id[%s]",acq_ins_id);
WriteLog(ERR_LVL,"track2_data[%s]",track2_data);
WriteLog(ERR_LVL,"retr_ref_num[%s]",retr_ref_num);
WriteLog(ERR_LVL,"card_accp_termid[%s]",card_accp_termid);
WriteLog(ERR_LVL,"card_accp_id[%s]",card_accp_id);
WriteLog(ERR_LVL,"card_accp_name_loc[%s]",card_accp_name_loc);
WriteLog(ERR_LVL,"tran_curr_code[%s]",tran_curr_code);
WriteLog(ERR_LVL,"pin_block_data[%s]",pin_block_data);
/* 由于报文不包含小数点,需要对tran_amt进行格式化*/
sscanf(tran_amt,"%lf",&tmp_tran_amt);
tmp_tran_amt = tmp_tran_amt/100;
WriteLog(ERR_LVL,"tmp_tran_amt[%lf]",tmp_tran_amt);
/* 根据系统追踪号 和 交易日期时间 检查是否重复记账记录 */
memcpy(systracenum,sys_trace_num,6);
memcpy(trandatetime,tran_date_time,10);
WriteLog(ERR_LVL,"systracenum[%s]",systracenum);
WriteLog(ERR_LVL,"trandatetime[%s]",trandatetime);
EXEC SQL SELECT *
FROM t_ap_journal
WHERE rltseqno = :systracenum
AND hststlmdtime = :trandatetime
AND transtat = "0";
/* 存在重复记账记录,报错返回 */
if(SQLCODE!=100)
{
WriteLog(ERR_LVL,"ERROR: select data err!systracenum[%s] trandatetime[%s] [%s] %ld\n", systracenum,trandatetime,SQLMSG,SQLCODE);
Pb_ReturnClient8583("06");
return PB_ERR;
}
WriteLog(ERR_LVL, "SQLCODE is [%d]", SQLCODE);
/* HostAddHead */
ret = Data_HostAddHead("5712");
if(ret !=0)
{
WriteLog(ERR_LVL,"HostAddHead failed!");
Pb_ReturnClient8583("96");
return PB_ERR;
}
/* HostAddBody */
strncpy(card_id,track2_data+1,19);
rtrim(card_id);
WriteLog(ERR_LVL,"card_id[%s]",card_id);
/**********hsm test************/
char pin_block[6+1];
char mingwen[6+1];
unsigned char pin_data[16+1];
unsigned char sPinOut2[17];
memset(pin_block,0x00,sizeof(pin_data));
memset(mingwen,0x00,sizeof(mingwen));
memset(pin_data,0x00,sizeof(pin_data));
memset(sPinOut2,0x00,sizeof(sPinOut2));
memcpy(pin_block,"111111",6);
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
WriteLog(ERR_LVL,"pin_block[%s]",pin_block);
ret=Data_encry_new(pin_data,card_id,pin_block);
if(ret !=0)
{
WriteLog(ERR_LVL,"call Data_encry failed!");
Pb_ReturnClient8583("96");
return PB_ERR;
}
trim(pin_data);
WriteLog(ERR_LVL,"pin_data=[%s]",pin_data);
ret = Data_decry_new(pin_data,card_id,mingwen);
if(ret !=0)
{
WriteLog(ERR_LVL,"call Data_decry failed!");
Pb_ReturnClient8583("96");
return PB_ERR;
}
trim(mingwen);
WriteLog(ERR_LVL,"mingwen=[%s]",mingwen);
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
/**********hsm test************/
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
/******* 密码软加密 *************/
memcpy(pwd,mingwen,6);
ret = CrtCstmPwd(pwd,pwd_enc);
if( ret != PB_OK )
{
WriteLog( ERR_LVL ,"Err CrtCstmPwd ");
Pb_ReturnClient8583("06");
return PB_ERR;
}
WriteLog( ERR_LVL ,"pwd[%s] pwd_enc[%s]",pwd,pwd_enc);
WriteLog(ERR_LVL,"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&test&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
/* 币种转换 */
if(memcmp(currtype,"XX",2)==0)
{
WriteLog( ERR_LVL, "get currtype err!!!! currtype[%s] tran_curr_code[%s]", currtype,tran_curr_code);
Pb_ReturnClient8583("06");
return PB_ERR;
}
else
{
WriteLog( ERR_LVL, "Now currtype[%s]", currtype);
}
/* 币种检查,系统不支持跨币种记账,所以只允许本币取款 */
if(memcmp(currtype,"40",2)!=0)
{
WriteLog( ERR_LVL, "cashwithdrawal currtype err!currtype[%s]", currtype);
Pb_ReturnClient8583("06");
return PB_ERR;
}
/* 5712 body */
sprintf(tmp_str,"%s||%s|%lf|||%s|%s||| ",card_id,currtype,tmp_tran_amt,pwd_enc,track2_data);
WriteLog(ERR_LVL,"5712 condition[%s]",tmp_str);
PutPoolDataByName("FDYL","checkstr",0,0,"01111311111111111011111011100000000000000000000000000000",0);
PutPoolDataByName("FDYL","condition",0,0,tmp_str,0);
/* 5710 body */
PutPoolDataByName( "CBS", "CardFlag", 0, 0, "2" , 0 );
sprintf( filename, "%s-%s.txt", "001003", pbjourno );
sprintf( filepath, "%s/%s/%s",getenv("INST_PATH"),getenv("INST_NO_PATH"), filename );
sprintf( fullfilepath, "%s/%s",getenv("PRINTERDIR"), filepath );
PutPoolDataByName( "CBS", "Track3Data", 0, 0, filepath , 0 );
WriteLog( ERR_LVL, "filepath[%s] ", filepath );
WriteLog( ERR_LVL, "fullfilepath[%s] ", fullfilepath );
memcpy(s_cstm_info[0].acc_no,card_id,19);
s_cstm_info[0].tran_amt = tmp_tran_amt;
s_cstm_info[0].fee_amt = 0.00;
memcpy(s_cstm_info[0].curr_type,currtype,2);
WriteLog( ERR_LVL , "s_cstm_info.acc_no[%s]",s_cstm_info->acc_no);
WriteLog( ERR_LVL , "s_cstm_info.tran_amt[%lf]",s_cstm_info->tran_amt);
WriteLog( ERR_LVL , "s_cstm_info.curr_type[%s]",s_cstm_info->curr_type);
/* write acc file */
fp = fopen( fullfilepath, "w+b" );
if( NULL == fp )
{
WriteLog( ERR_LVL, "Open file error![%s]",fullfilepath );
Pb_ReturnClient8583("96");
return PB_ERR;
}
/* 组装上传记账分录格式 */
ret = GetJourEntryArray3(trandate,s_cstm_info,entry,&entry_count);
if(ret != PB_OK)
{
WriteLog(ERR_LVL,"Err GetJournalEntry");
Pb_ReturnClient8583("96");
return PB_ERR;
}
WriteLog(ERR_LVL,"entry_count[%d]",entry_count);
/* 记账分录写入文件 */
for( i = 0;i<entry_count;i++)
{
fprintf( fp, "%s\n", entry[i] );
WriteLog(ERR_LVL,"entry[%s]",entry[i]);
}
fclose(fp);
sprintf( AccNum ,"%s" , &entry_count );
PutPoolDataByName( "CBS", "AccNum", 0, 0, AccNum , 0 );
/* ftp file to host */
ret = Host_ftpData( filename );
if( ret !=0 )
{
WriteLog(ERR_LVL,"Host_ftpData[%s] err", filename );
Pb_ReturnClient8583("96");
return PB_ERR;
}
/* Pb_ReturnClient8583("00"); */
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RQ[001003] end =========");
return PB_OK;
}
/* Fuction : Data_CashWithdrawal_RP
* Action : CashWithdrawalResponse
* Input :
* Output :
* Author :
* Date : 2014/11/06
*/
int
Data_CashWithdrawal_RP()
{
int ret = -1;
int rellen = 0;
char errcode[10+1];
char errmsg[300+1];
long hoststat=-1;
char pbjourno[10+1];
char hostjourno[10+1];
char listjourno[10+1];
char trandate[10+1];
char rem[300+1];
char rem_str[32+1];
char out_recode[2+1];
char auth_num[4+1];
char resp_code[2+1];
memset(auth_num,0x00,sizeof(auth_num));
memset(resp_code,0x00,sizeof(resp_code));
memset(out_recode, 0x00, sizeof(out_recode));
memset(errcode,0x00,sizeof(errcode));
memset(errmsg,0x00,sizeof(errmsg));
memset(rem,0x00,sizeof(rem));
memset(rem_str,0x00,sizeof(rem_str));
memset(pbjourno,0x00,sizeof(pbjourno));
memset(hostjourno,0x00,sizeof(hostjourno));
memset(listjourno,0x00,sizeof(listjourno));
memset(trandate,0x00,sizeof(trandate));
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] begin =========");
/* Get the data */
GetPoolDataByName("ABSHEAD", "_host_stat", 0, 0, (char *)&hoststat, &rellen );
WriteLog( ERR_LVL, "hoststat[%ld]", hoststat );
GetPoolDataByName("PBSYS", "PbDate", 0, 0, trandate, &rellen );
WriteLog(ERR_LVL ,"trandate[%s]",trandate);
Get_pbjourno(pbjourno,hostjourno,listjourno);
if(hoststat==0)
{
ret = GetAuthNo(auth_num);
if(ret != PB_OK)
{
WriteLog(ERR_LVL ,"GetAuthNo Err");
Pb_ReturnClient8583("06");
return PB_ERR;
}
PutPoolDataByName("Bconnex8583","auth_num",0,0,auth_num,0);
PutPoolDataByName("Bconnex8583","resp_code",0,0,"00",0);
WriteLog(ERR_LVL ,"Transaction Success!pbjourno[%s] hostjourno[%s] trandate[%s]",pbjourno,hostjourno,trandate);
}
else
{
GetPoolDataByName("ABSHEAD","_error_code",0,0,rem,&rellen);
if(strlen(rem)<=32)
{
memcpy(rem_str,rem,strlen(rem));
}
else
{
memcpy(rem_str,rem,32);
}
sscanf( rem, "[%[^]]]:%[^'']", errcode,errmsg );
trim(errcode);
trim(errmsg);
if(strlen(errcode)==0)
{
sscanf( rem, "%*[^0-9]%*[0-9]%*[^0-9]%[0-9]]:%[^'']",errcode,errmsg);
trim(errcode);
trim(errmsg);
}
WriteLog(ERR_LVL ,"errcode[%s]errmsg[%s]hoststat[%ld]",errcode,errmsg,hoststat);
errcode_transform(errcode,out_recode);
trim(out_recode);
WriteLog(ERR_LVL, "out_recode[%s]", out_recode);
Pb_ReturnClient8583(out_recode);
return PB_ERR;
}
Pb_ReturnClient8583("00");
WriteLog(ERR_LVL,"========= Data_CashWithdrawal_RP[001003] end =========");
return PB_OK;
}CashWithdraw
最新推荐文章于 2025-07-22 11:55:59 发布
720

被折叠的 条评论
为什么被折叠?



