Ejemplo n.º 1
0
        public ActionResult EditOnPost(SystemMessageViewModel systemMessage)
        {
            var result = new DataJsonResult();

            if (systemMessage.SentType == 1)
            {
                List <Member> members = null;
                if (systemMessage.MemberType == 0)
                {
                    members = _currencyService.GetList <Member>(me => me.UserType == Security.Identity.UserType.Member);
                }
                //else
                //    members = _currencyService.GetList<Member>(me => me.MemberType == systemMessage.MemberType && me.UserType == Security.Identity.UserType.Member);
                if (members == null || members.Count == 0)
                {
                    throw new Exception("该分类没有会员");
                }

                if (!_systemMessageService.CreatePushSystemMessage(systemMessage.Title, systemMessage.Content, null, null, null, null, "System", SystemMessageModule.Key))
                {
                    throw new Exception("发送消息失败");
                }
            }
            else
            {
                if (string.IsNullOrWhiteSpace(systemMessage.UserName))
                {
                    throw new Exception("请输入用户名");
                }

                var member = _currencyService.GetSingleByConditon <Member>(me => me.UserName == systemMessage.UserName);
                if (member == null)
                {
                    throw new Exception("会员不存在");
                }

                if (!_systemMessageService.CreatePushSystemMessage(systemMessage.Title, systemMessage.Content, null, member.Id, null, null, "System", SystemMessageModule.Key))
                {
                    throw new Exception("发送消息失败");
                }
            }



            //if (!_systemMessageService.CreatePushSystemMessage(systemMessage.Title, systemMessage.Content, null, null, null, null, "System", SystemMessageModule.Key))
            //{
            //    result.ErrorMessage = "保存失败";
            //}

            return(Json(result));
        }
