Ejemplo n.º 1
0
        public object PayMerchScanDyna(AppPayRequest param)
        {
            try
            {
                int    cid     = param.CID;
                var    storeId = param.StoreId;
                string mapcid  = string.Empty;
                //查询门店支付授权
                var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_A, out mapcid);//26=主扫支付apicode
                if (!authorization.Successed)
                {
                    throw new MessageException(authorization.Message);
                }
                var payStoreId = authorization.Data.ToString();//中转第三方门店号
                //验证用户信息
                if (!string.IsNullOrEmpty(param.MemberId))
                {
                    var veriMemberIntegral = VeriMemberIntegral(param.MemberId, param.UseIntegral);
                    if (!veriMemberIntegral.Successed)
                    {
                        throw new MessageException(veriMemberIntegral.Message);
                    }
                }
                if (param.PayToken.Length == 0 || param.PayToken.Length > 128)
                {
                    throw new MessageException("扫码二维码有误!");
                }

                string out_trade_no   = new AppPayOrderSn(cid, storeId).ToString();
                string create_date    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                var    pay_notify_url = Pharos.Utility.Config.GetAppSettings("qctpaynotifyurl");//回调地址
                var    goods_name     = "";
                //var goods_desc = "";

                //判断用户积分使用
                #region 积分记录
                IntegralFlows reduceIntegral = new IntegralFlows()
                {
                    CompanyId      = cid,
                    StoreId        = storeId,
                    FlowSN         = out_trade_no,
                    Amount         = param.TotalAmount,
                    Integral       = -param.UseIntegral,
                    DiscountAmount = param.DiscountAmount,
                    CardSN         = param.CardSN,
                    Received       = param.Received,
                    Remark         = "",
                    State          = 0,
                    CreateDate     = DateTime.Now,
                    MemberId       = param.MemberId,
                    Alias          = param.Alias
                };
                IntegralFlows addIntegral = new IntegralFlows()
                {
                    CompanyId      = cid,
                    StoreId        = storeId,
                    FlowSN         = out_trade_no,
                    Amount         = param.TotalAmount,
                    Integral       = param.GetIntegral,
                    DiscountAmount = param.DiscountAmount,
                    CardSN         = param.CardSN,
                    Received       = param.Received,
                    Remark         = "",
                    State          = 0,
                    CreateDate     = DateTime.Now,
                    MemberId       = param.MemberId,
                    Alias          = param.Alias
                };
                IntegralFlowsService.Add(reduceIntegral, false);
                IntegralFlowsService.Add(addIntegral);
                #endregion

                var reqParams = new SortedDictionary <string, object>();

                reqParams.Add("charset", PayConst.CHARSET);
                reqParams.Add("method", PayConst.QCTTRADE_PAY_MERCHSCAN);
                reqParams.Add("mch_id", mapcid);
                reqParams.Add("store_id", payStoreId);
                reqParams.Add("device_id", param.Device_id);
                reqParams.Add("sign_type", PayConst.SIGNTYPE);
                reqParams.Add("version", PayConst.VERSION);
                reqParams.Add("out_trade_no", out_trade_no);
                reqParams.Add("create_date", create_date);
                reqParams.Add("total_amount", param.Received);
                reqParams.Add("buyer_pay_token", param.PayToken);
                reqParams.Add("pay_notify_url", pay_notify_url);
                reqParams.Add("buyer_mobile", "");
                reqParams.Add("goods_name", goods_name);
                reqParams.Add("goods_desc", param.Remark);
                //签名
                String sign = PayHelper.Sign(reqParams, authorization.Message);
                reqParams.Add("sign", sign);
                var obj    = HttpClient.PayPost(Pharos.Utility.Config.GetAppSettings("qctscanpayurl"), reqParams);
                var result = JsonConvert.DeserializeObject <JObject>(obj);
                if (result.Property("return_code").Value.ToString() == "00000")
                {
                    int state  = 0;
                    var rstate = result.Property("pay_status", true);
                    switch (rstate)
                    {
                    default:
                    case "NOTPAY":
                        break;

                    case "PAYSUCCESS":
                        state = 1;
                        break;

                    case "PAYFAIL":
                        state = 2;
                        break;

                    case "PAYCANCEL":
                        state = 3;
                        break;

                    case "PAYTIMEOUT":
                        state = 4;
                        break;
                    }
                    AppPaymentRecords record = new AppPaymentRecords()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        OrderSN        = out_trade_no,
                        TotalAmount    = param.TotalAmount,
                        DiscountAmount = param.DiscountAmount,
                        Received       = param.Received,
                        ApiCode        = PayConst.QCTAPICODE_A,
                        PayChannel     = result.Property("pay_channel", true),
                        State          = state,
                        CreateDate     = DateTime.Now,
                        CreateUser     = param.MemberId,
                        ReturnData     = obj,
                        Alias          = param.Alias,
                        UserCode       = param.UserCode,
                        Remark         = param.Remark
                    };
                    AppPaymentRecordsService.Add(record);
                    //成功
                    if (state == 1)
                    {
                        //更新会员积分信息
                        var diffIntegral = param.GetIntegral - param.UseIntegral;
                        if (diffIntegral != 0)
                        {
                            UpdateMemberIntegral(param.MemberId, diffIntegral);
                        }

                        return(result.Property("receipt_amount", true));
                    }
                    else
                    {//状态不成功
                        return(result.Property("pay_status", true));
                    }
                }
                else
                {
                    //失败
                    var errmsg = result.Property("return_msg").Value.ToString();
                    if (errmsg.Contains("支付渠道数据非法"))
                    {
                        errmsg = "请扫描微信或支付宝付款码!";
                    }
                    throw new MessageException(errmsg);
                }
            }
            catch (Exception ex)
            {
                throw new MessageException(ex.Message);
            }
        }
