using POSV.Cef.FastTemplate.PayMent.Base; using POSV.Entity; using POSV.ShoppingCart; using POSV.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using static POSV.Cef.FastTemplate.PayMent.Base.PayBase; namespace POSV.Cef.FastTemplate.PayMent { public class PayOperation { //================= construct function ================== #region construct function /// /// 参数在对象内会copy /// public PayOperation(OrderObject orderObject, string _code) { var _data = ObjectUtils.Copy(orderObject); var code = ObjectUtils.Copy(_code); this.m_PayCode = code; this.m_OrderObject = _data; } #endregion //================== private fields ===================== #region fields /// /// 支付对象 /// public OrderObject m_OrderObject; /// /// 支付条码 /// public string m_PayCode = ""; /// /// 支付参数 /// public PayMode m_CurrentPayMode = null; /// /// 异步通知 /// public PayResultAsyncCallBack AsyncPayResult; /// /// 支付对象 /// private PayBase m_pay = null; private string meseeage = ""; public string m_Message { get { return (this.m_pay?.m_Message == null ? meseeage : this.m_pay?.m_Message); } set { meseeage = value; } } #endregion //================== public function ======================= /// /// 同步 /// /// public PayItem PayStart() { if (this.VerifyParameter()) { //获取支付参数 this.GetPayMode(); //初始化支付对象 this.Initialize(); if (this.m_pay == null) { return null; } else { this.m_pay.SaveSaomaTicket(string.Format("{0}_{1}", this.m_OrderObject.StoreNo, this.m_OrderObject.TradeNo), this.m_PayCode); return this.m_pay.PayStart(); } } else { return null; } } /// /// 异步回掉 /// public void AsyncPayStart() { if (this.AsyncPayResult != null) { try { //获取支付参数 this.GetPayMode(); //初始化支付对象 this.Initialize(); } catch (Exception) { this.m_pay.m_Message = this.m_Message; } this.m_pay.SaveSaomaTicket(string.Format("{0}_{1}", this.m_OrderObject.StoreNo, this.m_OrderObject.TradeNo), this.m_PayCode); this.m_pay.AsyncPayResult = this.AsyncPayResult; this.m_pay.AsyncPayStart(); } else { //强行提示调用者 throw new Exception("注意,AsyncPayResult参数没有赋值"); } } /// /// 外部验证|验证调用参数 /// public bool VerifyParameter() { if (this.m_OrderObject == null) { this.m_Message = "订单对象为空,请确认参数"; return false; } if (string.IsNullOrEmpty(this.m_PayCode)) { this.m_Message = "请扫描或输入支付码..."; return false; } if (!string.IsNullOrEmpty(this.m_PayCode) && this.m_PayCode.Length >= 16) { string prefix = this.m_PayCode.Substring(0, 2); switch (prefix) { case "10": case "11": case "12": case "13": case "14": case "15": break; case "25": case "26": case "27": case "28": case "29": case "30": break; case "70": case "71": case "72": case "73": case "74": case "75": break; default: this.m_Message = "支付码不合法"; return false; } } else { this.m_Message = "支付码不合法..."; return false; } return true; } //================== private function ======================= private void Initialize() { if (this.m_CurrentPayMode == null) { this.m_Message = "尚未配置支付参数..."; return; } var parameter = this.m_CurrentPayMode.Body; //会员不需要配置 if ((parameter == null || parameter.Count == 0) && !this.m_CurrentPayMode.No.Equals("02")) { this.m_Message = "尚未配置支付参数..."; return; } //获取支付渠道 string channel = ""; if (this.m_CurrentPayMode.No.Equals("02")) { channel = "Member"; } else { channel = (parameter.ContainsKey("channel") ? parameter["channel"].ToString() : "").ToLower(); } switch (channel) { //case "alipay": //case "wxpay": //case "subalipay": //case "subwxpay": // { // //this._payChannel = PayChannelEnum.原生支付; // } // break; case "leshua": { //乐刷支付 //this.m_pay = new LESHUA_Pay(); } break; case "saobei": { //this._payChannel = PayChannelEnum.扫呗支付; this.m_pay = new SAOBEI_Pay(); } break; case "Member": this.m_pay = new Member_Pay(); break; default: channel = "";//zhangy 2020-03-21 Add 暂不支持的支付通道 break; } //zhangy 2020 - 03 - 21 Add 暂不支持的支付通道 if (string.IsNullOrEmpty(channel)) { this.m_Message = "暂不支持的支付通道..."; return; } this.m_pay.m_CurrentPayMode = this.m_CurrentPayMode; this.m_pay.m_OrderObject = this.m_OrderObject; this.m_pay.m_PayCode = this.m_PayCode; } /// /// 获取支付方式 /// private void GetPayMode() { string prefix = this.m_PayCode.Substring(0, 2); switch (prefix) { case "10": case "11": case "12": case "13": case "14": case "15": { //微信 this.m_CurrentPayMode = OrderUtils.GetPayMode("05"); } break; case "25": case "26": case "27": case "28": case "29": case "30": { //支付宝 this.m_CurrentPayMode = OrderUtils.GetPayMode("04"); } break; case "70": case "71": case "72": case "73": case "74": case "75": { //会员卡 this.m_CurrentPayMode = OrderUtils.GetPayMode("02"); } break; } } } }