POS机的接口

news2024/9/25 11:10:02

联迪的POS机

读取付款方式

        private void Form_MisPos_Load(object sender, EventArgs e)
        {
            List<Trans> list = MisPos.GetTransList();
            int col = 0;
            int y = 15;
            int colcount = 3;
            Panel p = panel3;
            int pw = p.Width;
            foreach (Trans t in list)
            {
                Button btn = new System.Windows.Forms.Button();
                int x = col * (pw / 3) + 10;
                btn.Location = new System.Drawing.Point(x, y);
                btn.Name = "btn_" + t.Code;
                btn.Size = new System.Drawing.Size(pw / 3 - 20, 28);

                btn.Text = t.Text;
                btn.UseVisualStyleBackColor = true;
                btn.Click += new System.EventHandler(this.btn_Click);
                p.Controls.Add(btn);
                col++;
                if (col >= colcount)
                {
                    col = 0;
                    y = y + 32;
                }
            }
        }

交易

        private void do_BankTrans(string trans)
        {
            InputData indata = new InputData();
            indata.posid = "111";//[8];    /*  收银机号(8字节,左对齐,不足部分补空格)*/ 
            indata.trans = trans;//[2];    /*  交易类型: '00'消费'01'撤销'02'退货'03'查余 
            indata.amount = InputData.Float2Amount(999.99F);//[12];  /*  金额(12字节,无小数点,左补0,单位:分)*/ 
            indata.old_date = InputData.Date2Str(DateTime.Now);//[8];  /*  原交易日期(8 字节,yyyymmdd 格式,隔日退货时用)*/ 
            indata.old_reference = "";//[12]; /*  原交易参考号*/ 
            indata.old_trace = "";//[6];  /*  流水号(6 字节,右对齐,左补 0,退货或重打印等用)*/ 
            indata.old_batch = "";//[6];  /*57~62 位  原批次号*/ 
            indata.old_auth = "";//[6];  /*63~68 位  原授权码*/ 
            indata.old_terno = "";//[8];  /*69~76 位  原交易终端号*/ 
            indata.szFenqiNum = "";//[2]; /*77~78 位  分期数03,06,09,12,18,24,36,42,48,60*/ 
            indata.szServiceNum = "";//[2];/*79~80 位   享受服务人数*/ 
            indata.szGoodsNo = "";//[12];  /*81~92 位  商品项目编码*/ 
            indata.trk2 = "";//[37];    /*  二磁道数据(37字节,左对齐,不足部分补空格)*/ 
            indata.trk3 = "";//[104];    /*   三磁道数据(104字节,  左对齐,不足部分补空格)*/ 
            indata.lrc = InputData.getlrc_Random();//[3];    /*   交易校验数据(3位从 0~9的随机字符)*/ 
            indata.szOrderTrace = "";//[20];  // 6/16/2015 新增 收银流水(订单)号 左对齐 不足补空格 
            indata.szPrefer = "";//[50];    //  优惠券左对齐 不足补空格 
            indata.szRsv = "";//[300];    // 保留字段 在此输入二维码的条码数据 左对齐  不足补空格
            OutPutData outdata = null;
            int i = MisPos.do_BankTrans(indata, out outdata);
            MessageBox.Show(outdata.resp_chin);
        }