Ejemplo n.º 2
0
        public object PayBuyerScanDyna(AppPayRequest param)
        {
            try
            {
                int    cid     = param.CID;
                var    storeId = param.StoreId;
                string mapcid  = string.Empty;
                //查询门店支付授权
                var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_P, out mapcid);
                if (!authorization.Successed)
                {
                    throw new MessageException(authorization.Message);
                }

                var payStoreId = authorization.Data.ToString();//中转第三方门店号
                if (!string.IsNullOrEmpty(param.MemberId))
                {
                    var veriMemberIntegral = VeriMemberIntegral(param.MemberId, param.UseIntegral);
                    if (!veriMemberIntegral.Successed)
                    {
                        throw new MessageException(veriMemberIntegral.Message);
                    }
                }
                string out_trade_no = new AppPayOrderSn(cid, storeId).ToString();

                string create_date    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                var    pay_notify_url = Pharos.Utility.Config.GetAppSettings("qctpaynotifyurl");//回调地址
                var    goods_name     = "";
                //var goods_desc = "";

                var reqParams = new SortedDictionary <string, object>();

                reqParams.Add("charset", PayConst.CHARSET);
                reqParams.Add("method", PayConst.QCTTRADE_PAY_BUYERSCAN_DYNA);
                reqParams.Add("mch_id", mapcid);
                reqParams.Add("store_id", payStoreId);
                reqParams.Add("device_id", param.Device_id);
                reqParams.Add("sign_type", PayConst.SIGNTYPE);
                reqParams.Add("version", PayConst.VERSION);
                reqParams.Add("out_trade_no", out_trade_no);
                reqParams.Add("create_date", create_date);
                reqParams.Add("total_amount", param.Received);
                reqParams.Add("pay_notify_url", pay_notify_url);
                reqParams.Add("buyer_mobile", "");
                reqParams.Add("goods_name", goods_name);
                reqParams.Add("goods_desc", param.Remark);
                //签名
                String sign = PayHelper.Sign(reqParams, authorization.Message);
                reqParams.Add("sign", sign);
                var obj    = HttpClient.PayPost(Pharos.Utility.Config.GetAppSettings("qctpayurl"), reqParams);
                var result = JsonConvert.DeserializeObject <JObject>(obj);
                if (result.Property("return_code").Value.ToString() == "00000")
                {
                    //成功

                    //支付交易记录
                    AppPaymentRecords record = new AppPaymentRecords()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        OrderSN        = out_trade_no,
                        TotalAmount    = param.TotalAmount,
                        DiscountAmount = param.DiscountAmount,
                        Received       = param.Received,
                        ApiCode        = PayConst.QCTAPICODE_P,
                        State          = 0,
                        CreateDate     = DateTime.Now,
                        CreateUser     = param.MemberId,
                        Alias          = param.Alias,
                        UserCode       = param.UserCode,
                        Remark         = param.Remark
                    };
                    AppPaymentRecordsService.Add(record, false);
                    //积分交易记录
                    //消耗
                    IntegralFlows reduceIntegral = new IntegralFlows()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        FlowSN         = out_trade_no,
                        Amount         = param.TotalAmount,
                        Integral       = -param.UseIntegral,
                        DiscountAmount = param.DiscountAmount,
                        CardSN         = param.CardSN,
                        Received       = param.Received,
                        Remark         = "",
                        State          = 0,
                        CreateDate     = DateTime.Now,
                        MemberId       = param.MemberId,
                        Alias          = param.Alias
                    };
                    //获取
                    IntegralFlows addIntegral = new IntegralFlows()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        FlowSN         = out_trade_no,
                        Amount         = param.TotalAmount,
                        Integral       = param.GetIntegral,
                        DiscountAmount = param.DiscountAmount,
                        CardSN         = param.CardSN,
                        Received       = param.Received,
                        Remark         = "",
                        State          = 0,
                        CreateDate     = DateTime.Now,
                        MemberId       = param.MemberId,
                        Alias          = param.Alias
                    };

                    //保存积分记录
                    IntegralFlowsService.Add(reduceIntegral, false);
                    IntegralFlowsService.Add(addIntegral);


                    return(new { OrderSN = out_trade_no, PayUrl = result.Property("pay_token").Value.ToString() });
                }
                else
                {
                    //失败
                    var errmsg = result.Property("return_msg").Value.ToString();
                    throw new MessageException(errmsg);
                }
            }
            catch (MessageException ex)
            {
                throw new MessageException(ex.Message);
            }
            catch (Exception ex)
            {
                throw new MessageException("支付失败,请稍后重试!");
            }
        }