Exemplo n.º 1
0
        public object getTransferPay(Dictionary <string, object> dicParas)
        {
            try
            {
                string errMsg          = string.Empty;
                string mer_transfer_no = dicParas.ContainsKey("mer_transfer_no") ? dicParas["mer_transfer_no"].ToString() : string.Empty;
                string tran_amount     = dicParas.ContainsKey("tran_amount") ? dicParas["tran_amount"].ToString() : string.Empty;
                string recv_bank_code  = dicParas.ContainsKey("recv_bank_code") ? dicParas["recv_bank_code"].ToString() : string.Empty;
                string recv_accno      = dicParas.ContainsKey("recv_accno") ? dicParas["recv_accno"].ToString() : string.Empty;
                string recv_name       = dicParas.ContainsKey("recv_name") ? dicParas["recv_name"].ToString() : string.Empty;
                string recv_province   = dicParas.ContainsKey("recv_province") ? dicParas["recv_province"].ToString() : string.Empty;
                string recv_city       = dicParas.ContainsKey("recv_city") ? dicParas["recv_city"].ToString() : string.Empty;
                string tran_fee_type   = dicParas.ContainsKey("tran_fee_type") ? dicParas["tran_fee_type"].ToString() : string.Empty;
                string tran_type       = dicParas.ContainsKey("tran_type") ? dicParas["tran_type"].ToString() : string.Empty;

                PayQRcodeModel model = new PayQRcodeModel();
                model.OrderId = mer_transfer_no;

                #region 智付
                string errmsg = "";
                DinPayData.TransferData payOrder = new DinPayData.TransferData();
                payOrder.mer_transfer_no = mer_transfer_no;
                payOrder.tran_amount     = tran_amount;
                payOrder.recv_bank_code  = recv_bank_code;
                payOrder.recv_accno      = recv_accno;
                payOrder.recv_name       = recv_name;
                payOrder.recv_province   = recv_province;
                payOrder.recv_city       = recv_city;
                payOrder.tran_fee_type   = tran_fee_type;
                payOrder.tran_type       = tran_type;

                DinPayApi payApi  = new DinPayApi();
                string    payCode = payApi.TransferPay(payOrder);

                return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "" + payCode));

                //if (payCode == "")
                //{
                //    return ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "" + payCode);
                //}
                #endregion

                //return ResponseModelFactory<PayQRcodeModel>.CreateModel(isSignKeyReturn, model);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemplo n.º 2
