POS机的接口

2024-09-01 04:04
文章标签 接口 pos

本文主要是介绍POS机的接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

联迪的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;}}
}

这篇关于POS机的接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125883

相关文章

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

股票数据接口-陈科肇

陈科肇 新浪财经 sz-深圳sh-上海历史分价表:http://market.finance.sina.com.cn/pricehis.php?symbol=sz000506&startdate=2016-12-27&enddate=2016-12-27历史成交明细(当日成交明细):http://vip.stock.finance.sina.com.cn/quotes_service/v

实例demo理解面向接口思想

浅显的理解面向接口编程 Android开发的语言是java,至少目前是,所以理解面向接口的思想是有必要的。下面通过一个简单的例子来理解。具体的概括我也不知道怎么说。 例子: 现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。已知要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能同这三种设备进行数据交换,并且以后可能会有新的第三方的

对接话费充值API接口的开发步骤以及各种优势

对接话费充值API接口通常涉及以下步骤: 1.选择API提供商: 研究并选择一个可靠的话费充值API提供商。考虑因素包括覆盖范围、费率、交易限额、客户支持和用户评价。 2.注册和获取API密钥: 在选定的API提供商平台上注册账户,并获取API密钥或访问令牌,这是调用API时进行身份验证的必要信息。 3.阅读API文档: 仔细阅读API文档,了解如何构建请求、需要哪些参数、API的

java类中定义接口的有哪些好处

第一步:首先是是定义一个类,同时里面定义接口 public class Util { public interface Worker { void work(int a); } } 第二步:定义一个类去实现第一步类中定义的接口 public class Demo implements Worker { @Override public void work(int a) { System

[苍穹外卖]-04菜品管理接口开发

效果预览 新增菜品 需求分析 查看产品原型分析需求, 包括用到哪些接口, 业务的限制规则 业务规则 菜品名称必须是唯一的菜品必须属于某个分类下, 不能单独存在新增菜品时可以根据情况选择菜品的口味每个菜品必须对应一张图片 接口设计 根据类型查询分类接口 文件上传接口 新增菜品接口 数据表设计 设计dish菜品表 和 dish_fl

接口自动化三大经典难题

目录 一、接口项目不生成token怎么解决关联问题 1. Session机制 2. 基于IP或设备ID的绑定 3. 使用OAuth或第三方认证 4. 利用隐式传递的参数 5. 基于时间戳的签名验证 二、接口测试中网络问题导致无法通过怎么办 1. 重试机制 2. 设置超时时间 3. 使用模拟数据 4. 网络问题的预检测 5. 日志记录与错误分析 6. 切换网络环境 7.