类代码 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace POSTEST
{
    public class Trans
    {
        public string Code = "";
        public string Text = "";
    }
    public class InputData
    {
        public string posid = "";//[8];    /*  收银机号(8字节,左对齐,不足部分补空格)*/ 
        public string operid = "";//[8];    /*  操作员号(8字节,左对齐,不足部分补空格)*/ 
        public string trans = "";//[2];    /*  交易类型: '00'消费'01'撤销'02'退货'03'查余 
        public string amount = "";//[12];  /*  金额(12字节,无小数点,左补0,单位:分)*/ 
        public string old_date = "";//[8];  /*  原交易日期(8 字节,yyyymmdd 格式,隔日退货时用)*/ 
        public string old_reference = "";//[12]; /*  原交易参考号*/ 
        public string old_trace = "";//[6];  /*  流水号(6 字节,右对齐,左补 0,退货或重打印等用)*/ 
        public string old_batch = "";//[6];  /*57~62 位  原批次号*/ 
        public string old_auth = "";//[6];  /*63~68 位  原授权码*/ 
        public string old_terno = "";//[8];  /*69~76 位  原交易终端号*/ 
        public string szFenqiNum = "";//[2]; /*77~78 位  分期数03,06,09,12,18,24,36,42,48,60*/ 
        public string szServiceNum = "";//[2];/*79~80 位   享受服务人数*/ 
        public string szGoodsNo = "";//[12];  /*81~92 位  商品项目编码*/ 
        public string trk2 = "";//[37];    /*  二磁道数据(37字节,左对齐,不足部分补空格)*/ 
        public string trk3 = "";//[104];    /*   三磁道数据(104字节,  左对齐,不足部分补空格)*/ 
        public string lrc = "";//[3];    /*   交易校验数据(3位从 0~9的随机字符)*/ 
        public string szOrderTrace = "";//[20];  // 6/16/2015 新增 收银流水(订单)号 左对齐 不足补空格 
        public string szPrefer = "";//[50];    //  优惠券左对齐 不足补空格 
        public string szRsv = "";//[300];    // 保留字段 在此输入二维码的条码数据 左对齐  不足补空格
        public byte[] getdata()
        {
            List<byte> list = new List<byte>();
            addbyte(list, posid, 8, ' ');
            addbyte(list, operid, 8, ' ');
            addbyte(list, trans, 2, ' ');
            addbyte(list, amount, 12, ' ');
            addbyte(list, old_date, 8, ' ');
            addbyte(list, old_reference, 12, ' ');
            addbyte(list, old_trace, 6, ' ');
            addbyte(list, old_batch, 6, ' ');
            addbyte(list, old_auth, 6, ' ');
            addbyte(list, old_terno, 8, ' ');
            addbyte(list, szFenqiNum, 2, ' ');
            addbyte(list, szServiceNum, 2, ' ');
            addbyte(list, szGoodsNo, 12, ' ');
            addbyte(list, trk2, 37, ' ');
            addbyte(list, trk3, 104, ' ');
            addbyte(list, lrc, 3, ' ');
            addbyte(list, szOrderTrace, 20, ' ');
            addbyte(list, szPrefer, 50, ' ');
            addbyte(list, szRsv, 300, ' ');
            return list.ToArray();
        }
        public void addbyte(List<byte> list,string v,int len  ,char c )
        {
            string s = v.PadRight(len, c);
            Encoding encoding = Encoding.GetEncoding("gb2312");
            byte[] bs =encoding.GetBytes(s);
            for (int i = 0; i < len; i++)
            {
                list.Add(bs[i]);
            }
        }
        public static string getlrc_Random()
        {
            Random r = new Random(DateTime.Now.Millisecond);
            return r.Next(10).ToString() + r.Next(10).ToString() + r.Next(10).ToString();
        }
        public static string Float2Amount(float v)
        {
            int intv = (int)(v * 100 + 0.001);
            string s = intv.ToString();
            s = s.PadLeft(12, '0');
            return s;
        }
        public static string Date2Str(DateTime dt)
        {
            string s = dt.ToString("yyyyMMdd");
            return s;
        }
    }
    public class OutPutData
    {
        public string resp_code = "";//[2];  /*1~2 位  返回码  (2 字节,"00"交易成功,其他失败)*/ 
        public string bank_code = "";//[4]; /*3~6 位  银行行号(4 字节)*/ 
        public string card_no = "";//[30];  /*7~36 位  卡号:622280*********4860 */ 
        public string expr = "";//[4];    /*37~40位  有效期  (4 字节) */ 
        public string amount = "";//[12];  /*141~52位  金额(12字节,无小数点,左补 0,单位:分)*/ 
        public string trace = "";//[6];    /*53~58位   流水号   (6字节,左对齐)*/ 
        public string refer = "";//[12];   /*59~70位  交易参考号*/   
        public string auth = "";//[6];    /*71~76位   授权号*/ 
        public string batch = "";//[6];    /*77~82位   批次号*/ 
        public string date = "";//[8+6];    /*83~96位  交易日期(8字节,yyyymmddhhmmss格式)*/ 
        public string userno = "";//[15];  /*97~111位  商户号*/ 
        public string terno = "";//[8];    /*112~119位 终端号*/ 
        public string old_terno = "";//[8];  /*120~127位  原终端号*/ 
        public string resp_chin = "";//[50]; /*   错误说明(左对齐,不足部分补空格)*/ 
        public string OrderNo = "";//[50];  /*   二维码交易订单订单号  */ 
        public string trans = "";//[2];    /*  交易类型 与请求结构中交易类型的说明一样*/ 
        public string ChannelType = "";//[2];    /* 00  银行卡01微信  02支付宝  03 银联二维码  */ 
        public string lrc = "";//[3];    /*   交易数据校验码(3 字节)*/    
        public void readdata(byte[] data)
        {
            int i = 0;
            resp_code = readstr(data, ref i, 2);
            bank_code = readstr(data, ref i, 4);
            card_no = readstr(data, ref i, 30);
            expr = readstr(data, ref i, 4);
            amount = readstr(data, ref i, 12);
            trace = readstr(data, ref i, 6);
            refer = readstr(data, ref i, 12);
            auth = readstr(data, ref i, 6);
            batch = readstr(data, ref i, 6);
            date = readstr(data, ref i, 8 + 6);
            userno = readstr(data, ref i, 15);
            terno = readstr(data, ref i, 8);
            old_terno = readstr(data, ref i, 8);
            resp_chin = readstr(data, ref i, 50);
            OrderNo = readstr(data, ref i, 50);
            trans = readstr(data, ref i, 2);
            ChannelType = readstr(data, ref i, 2);
            lrc = readstr(data, ref i, 3); 

        }
        public string readstr(byte[] data,ref int pos,int len)
        {
            Encoding encoding = Encoding.GetEncoding("gb2312");
            string s = encoding.GetString(data, pos, len);
            pos = pos + len;
            return s;
        }
     }
    public class MisPos
    {
        [DllImport("MisPos.dll", EntryPoint = "BankTrans", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern int BankTrans(ref byte indata, ref byte outdata);
        public static int do_BankTrans(InputData indata, out OutPutData outdata)
        {
            int result = 0;
            byte[] inbs = new byte[2048];
            for (var i = 0; i < inbs.Length; i++)
                inbs[i] = 0;
            byte[] outbs = new byte[2048];
            for (var i = 0; i < outbs.Length; i++)
                outbs[i] = 0;
            byte[] bs = indata.getdata();
            for (var i = 0; i < bs.Length; i++)
                inbs[i] = bs[i];
            result = BankTrans(ref inbs[0], ref  outbs[0]);
            outdata = new OutPutData();
            outdata.readdata(outbs);
            return result;
        }
        public static List<Trans> GetTransList()
        {
            List<Trans> result = new List<Trans>();
            result.Add(new Trans() { Code = "00", Text = "消费" });
            result.Add(new Trans() { Code = "01", Text = "撤销" });
            result.Add(new Trans() { Code = "02", Text = "退货" });
            result.Add(new Trans() { Code = "03", Text = "查余" });
            result.Add(new Trans() { Code = "04", Text = "重打印" });
            result.Add(new Trans() { Code = "05", Text = "签到" });
            result.Add(new Trans() { Code = "06", Text = "结算" });
            result.Add(new Trans() { Code = "08", Text = "小费" });
            result.Add(new Trans() { Code = "09", Text = "预授权" });
            result.Add(new Trans() { Code = "10", Text = "预授权追加" });
            result.Add(new Trans() { Code = "11", Text = "预授权完成" });
            result.Add(new Trans() { Code = "12", Text = "预授权撤销" });
            result.Add(new Trans() { Code = "13", Text = "预授权完成撤销" });
            result.Add(new Trans() { Code = "14", Text = "商场分期" });
            result.Add(new Trans() { Code = "15", Text = "专用分期" });
            result.Add(new Trans() { Code = "16", Text = "分期撤销" });
            result.Add(new Trans() { Code = "18", Text = "分期额度查询" });
            result.Add(new Trans() { Code = "19", Text = "汽车卡洗车" });
            result.Add(new Trans() { Code = "20", Text = "快速支付" });
            result.Add(new Trans() { Code = "21", Text = "指定账户圈存" });
            result.Add(new Trans() { Code = "22", Text = "电子现金退货" });
            result.Add(new Trans() { Code = "23", Text = "电子现金查余" });
            result.Add(new Trans() { Code = "24", Text = "积分兑换消费" });
            result.Add(new Trans() { Code = "25", Text = "积分兑换撤销" });
            result.Add(new Trans() { Code = "26", Text = "积分查询" });
            result.Add(new Trans() { Code = "28", Text = "权益积分查询" });
            result.Add(new Trans() { Code = "29", Text = "权益积分消费" });
            result.Add(new Trans() { Code = "30", Text = "权益积分撤销" });
            result.Add(new Trans() { Code = "32", Text = "卡转出转账" });
            result.Add(new Trans() { Code = "33", Text = "财务报销" });
            result.Add(new Trans() { Code = "34", Text = "财务还款" });
            result.Add(new Trans() { Code = "60", Text = "聚合支付被扫 " });
            result.Add(new Trans() { Code = "61", Text = "聚合支付主扫" });
            result.Add(new Trans() { Code = "62", Text = "聚合支付退货 " });
            result.Add(new Trans() { Code = "72", Text = "聚合支付异常订单查询" });
            result.Add(new Trans() { Code = "90", Text = "惠兜圈优惠立减银行卡" });
            result.Add(new Trans() { Code = "91", Text = "惠兜圈优惠立减微信/支付宝被扫" });
            result.Add(new Trans() { Code = "92", Text = "惠兜圈优惠立减支付宝主扫" });
            result.Add(new Trans() { Code = "93", Text = "惠兜圈优惠立减微信主扫" });
            result.Add(new Trans() { Code = "94", Text = "惠兜圈立减优惠银联二维码" });
            result.Add(new Trans() { Code = "95", Text = "云闪付优惠立减交易" });
            result.Add(new Trans() { Code = "96", Text = "商场分期优惠立减" });
            return result;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vben:对话框组件

本文将介绍如何在vben admin vue 框架中&#xff0c;创建对话框组件&#xff0c;并成功应用的代码。代码即插即用。 结果如下图所示&#xff0c; 一、创建对话框组件 创建 myModal/index.vue <template><div><BasicModalregister"registerModal"v-…

探索《黑神话:悟空》背后的编程技术

《黑神话&#xff1a;悟空》作为一款备受期待的动作角色扮演游戏&#xff0c;以其卓越的视觉效果和流畅的游戏体验吸引了全球玩家的关注。这款游戏不仅在艺术设计和技术实现上展现了极高的水准&#xff0c;其背后的编程技术更是保证了游戏顺利运行和出色表现的关键因素。在这篇…

马铃薯叶片病害识别系统+Python+图像识别+人工智能+深度学习+卷积神经算法+计算机课设项目

一、介绍 马铃薯叶片病害识别系统。本项目使用Python作为主要开发语言&#xff0c;基于TensorFlow等深度学习框架搭建ResNet50卷积神经算法网络模型&#xff0c;通过对收集到的3种常见的马铃薯叶片病害数据集&#xff08;‘早疫病’, ‘健康’, ‘晚疫病’&#xff09;进行训练…

计算机毕业设计 基于SpringBoot框架的网上蛋糕销售系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

‌IP地址为什么是8位数:‌深入解析IPv4地址的设计原理与应用

当我们谈论IP地址时&#xff0c;‌通常指的是IPv4地址&#xff0c;‌它由四段8位二进制数构成&#xff0c;‌每段通常转换为十进制数表示&#xff0c;‌范围从0到255。‌这种8位数的设计并非随意&#xff0c;‌而是基于一系列精心的考虑和权衡。‌本文将深入探讨IP地址为什么是…

心觉:颠覆学习,开启无限可能

很多人一天到晚地在学习 买课程&#xff0c;看书&#xff0c;看视频&#xff0c;看直播 网上查资料学习 总之不是在学习&#xff0c;就是在学习的路上 沉浸在学习中无法自拔 乐在其中&#xff0c;但是真正的收获呢&#xff0c;没有&#xff0c;或者说非常少 首先我们来讲…

ORACLE 统计信息的备份与恢复

备份 --需要先创建统计信息基础表 exec dbms_stats.create_stat_table(USER1,STAT_TIMESTAMP); --导出某个用户的所有统计信息 exec dbms_stats.export_schema_stats(USER1,STAT_TIMESTAMP);--测试(插入100条&#xff0c;更新统计信息&#xff0c;略) select num_rows,last_ana…

Python和C++(CUDA)及Arduino雅可比矩阵导图

&#x1f3af;要点 对比三种方式计算读取二维和三维三角形四边形和六面体网格运动学奇异点处理医学图像成像组学分析特征敏感度增强机械臂路径规划和手臂空间操作变换苹果手机物理稳定性中间轴定理 Python雅可比矩阵 多变量向量值函数的雅可比矩阵推广了多变量标量值函数的…

Renesa Version Board开发RT-Thread 之Client(WIFI)和上位机的数据传输

目录 概述 1 系统框架 1.1 模块介绍 1.1 Version-Board 开发板 1.1.1 Vision-Board简介 1.1.2 Vision-Board的资源 1.2 框架介绍 2 上位机App 2.1 UI设计 2.2 代码实现 3 功能测试 3.1 网络连接 3.2 功能测试 概述 本文主要Renesa Version Board开发RT-Thread 之…

MIX滤镜大师 v4.9.6.5 — 内置超过130款滤镜

MIX滤镜大师内置了超过 130 款高品质滤镜&#xff0c;涵盖多种照片风格&#xff0c;包括胶片时代的专业彩色反转片滤镜、自动识别人脸并磨皮增白的自拍滤镜、讲究线条和影调的单色滤镜以及追求夸张色彩的 LOMO 滤镜。此版本已解锁全部功能&#xff0c;去除广告&#xff0c;提供…

量化交易backtrader实践(四)_评价统计篇(4)_多个回测的评价列表

本节目标 在第1节里&#xff0c;我们认识了backtrader内置评价指标&#xff0c;了解了每个指标的大概内容&#xff1b;在第2节里把内置评价指标中比较常用的指标进行了获取和输出&#xff1b;第3节里我们探索其他backtrader中没有的评价指标&#xff0c;并对pyfolio, empyrica…

图形化编程系统学习10

项目需求&#xff1a; 点击绿旗&#xff0c;可以使用键盘控制小兔子在地图上移动&#xff0c;收集食物&#xff0c;但只能在黄色道路上移动。 食物碰到小兔子会变大后隐藏&#xff0c;并发出声音。 收集完所有食物&#xff0c;回到温暖的小窝 。 思路解析 1、添加背景和角色…

【书生大模型实战营】进阶岛 第1关 探索 InternLM 模型能力边界

文章目录 【书生大模型实战营】进阶岛 第1关 探索 InternLM 模型能力边界学习任务Bad Case 1&#xff1a;Bad Case 2&#xff1a;Bad Case 3&#xff1a;Bad Case 4&#xff1a;Bad Case 5&#xff1a;Good Case 1&#xff1a;Good Case 2&#xff1a;Good Case 3&#xff1a;G…

requests:一个强大的HTTP请求Python库

我是东哥&#xff0c;一个热衷于用Python简化日常工作的技术爱好者。今天&#xff0c;我要和大家分享一个网络请求的Python利器——requests库。你是否曾经在编写代码时&#xff0c;需要从网络上获取数据&#xff0c;却对复杂的HTTP协议感到头疼&#xff1f;requests库将帮你轻…

LMDeploy 量化部署进阶实践

1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 打开InternStudio平台&#xff0c;进入如下界面并按箭头指示顺序点击创建开发机。 点选开发机&#xff0c;自拟一个开发机名称&#xff0c;选择Cuda12.2-conda镜像。 我们要运行参数量为7B的InternLM2.5&#xff0c;…

AI 内容创作:思考与实践

文章目录 LLM 与 RAGLLMRAGRAG 定制策略AI 写作助手演示 内容层次结构与内容深度优化有效的主题与段落结构内容深度的多样性与独特性提高文本逻辑性与连贯性模拟实践 内容评测与优化迭代机制内容评测自动迭代优化机制评估指标模拟实践 个性化写作与 AI 协同写作用户画像与需求分…

【C++ 第十八章】C++11 新增语法(3)

前情回顾&#xff1a; 【C11 新增语法&#xff08;1&#xff09;&#xff1a;1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 【C11 新增语法&#xff08;2&#xff09;&#xff1a;7~8 点】 右值引用和…

香橙派入手第一天

一、开箱 拿到快递回来以后&#xff0c;兴冲冲的把快递拆开&#xff0c;里面一共有一下几样东西&#xff0c;一个板卡&#xff0c;一个充电器&#xff0c;一个小风扇&#xff0c;还有一些安装用的零件和一把小螺丝刀。 值得一提的是这个充电器是最高支持65w的typec-typec的充电…

回溯法-0/1背包问题

什么是回溯法&#xff1f; 回溯法是一种搜索算法&#xff0c;它通过深度优先搜索的方式来解决决策问题。它从根节点开始&#xff0c;逐步扩展节点&#xff0c;直到找到所有可能的解。 回溯法的基本思想 开始节点&#xff1a;从根节点出发&#xff0c;这个节点是解空间的起点…