コード例 #1
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("支付失败,请稍后重试!");
            }
        }
コード例 #2
0
        public object TradeNotify([FromBody] JObject obj)
        {
            //更新会员积分信息
            var charset   = obj.Property("charset", true);
            var cid       = Convert.ToInt32(obj.Property("mch_id", true)); //
            var storeId   = obj.Property("store_id", true);                //门店
            var orderSN   = obj.Property("out_trade_no", true);            //单号
            var amount    = obj.Property("receipt_amount", true);          //支付金额
            var payState  = obj.Property("pay_status", true);              //notpay=支付中;paysuccess=支付成功;payfail=支付失败;paycancel=已撤销;paytimeout=支付超时
            var tradeDate = obj.Property("trade_date", true);              //支付时间
            var channel   = obj.Property("pay_channel", true);             //支付渠道
            var deviceId  = obj.Property("device_id", true);               //设备编号
            var signType  = obj.Property("sign_type", true);
            var sign      = obj.Property("sign", true);
            var version   = obj.Property("version", true);
            var method    = obj.Property("method", true);

            //验证签名
            var reqParams = new SortedDictionary <string, object>();

            reqParams.Add("charset", charset);
            reqParams.Add("method", PayConst.QCTTRADE_NOTIFY_PAY);
            reqParams.Add("mch_id", cid);
            reqParams.Add("store_id", storeId);
            reqParams.Add("device_id", deviceId);
            reqParams.Add("sign_type", signType);
            reqParams.Add("version", version);
            reqParams.Add("out_trade_no", orderSN);
            reqParams.Add("receipt_amount", amount);
            reqParams.Add("pay_status", payState);
            reqParams.Add("pay_channel", channel);
            reqParams.Add("trade_date", tradeDate);

            string mapcid = string.Empty;

            //查询门店支付授权
            var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_P, out mapcid, true);
            int _cid          = Convert.ToInt32(mapcid);

            if (!authorization.Successed)
            {
                throw new MessageException("门店信息错误");
            }
            var alias = new string[1];
            //签名
            string localsign = PayHelper.Sign(reqParams, authorization.Message);

            if (localsign == sign)
            {
                if (payState == "PAYSUCCESS")
                {
                    var localStore = StorePaymentAuthorizationService.Find(o => o.CompanyId == _cid && o.MapPaymentStoreId == storeId && o.PayType == PayConst.QCTAPICODE_P && o.State == 1);
                    if (localStore == null)
                    {
                        throw new MessageException("未找到门店授权信息!");
                    }
                    //更新支付记录
                    var data = AppPaymentRecordsService.Find(o => o.CompanyId == _cid && o.StoreId == localStore.StoreId && o.OrderSN == orderSN);
                    if (data != null)
                    {
                        if (data.State == 1)
                        {
                            goto gotoReturn;
                        }
                        data.State      = 1;
                        alias[0]        = data.Alias;
                        data.PayChannel = channel;
                        data.ReturnData = obj.ToString();
                        AppPaymentRecordsService.Update(data);
                    }
                    //更新会员信息
                    var records = IntegralFlowsService.FindList(o => o.FlowSN == orderSN && o.CompanyId == cid);
                    if (records != null)
                    {
                        //更新会员主表信息
                        var differentIntergral = 0m;
                        foreach (var item in records)
                        {
                            item.State          = 1;
                            differentIntergral += item.Integral;
                        }
                        //更新积分交易流水状态
                        IntegralFlowsService.Update(new IntegralFlows());
                        if (differentIntergral != 0m)
                        {
                            UpdateMemberIntegral(records.FirstOrDefault().MemberId, differentIntergral);
                        }
                    }
                }
            }
            else
            {
                throw new MessageException("签名验证失败!");
            }
            //通知手机
            try
            {
                var pushData = new object();
                if (alias.Length > 0 && payState == "PAYSUCCESS")
                {
                    pushData = new
                    {
                        platform = "all",
                        audience = new { alias = alias },
                        message  = new
                        {
                            msg_content = JsonConvert.SerializeObject(new
                            {
                                method = "paynotify",
                                data   = new
                                {
                                    ordersn  = orderSN,
                                    date     = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                    state    = 1,
                                    amount   = amount,
                                    descript = "成功支付!"
                                }
                            }),
                            content_type = "text"
                        }
                    };
                }
                else
                {
                    pushData = new
                    {
                        platform = "all",
                        audience = new { alias = alias },
                        message  = new
                        {
                            msg_content = JsonConvert.SerializeObject(new
                            {
                                method = "paynotify",
                                data   = new
                                {
                                    ordersn  = orderSN,
                                    date     = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                    state    = 0,
                                    amount   = amount,
                                    descript = "订单未成功支付!"
                                }
                            }),
                            content_type = "text"
                        }
                    };
                }
                JPushRestClient.Post <dynamic, JObject>(pushData);
            }
            catch (Exception)
            {
            }
gotoReturn:
            return(new { return_code = "00000", return_msg = "接收成功" });
        }