Ejemplo n.º 2
0
        public string Transfer(List <CrashApply> applys, Payment payment, string notifyUrl)
        {
            int successCount = 0;

            foreach (var crashApply in applys)
            {
                if (crashApply.ApplyState != ApplyState.ApplyPassed)
                {
                    Logger.Operation($"提现转账失败,扣除冻结金额处理失败,TransactionNo:{crashApply.TransactionNo},原因:提现转账申请状态不合法", PaymentProcessModule.Instance, Security.SecurityLevel.Danger);
                    continue;
                }
                //判断是否已经存在
                var oauth = _currencyService.GetSingleByConditon <UserOAuth>(
                    o => o.OAuthType == OAuthType.WeiXin && o.MemberId.Equals(crashApply.MemberId, StringComparison.OrdinalIgnoreCase));
                if (oauth == null)
                {
                    using (TransactionScope scope = new TransactionScope())
                    {
                        //其他操作
                        string error;

                        if (_walletService.Thaw(crashApply.MemberId, WalletType.Cash, crashApply.Money, "提现失败", out error))
                        {
                            crashApply.ApplyState = ApplyState.Failure;
                            _currencyService.Update(crashApply);
                            //提交
                            scope.Complete();
                        }
                        else
                        {
                            Logger.Operation($"提现转账失败,扣除冻结金额处理失败,TransactionNo:{crashApply.TransactionNo},原因:{error}", PaymentProcessModule.Instance, Security.SecurityLevel.Danger);
                        }
                    }
                    continue;
                }

                //创建支付应答对象
                WxRequestHandler packageReqHandler = new WxRequestHandler(HttpContext.Current);
                //初始化
                packageReqHandler.Init();

                var nonceStr = TenPayV3Util.GetNoncestr();
                //设置package订单参数
                packageReqHandler.SetParameter("mch_appid", AppId);                                                //公众账号ID
                packageReqHandler.SetParameter("mchid", MchId);                                                    //商户号
                packageReqHandler.SetParameter("nonce_str", nonceStr);                                             //随机字符串
                packageReqHandler.SetParameter("partner_trade_no", crashApply.TransactionNo);
                packageReqHandler.SetParameter("openid", oauth.OAuthId);
                packageReqHandler.SetParameter("check_name", "OPTION_CHECK");
                packageReqHandler.SetParameter("re_user_name", crashApply.RealName);
                packageReqHandler.SetParameter("amount", (crashApply.Money * 100).ToString());
                packageReqHandler.SetParameter("desc", "余额提现");
                packageReqHandler.SetParameter("spbill_create_ip", RemoteIP);

                string sign = packageReqHandler.CreateMd5Sign("key", Key);
                packageReqHandler.SetParameter("sign", sign);   //签名

                string data = packageReqHandler.ParseXML();
                Logger.Debug(data);
                var urlFormat = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";

                var          formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
                MemoryStream ms            = new MemoryStream();
                ms.Write(formDataBytes, 0, formDataBytes.Length);
                ms.Seek(0, SeekOrigin.Begin);//设置指针读取位置
                X509Certificate2 cer = new X509Certificate2($"{AppDomain.CurrentDomain.BaseDirectory}/Config/weixin_apiclient_cert.p12", MchId);

                try
                {
                    var result = RequestUtility.HttpPost(urlFormat, null, ms, timeOut: 10000, cer: cer, checkValidationResult: true);
                    //                    @"<xml>
                    //<return_code><![CDATA[SUCCESS]]></return_code>
                    //<return_msg><![CDATA[]]></return_msg>
                    //<mch_appid><![CDATA[wx8526f7a589c11f7f]]></mch_appid>
                    //<mchid><![CDATA[1393035002]]></mchid>
                    //<device_info><![CDATA[]]></device_info>
                    //<nonce_str><![CDATA[06138BC5AF6023646EDE0E1F7C1EAC75]]></nonce_str>
                    //<result_code><![CDATA[SUCCESS]]></result_code>
                    //<partner_trade_no><![CDATA[2016101312011511532]]></partner_trade_no>
                    //<payment_no><![CDATA[1000018301201610130371564966]]></payment_no>
                    //<payment_time><![CDATA[2016-10-13 19:48:11]]></payment_time>
                    //</xml>"

                    //                    @"<xml>
                    //<return_code><![CDATA[SUCCESS]]></return_code>
                    //<return_msg><![CDATA[付款金额不能小于最低限额.]]></return_msg>
                    //<result_code><![CDATA[FAIL]]></result_code>
                    //<err_code><![CDATA[AMOUNT_LIMIT]]></err_code>
                    //<err_code_des><![CDATA[付款金额不能小于最低限额.]]></err_code_des>
                    //</xml>"
                    var res           = XDocument.Parse(result);
                    var resultCodeXml = res.Element("xml")?.Element("result_code");
                    if (resultCodeXml != null && resultCodeXml.Value.Equals("SUCCESS", StringComparison.OrdinalIgnoreCase))
                    {
                        successCount++;
                        //提交成功
                        crashApply.ApplyState   = ApplyState.Transferred;
                        crashApply.TransferTime = DateTime.Now;
                        crashApply.Description  = "微信提现成功";
                        _currencyService.Update(crashApply);
                        string error;
                        if (
                            !_walletService.Draw(crashApply.MemberId, WalletType.Cash, crashApply.Money, "提现支出",
                                                 out error, null, null, true))
                        {
                            Logger.Operation($"提现转账成功,扣除冻结金额处理失败,TransactionNo:{crashApply.TransactionNo},原因:{error}",
                                             PaymentProcessModule.Instance, Security.SecurityLevel.Danger);
                        }

                        _systemMessageService.CreatePushSystemMessage("提现打款", "您申请的提现已打款,请注意查收", "您申请的提现已打款,请注意查收",
                                                                      crashApply.MemberId, null, null, "CrashApply", WalletModule.Key, MessageCategory.Personal);
                    }
                    else
                    {
                        var returnMsgXml = res.Element("xml")?.Element("return_msg")?.Value;
                        Logger.Operation($"提现转账失败,TransactionNo:{crashApply.TransactionNo},原因:{returnMsgXml}", PaymentProcessModule.Instance, Security.SecurityLevel.Danger);
                    }

                    Logger.Debug(result);
                }
                catch (Exception ex)
                {
                    Logger.Debug(ex, "微信企业付款");
                    Logger.Operation($"提现转账失败,TransactionNo:{crashApply.TransactionNo},未知异常:{ex.Message}", PaymentProcessModule.Instance, Security.SecurityLevel.Danger);

                    continue;
                }
            }

            var resultJson = new DataJsonResult();

            if (successCount < applys.Count)
            {
                resultJson.ErrorMessage = "部分条目处理失败,请查看系统日志";
            }
            resultJson.Success = true; //重置回True
            return(resultJson.ToJson());
        }
