问题描述
POS机与pc通讯函数函数原型:intExchangeData(unsignedcharTransType,unsignedchar*ToTerminal,unsignedshortReqLenunsignedchar*FrmTerminal,unsignedshort*RepLen,unsignedshortTimeOut)输入参数:TransType交易类型ToTerminal交易请求数据ReqLen交易请求数据长度FrmTerminal交易应答数据RepLen交易应答数据长度TimeOut交易处理超时时间改成VB.NET:PublicStructure查询Public交易类型AsBytePublic交易结果AsBytePublic返回数据AsStringEndStructurePrivateDeclareFunctionExchangeDataLib"zhsb_api.dll"Alias"ExchangeData"(ByVal_TransTypeAsByte,ByVal_ToTerminalAsString,ByVal_ReqLenAsInteger,ByVal_FrmTerminalAs查询,ByVal_RspLenAsInteger,ByVal_TimeOutAsShort_)AsInteger查询时,交易请求包为空,传入的长度参数为0返回交易应答格式:交易类型:(1字节,查询为0x31)交易结果标志:(1字节)交易数据:(交易成功426定长字节,内容见下,交易失败时,为中文提示信息)运行程序后与POS机连接,POS机显示查询正确,但PC机显示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。请各位大侠帮忙看看,先感谢各位!附POS返回给电脑的数据包格式:交易数据包交易(查询)交易请求包1(查询)为空,传入的长度参数为0交易响格式(查询)交易类型(1字节,查询为0x31)(1字节,交易结果标志交易数据(交易成功426定长字节,内容见下,交易失败时,为中文提示信息)交易结果标志:1字节,0x00-成功,后面跟的是426个字节的交易数据其他值交易失败,后面以中文字符方式应答了失败原因,不需要处理其响应码交易数据:426字节的交易数据(为了不更改以后接口用)注:BCD码为压缩的十进制数,HEX为16进制数,为不可压缩数值。卡的识别码16字节32位压缩BCD码卡类别1字节规范版本4字节HEX码初始化机构编号12字节24位压缩BCD码发卡日期4字节8位压缩BCD码失效日期4字节8位压缩BCD码卡号9字节字符公民身份证号码18字节字符姓名30字节字符性别1字节字符民族1字节2位压缩BCD码出生地3字节6位压缩BCD码出生日期4字节8位压缩BCD码基本医疗保险个人账户建立日期4字节8位压缩BCD码定点医疗机构名称162字节字符定点医疗机构名称扩展18字节字符定点医疗机构代码19字节字符定点医疗机构名称262字节字符定点医疗机构名称扩展28字节字符定点医疗机构代码29字节字符定点医疗机构名称362字节字符定点医疗机构名称扩展38字节字符定点医疗机构代码39字节字符医疗证号15字节字符基本医疗保险个人账户10字节字符医疗人员类别1字节医疗保险用卡方式1字节基本医疗保险个人账户余额4字节高位在前的HEX码年度个人自付累计金额4字节高位在前的HEX码年度统筹基金支付累计金额4字节高位在前的HEX码发卡行ID8字节16位BCD码(转换后取左三位上传)最近审核日期4字节8位压缩BCD码分散因子8字节HEX码黑名单版本号19字节附上C语言结构typedefstruct{unsignedcharcard_id[0x10];unsignedcharcard_type[0x01];unsignedcharcriterion[0x04];unsignedcharinitorgan[0x0c];unsignedcharissuer_dt[0x04];unsignedcharexpire[0x04];unsignedcharcardno[0x09];unsignedcharpersonid[0x12];unsignedcharname[0x1e];unsignedcharsex[0x01];unsignedcharnation[0x01];unsignedcharhomeplace[0x03];unsignedcharbirthday[0x04];unsignedcharaccreatedt[0x04];unsignedcharhospitalname1[0x3e];unsignedcharhospitalnameext1[0x08];unsignedcharhospitalcode1[0x09];unsignedcharhospitalname2[0x3e];unsignedcharhospitalnameext2[0x08];unsignedcharhospitalcode2[0x09];unsignedcharhospitalname3[0x3e];unsignedcharhospitalnameext3[0x08];unsignedcharhospitalcode3[0x09];unsignedcharmedicerti[0x0f];unsignedcharmediaccount[0x0a];unsignedcharmeditype[0x01];unsignedcharusecardtype[0x01];unsignedcharbalance0[0x04];unsignedcharbalance1[0x04];unsignedcharbalance2[0x04];unsignedcharbankid[0x08];unsignedcharlatestchktime[0x04];unsignedchardiverfactor[0x08];unsignedcharblacklistver[0x13];}T_MEDICARDINFO;注:发卡行ID==0+卡号的前两位(例如05)==005分散因子采用三级分散因子交易(消费)交易请求2(消费)金额(12位数值,压缩成6字节BCD码,不足时前补0)商户名称(16字节,即最多8个中文字,不足填空格)商户操作人员姓名(8字节,即最多4个中文字,不足填空格)PC编号(12字节ASCII,不足时后补二进制0)PC交易序号(12字节ASCII,不足时后补二进制0)交易响应2(消费)交易类型(1字节,消费为0x32)0x02(1字节,交易结果标志)交易数据(交易成功34定长字节,内容见下,交易失败时,为中文提示信息)交易结果标志:1字节,0x00-成功,后面跟的是34个字节的交易数据其他值交易失败,后面以中文字符方式应答了失败原因,不需要处理其响应码交易数据:34字节,仅在交易成功时需要,包括以下数据:交易类型标志,1字节,根据医保卡规范交易金额12位数值6字节BCD码,高位前,单位为分交易日期,8位数值,4字节BCD码,CCYYMMDD交易时间,6位数值,3字节BCD码,HHMMSS终端机编号,12位数值,6字节BCD码PSAM交易号,4字节高位在前的HEX码卡片的交易签名TAC4字节的HEX码卡片的脱机交易序号2字节高位在前的HEX码卡片交易后余额4字节高位在前的HEX码注意:1BCD码为压缩的十进制数,HEX为16进制数,为不可压缩数值。2.金额使用压缩的12位BCD码参照ISO8583规范3.所有数据使用规范参照现用的医保卡标准,银行清算需要这些数据进行交易有效性检查附上C结构typedefstruct{/*交易类型标志*/unsignedchartranstype;/*交易金额*/unsignedchartransamount[6];/*交易日期时间*/unsignedchartransdatetime[7];/*终端机编号*/unsignedcharsamid[6];/*PSAM卡交易序号*/unsignedcharpsamptc[4];/*用户卡验证码*/unsignedchartranstac[4];/*用户卡交易序号*/unsignedchartransoffctc[2];/*用户卡余额*/unsignedcharnowbalance[4];}T_SENDTRANS;交易(结算)清算请求为空,传入的长度参数为0清算响应交易类型(1字节,为0x34)(1字节,交易结果标志交易数据(交易成功12定长字节,内容见下,交易失败时,为中文提示信息)交易结果标志:1字节,0x00-成功,后面跟的是12个字节的交易数据其他值交易失败,后面以中文字符方式应答了失败原因,不需要处理其响应码交易数据:12字节的交易数据注:BCD码为压缩的十进制数终端交易总金额12位数值6字节BCD码,高位前,单位为分终端交易总笔数12位数值6字节BCD码,高位前
解决方案
解决方案二:
呃你得指定字符集
解决方案三:
如何指定,能讲讲骂?谢谢!