using POSV.Proxy.Common;
using POSV.Proxy.Tool;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace POSV.Proxy.MIS
{
public class SoftPosPay
{
InIHelper _ini = null;
[DllImport("softpos.dll")]
private static extern int CreditTrans(byte[] strin, byte[] strout);
public SoftPosPay()
{
_ini = new InIHelper(System.AppDomain.CurrentDomain.BaseDirectory + "\\trans.ini");
}
///
/// 修改连接地址、端口
///
///
public ReturnInfo SetTransIniIp(string _ip, string _port)
{
ReturnInfo returnInfo = new ReturnInfo();
try
{
//服务器地址
_ini.WriteContentValue("PARAMETER ASSIGN", "IP_ADDRESS", _ip);
//服务器端口
_ini.WriteContentValue("PARAMETER ASSIGN", "IP_PORT", _port);
//通讯方式 NO_NET 为脱机测试模式 TCPIP 为网络模式
_ini.WriteContentValue("PARAMETER ASSIGN", "NET_MODE", "NO_NET");
returnInfo.Code = ReturnState.Succeed;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
public ReturnInfo GetransIniIp()
{
ReturnInfo returnInfo = new ReturnInfo();
try
{
string[] ip_port = new string[2];
//服务器地址
ip_port[0] = _ini.ReadContentValue("PARAMETER ASSIGN", "IP_ADDRESS");
//服务器端口
ip_port[1] = _ini.ReadContentValue("PARAMETER ASSIGN", "IP_PORT");
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = ip_port;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
///
/// 发起支付
///
public ReturnInfo InitiateConsumption(RequestData _request)
{
ReturnInfo returnInfo = new ReturnInfo();
try
{
var _strin = Encoding.ASCII.GetBytes(_request.ToRequestString());
var _strout = new byte[1024];
CreditTrans(_strin, _strout);
ReturnData _data = new ReturnData();
_data.Data = Encoding.ASCII.GetString(_strout);
_data.InitializeData();
if (_data.Code.Equals("00"))
{
returnInfo.Code = ReturnState.Succeed;
}
else
{
returnInfo.Code = ReturnState.Failed;
}
returnInfo.Data = _data;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
}
///
/// 请求支付参数
///
public class RequestData
{
private string _PosNo = "";
private string _OperatorNo = "";
private string _ContentType = "";
private string _PayAmount = "";
private string _payType = "";
private string _Outtrading = "";
///
/// POS号
///
public string PosNo
{
get => _PosNo;
set => _PosNo = value;
}
///
/// 操作员
///
public string OperatorNo
{
get => _OperatorNo;
set => _OperatorNo = value;
}
///
/// 交易类型标志 ‘
/// 为 C,表示是正数( 消费交易);
/// 为 I,表示是正数( 查询余额交易);
/// 为 D,表示是负数( 取消交易);
/// 为 R,表示是负数( 退货交易);
/// 为 0[零],表示( 结帐、交易一览和重打票据),
/// 将出现菜单界面选择类型,如 I 接口不做,也可在此实现。
///
public string ContentType
{
get => _ContentType;
set => _ContentType = value;
}
///
/// 总金额
///
public string PayAmount
{
get => _PayAmount;
set => _PayAmount = value;
}
///
/// 支付方式
/// 001 选择用卡 (记账类型:银行卡)
/// 002 选择银联二维码扫码(记账类型:银行卡)
/// 003 选择支付宝扫码(记账类型:支付宝)
/// 004 选择微信扫码(记账类型:微信)
///
public string PayType
{
get => _payType;
set => _payType = value;
}
///
/// 原交易要素
///
public string Outtrading
{
get => _Outtrading;
set => _Outtrading = value;
}
///
/// 请求逻辑,有疑问请查阅文档
///
///
public string ToRequestString()
{
string _str = "";
_str += _PosNo.PadRight(10, ' ');
_str += _OperatorNo.PadRight(10, ' ');
_str += _ContentType;
_str += _PayAmount.PadLeft(12, '0');
_str += _payType;
_str += _Outtrading.PadRight(96,' ');
return _str;
}
}
///
/// 返回数据
///
public class ReturnData
{
private string _Data;
private string _Code = "";
private string _CardNo = "";
private string _ContentType = "";
private string _PayAmount = "";
private string _SerialCode = "";
private string _BankbkNo = "";
private string _ReferenceNo = "";
private string _AuthorizationCode = "";
private string _BatchNo = "";
private string _TerminalNo = "";
private string _TenantNo = "";
private string _PayDate = "";
private string _PayTime = "";
private string _PayCatdNo = "";
private string _TradeNo = "";
private string _ActualPayAmount = "";
private string _Discounts = "";
private string _Outtrading = "";
///
/// 响应码
///
public string Code { get => _Code; }
///
/// 卡号
///
public string CardNo { get => _CardNo; }
///
/// 交易类型标志
///
public string ContentType { get => _ContentType; }
///
/// 总金额
///
public string PayAmount { get => _PayAmount; }
///
/// 交易流水号
///
public string SerialCode { get => _SerialCode; }
///
/// 发卡行号
///
public string BankbkNo { get => _BankbkNo; }
///
/// 参考号
///
public string ReferenceNo { get => _ReferenceNo; }
///
/// 授权码
///
public string AuthorizationCode { get => _AuthorizationCode; }
///
/// 批次号
///
public string BatchNo { get => _BatchNo; }
///
/// 终端号
///
public string TerminalNo { get => _TerminalNo; }
///
/// 商户号
///
public string TenantNo { get => _TenantNo; }
///
/// 交易日期
///
public string PayDate { get => _PayDate; }
///
/// 交易时间
///
public string PayTime { get => _PayTime; }
///
/// 借贷记卡标识
///
public string PayCatdNo { get => _PayCatdNo; }
///
/// 渠道订单号
///
public string TradeNo { get => _TradeNo; }
///
/// 实际支付金额
///
public string ActualPayAmount { get => _ActualPayAmount; }
///
/// 优惠金额
///
public string Discounts { get => _Discounts; }
///
/// 交易要素
///
public string Outtrading { get => _Outtrading; }
public string Data
{
get
{
return this._Data;
}
set
{
this._Data = value;
}
}
///
/// 根据文档解析数据
///
public void InitializeData()
{
var _len = 0;
this._Code = this._Data.Substring(_len , 2).Trim();
_len = _len + 2;
this._CardNo = this.Data.Substring(_len, 19).Trim();
_len = _len + 19;
this._ContentType = this.Data.Substring(_len, 1).Trim();
_len = _len + 1;
this._PayAmount = this.Data.Substring(_len, 12).Trim();
_len = _len + 12;
this._SerialCode = this.Data.Substring(_len, 6).Trim();
_len = _len + 6;
this._BankbkNo = this.Data.Substring(_len, 3).Trim();
_len = _len + 3;
this._ReferenceNo = this.Data.Substring(_len, 12).Trim();
_len = _len + 12;
this._AuthorizationCode = this.Data.Substring(_len, 6).Trim();
_len = _len + 6;
this._BatchNo = this.Data.Substring(_len, 6).Trim();
_len = _len + 6;
this._TerminalNo = this.Data.Substring(_len, 8).Trim();
_len = _len + 8;
this._TenantNo = this.Data.Substring(_len, 15).Trim();
_len = _len + 15;
this._PayDate = this.Data.Substring(_len, 4).Trim();
_len = _len + 4;
this._PayTime = this.Data.Substring(_len, 6).Trim();
_len = _len + 6;
this._PayCatdNo = this.Data.Substring(_len, 3).Trim();
_len = _len + 3;
this._TradeNo = this.Data.Substring(_len, 64).Trim();
_len = _len + 64;
this._ActualPayAmount = this.Data.Substring(_len, 12).Trim();
_len = _len + 12;
this._Discounts = this.Data.Substring(_len, 12).Trim();
_len = _len + 12;
this._Outtrading = this.Data.Substring(_len, 96).Trim();
}
}
}