0
        public object getPayQRcode(Dictionary <string, object> dicParas)
        {
            try
            {
                string errMsg        = string.Empty;
                string orderId       = dicParas.ContainsKey("orderId") ? dicParas["orderId"].ToString() : string.Empty;
                string strPayChannel = dicParas.ContainsKey("payChannel") ? dicParas["payChannel"].ToString() : string.Empty;
                string payType       = dicParas.ContainsKey("payType") ? dicParas["payType"].ToString() : string.Empty;
                string subject       = dicParas.ContainsKey("subject") ? dicParas["subject"].ToString() : string.Empty;

                if (string.IsNullOrWhiteSpace(orderId))
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效"));
                }

                if (string.IsNullOrWhiteSpace(payType))
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付方式为空"));
                }
                //支付方式
                PaymentChannel PayChannel = (PaymentChannel)Convert.ToInt32(payType);

                Flw_Order order = Flw_OrderBusiness.GetOrderModel(orderId);
                if (order == null)
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效"));
                }

                Base_StoreInfo store = XCCloudStoreBusiness.GetStoreModel(order.StoreID);
                if (store == null)
                {
                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单所属门店无效"));
                }

                //订单减免金额
                decimal freePay = order.FreePay == null ? 0 : order.FreePay.Value;
                //计算订单实付金额,单位:元
                decimal amount = (decimal)order.PayCount - freePay;

                PayQRcodeModel model = new PayQRcodeModel();
                model.OrderId = orderId;

                //SelttleType selttleType = (SelttleType)store.SelttleType.Value;
                SelttleType selttleType = (SelttleType)Convert.ToInt32(strPayChannel);
                switch (selttleType)
                {
                case SelttleType.NotThird:
                    break;

                case SelttleType.AliWxPay:     //微信支付宝官方通道
                {
                    #region 支付宝、微信
                    if (PayChannel == PaymentChannel.ALIPAY)        //支付宝
                    {
                        try
                        {
                            IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version,
                                                                                            AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset);

                            AliPayCommon alipay = new AliPayCommon();
                            AlipayTradePrecreateContentBuilder builder = alipay.BuildPrecreateContent(order, amount, subject);
                            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
                            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
                            //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);
                            //AliPayConfig.notify_url  //商户接收异步通知的地址
                            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, AliPayConfig.notify_url);

                            switch (precreateResult.Status)
                            {
                            case ResultEnum.SUCCESS:
                                model.QRcode = precreateResult.response.QrCode;
                                break;

                            case ResultEnum.FAILED:
                                LogHelper.SaveLog(TxtLogType.AliPay, precreateResult.response.Body);
                                return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, precreateResult.response.Body));

                            case ResultEnum.UNKNOWN:
                                if (precreateResult.response == null)
                                {
                                    LogHelper.SaveLog(TxtLogType.AliPay, "配置或网络异常,请检查后重试");
                                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败"));
                                }
                                else
                                {
                                    LogHelper.SaveLog(TxtLogType.AliPay, "系统异常,请更新外部订单后重新发起请求");
                                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败"));
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            LogHelper.SaveLog(TxtLogType.AliPay, e.Message);
                            return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败"));
                        }
                    }
                    else if (PayChannel == PaymentChannel.WXPAY)        //微信
                    {
                        NativePay native = new NativePay();
                        try
                        {
                            WxPayData resultData = native.GetPayUrl(order, amount, subject);
                            if (resultData.GetValue("result_code") != null)
                            {
                                string resule = resultData.GetValue("result_code").ToString();
                                if (resule == "SUCCESS")
                                {
                                    model.QRcode = resultData.GetValue("code_url").ToString();        //获得统一下单接口返回的二维码链接
                                }
                                else
                                {
                                    LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("err_code_des").ToString());
                                    return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + resultData.GetValue("err_code_des").ToString()));
                                }
                            }
                            else
                            {
                                LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("return_msg").ToString());
                                return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + resultData.GetValue("return_msg").ToString()));
                            }
                        }
                        catch (WxPayException ex)
                        {
                            LogHelper.SaveLog(TxtLogType.WeiXinPay, ex.Message);
                            return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败"));
                        }
                        catch (Exception e)
                        {
                            LogHelper.SaveLog(TxtLogType.WeiXinPay, e.Message);
                            return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败"));
                        }
                    }
                    #endregion
                }
                break;

                case SelttleType.StarPos:     //新大陆
                    #region 新大陆
                {
                    string error = "";
                    PPosPayData.OrderPay pposOrder = new PPosPayData.OrderPay();
                    pposOrder.txnTime = System.DateTime.Now.ToString("yyyyMMddHHmmss");
                    pposOrder.tradeNo = order.OrderID;
                    //pposOrder.tradeNo = Guid.NewGuid().ToString().Replace("-", "");
                    pposOrder.amount       = Convert.ToInt32(amount * 100).ToString();  //实际付款
                    pposOrder.total_amount = Convert.ToInt32(amount * 100).ToString();  //订单总金额
                    pposOrder.subject      = subject;
                    pposOrder.payChannel   = PayChannel.ToString();

                    PPosPayApi ppos = new PPosPayApi();
                    PPosPayData.OrderPayACK result = ppos.OrderPay(pposOrder, out error);
                    if (result == null)
                    {
                        return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + error));
                    }
                    model.QRcode = result.payCode;
                }
                break;

                    #endregion
                case SelttleType.LcswPay:     //扫呗
                    #region 扫呗
                {
                    string qrcode = "";
                    LcswPayDate.OrderPay payInfo = new LcswPayDate.OrderPay();
                    //payInfo.terminal_trace = Guid.NewGuid().ToString().Replace("-", "");
                    payInfo.terminal_trace = order.OrderID;
                    payInfo.pay_type       = PayChannel.ToDescription();
                    payInfo.order_body     = subject;
                    payInfo.total_fee      = Convert.ToInt32(amount * 100).ToString();
                    LcswPayAPI api = new LcswPayAPI();
                    if (api.OrderPay(payInfo, out qrcode))
                    {
                        model.QRcode = qrcode;
                    }
                    else
                    {
                        return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败"));
                    }
                }
                break;

                    #endregion
                case SelttleType.DinPay:     //智付
                    #region 智付
                    string             errmsg  = "";
                    DinPayData.ScanPay scanPay = new DinPayData.ScanPay();
                    //scanPay.order_no = order.OrderID;
                    scanPay.order_no     = Guid.NewGuid().ToString().Replace("-", "");
                    scanPay.order_time   = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    scanPay.order_amount = amount.ToString("0.01");
                    scanPay.service_type = PayChannel == PaymentChannel.WXPAY ? "weixin_scan" : "alipay_scan";
                    scanPay.product_name = subject;
                    scanPay.product_desc = subject;

                    DinPayApi payApi  = new DinPayApi();
                    string    payCode = payApi.GetQRcode(scanPay, out errmsg);
                    if (payCode == "")
                    {
                        return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + errmsg));
                    }
                    model.QRcode = payCode;
                    break;
                    #endregion
                }

                return(ResponseModelFactory <PayQRcodeModel> .CreateModel(isSignKeyReturn, model));
            }
            catch (Exception e)
            {
                throw e;
            }
        }