Ejemplo n.º 3
0
        public ActionResult SendCouponOnPost(SendCoupon model)
        {
            var result = new DataJsonResult();

            try
            {
                //发放或赠送的不计算数量
                var coupon = _currencyService.GetSingleById <Models.Coupon>(model.CouponId);
                if (coupon == null)
                {
                    throw new Exception("优惠券Id不合法");
                }

                //消息推送内容
                var pushTargetType = (int)PushTargetType.Coupon;
                Dictionary <string, string> pushDic = new Dictionary <string, string>();
                pushDic.Add("PushTargetType", pushTargetType.ToString());
                var title   = "系统赠送优惠券";
                var content = "";
                if (coupon.CouponType == CouponType.Discount)
                {
                    content = $"恭喜您,获得系统赠送的[{coupon.Discount}折]的折扣券,请尽快使用!";
                }
                else
                {
                    content = $"恭喜您,获得系统赠送的[满{coupon.Minimum}减{coupon.Money}]的满减券,请尽快使用!";
                }

                using (TransactionScope scope = new TransactionScope())
                {
                    if (model.SentType == 1)
                    {
                        //分类别发放
                        List <Member> members = null;
                        if (model.MemberType == 0)
                        {
                            members = _currencyService.GetList <Member>(me => me.UserType == Security.Identity.UserType.Member);
                        }
                        //else
                        //    members = _currencyService.GetList<Member>(me => me.MemberType == model.MemberType && me.UserType == Security.Identity.UserType.Member);

                        if (members == null || members.Count == 0)
                        {
                            throw new Exception("该分类没有会员");
                        }
                        foreach (var item in members)
                        {
                            if (!(SendCouponToMember(item, coupon)))
                            {
                                throw new Exception("发放失败");
                            }
                        }

                        //消息通知发送
                        if (!_systemMessageService.CreatePushSystemMessage(title, content, content,
                                                                           null, null, pushDic, "BackSend", SystemMessageModule.Key, MessageCategory.System))
                        {
                            throw new Exception("发送群消息失败");
                        }
                    }
                    else
                    {
                        if (string.IsNullOrWhiteSpace(model.UserName))
                        {
                            throw new Exception("请输入用户名");
                        }

                        var member = _currencyService.GetSingleByConditon <Member>(me => me.UserName == model.UserName);
                        if (member == null)
                        {
                            throw new Exception("会员不存在");
                        }

                        if (!(SendCouponToMember(member, coupon)))
                        {
                            throw new Exception("发放失败");
                        }

                        //消息通知发送
                        if (!_systemMessageService.CreatePushSystemMessage(title, content, content,
                                                                           member.Id, null, pushDic, "BackSend", SystemMessageModule.Key, MessageCategory.System))
                        {
                            throw new Exception("发送群消息失败");
                        }
                    }

                    scope.Complete();
                }
            }
            catch (Exception e)
            {
                result.ErrorMessage = e.Message;
            }

            //发放
            return(Json(result));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 异步返回结果
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public string AsyncReturn(HttpRequestBase request)
        {
            Logger.Debug("支付宝批量转账回调");

            var alipayConfig = _configService.Get <AlipayConfig>();
            var config       = new AlipayConfig2
            {
                Partner  = alipayConfig.Partner,
                SellerId = alipayConfig.SellerId,
                Md5Key   = alipayConfig.MD5Key,
                SignType = SignType.MD5
            };

            SortedDictionary <string, string> sPara = GetRequestPost(request);

            Logger.Debug(sPara.ToJson());

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify    = new Notify(config);
                bool   verifyResult = aliNotify.Verify(sPara, request.Form["notify_id"], request.Form["sign"]);

                if (verifyResult)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码


                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

                    //批量付款数据中转账成功的详细信息

                    string successDetails = request.Form["success_details"];
                    Logger.Debug($"支付宝批量转账回调成功数据{successDetails}");
                    if (!string.IsNullOrEmpty(successDetails))
                    {
                        var detaildata = successDetails.Split('|');
                        if (detaildata.Length > 0)
                        {
                            foreach (var detail in detaildata)
                            {
                                using (TransactionScope scope = new TransactionScope())
                                {
                                    //其他操作
                                    var        crash      = detail.Split('^').FirstOrDefault();
                                    CrashApply crashApply =
                                        _currencyService.GetSingleByConditon <CrashApply>(c => c.TransactionNo == crash);
                                    if (crashApply != null)
                                    {
                                        crashApply.ApplyState   = ApplyState.Transferred;
                                        crashApply.TransferTime = DateTime.Now;
                                        crashApply.Description  = "支付宝提现成功";
                                        _currencyService.Update(crashApply);
                                        string error;
                                        if (!_walletService.Draw(crashApply.MemberId, WalletType.Cash, crashApply.Money, "提现支出", out error, null, null, true))
                                        {
                                            Logger.Operation($"提现转账成功,扣除冻结金额处理失败,TransactionNo:{crashApply.TransactionNo},原因:{error}", PaymentProcessModule.Instance, Security.SecurityLevel.Danger);
                                        }

                                        _systemMessageService.CreatePushSystemMessage("提现打款", "您申请的提现已打款,请注意查收", "您申请的提现已打款,请注意查收", crashApply.MemberId, null, null, "CrashApply", WalletModule.Key, MessageCategory.Personal);
                                        //提交
                                        scope.Complete();
                                    }
                                }
                            }
                        }
                    }
                    //批量付款数据中转账失败的详细信息
                    string failDetails = request.Form["fail_details"];
                    Logger.Debug($"支付宝批量转账回调失败数据{failDetails}");
                    if (!string.IsNullOrEmpty(failDetails))
                    {
                        var faildata = failDetails.Split('|');
                        if (faildata.Length > 0)
                        {
                            foreach (var detail in faildata)
                            {
                                using (TransactionScope scope = new TransactionScope())
                                {
                                    var        crash       = detail.Split('^').FirstOrDefault();
                                    var        description = detail.Split('^');
                                    CrashApply crashApply  =
                                        _currencyService.GetSingleByConditon <CrashApply>(c => c.TransactionNo == crash);
                                    if (crashApply != null)
                                    {
                                        crashApply.ApplyState  = ApplyState.Failure;
                                        crashApply.Description = description[5];
                                        _currencyService.Update(crashApply);

                                        string error;
                                        if (!_walletService.Thaw(crashApply.MemberId, WalletType.Cash, crashApply.Money, "提现失败,解除冻结", out error))
                                        {
                                            Logger.Operation($"提现转账失败,退还金额处理失败,TransactionNo:{crashApply.TransactionNo},原因:{error}", PaymentProcessModule.Instance, Security.SecurityLevel.Danger);
                                        }
                                        //提交
                                        scope.Complete();
                                    }
                                }
                            }
                        }
                    }

                    //判断是否在商户网站中已经做过了这次通知返回的处理
                    //如果没有做过处理,那么执行商户的业务程序
                    //如果有做过处理,那么不执行商户的业务程序

                    return("success");  //请不要修改或删除

                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Logger.Information("提现支付宝回调处理失败,数据验证失败");
                    return("fail");
                }
            }
            else
            {
                Logger.Information("无通知参数");
                return("无通知参数");
            }
        }