예제 #1
0
        /// <summary>
        /// 保存微信账号
        /// </summary>
        /// <param name="user_id"></param>
        /// <param name="account"></param>
        /// <param name="account_ent"></param>
        /// <param name="merchant"></param>
        /// <param name="imgmsg"></param>
        /// <returns></returns>
        public StateCode Save(long user_id, WeChatAccount account, WeChatAccountEnt account_ent, WeChatMerchant merchant, string imgmsg)
        {
            using (ISession s = SessionFactory.Instance.CreateSession())
            {
                try
                {
                    s.StartTransaction();
                    WeChatAccount wx_account = s.Get <WeChatAccount>("where id != @0", 0);
                    if (wx_account != null)
                    {
                        account.id = wx_account.id;
                        account.updated_user_id = user_id;
                        account.updated_date    = DateTime.Now;
                        s.Update <WeChatAccount>(account);
                    }
                    else
                    {
                        int    rand;
                        char   code;
                        string randomcode = String.Empty;

                        //生成一定长度的ToKen
                        System.Random random = new Random();
                        for (int i = 0; i < 8; i++)
                        {
                            rand = random.Next();
                            if (rand % 3 == 0)
                            {
                                code = (char)('A' + (char)(rand % 26));
                            }
                            else
                            {
                                code = (char)('0' + (char)(rand % 10));
                            }
                            randomcode += code.ToString();
                        }

                        //设置账号ToKen
                        account.token = randomcode;

                        account.created_user_id = user_id;
                        account.created_date    = DateTime.Now;
                        s.Insert <WeChatAccount>(account);
                    }

                    //企业号信息
                    WeChatAccountEnt wx_account_ent = s.Get <WeChatAccountEnt>("where id > 0");
                    if (wx_account_ent == null)
                    {
                        account_ent.created_user_id = user_id;
                        account_ent.created_date    = DateTime.Now;
                        s.Insert(account_ent);
                    }
                    else
                    {
                        account_ent.id = wx_account_ent.id;
                        s.Update(account_ent);
                    }

                    WeChatMerchant mh = s.Get <WeChatMerchant>("where id > 0");
                    if (mh == null)
                    {
                        s.Insert <WeChatMerchant>(merchant);
                    }
                    else
                    {
                        merchant.id = mh.id;
                        s.Update <WeChatMerchant>(merchant);
                    }

                    //判断是否存在图片信息
                    if (!string.IsNullOrEmpty(imgmsg) && imgmsg.IndexOf("#") != -1)
                    {
                        //图片名称
                        string filename = imgmsg.Split('#')[0];
                        //图片类型
                        string biztype = imgmsg.Split('#')[1];
                        //去除重复图片
                        s.ExcuteUpdate("update tb_img set biz_id = 0 where biz_type = @0 and biz_type = @1  ", biztype, wx_account.id);
                        Img img = s.Get <Img>("where file_name = @0 and biz_type = @1 ", filename, biztype);
                        if (img != null)
                        {
                            img.biz_id = wx_account.id;
                            s.Update <Img>(img);
                        }
                    }

                    s.Commit();
                    return(StateCode.State_200);
                }
                catch (Exception ex)
                {
                    s.RollBack();
                    return(StateCode.State_500);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// 公众号设置
        /// </summary>
        /// <param name="user"></param>
        /// <param name="auth_code"></param>
        /// <param name="expires_in"></param>
        /// <returns></returns>
        public IActionResult AccountSetting(SysUser user, string auth_code = "", string expires_in = "")
        {
            //当前用户加密ID
            ViewBag.Ticket = StringHelper.GetEncryption(bid.ToString());
            //用户图片路径
            ViewBag.imgurl = string.Empty;

            ViewBag.OpenToken = "";
            ViewBag.AscKey    = "";

            //缺省图片路劲
            ViewBag.defimgurl         = ResXmlConfig.Instance.DefaultImgSrc(AppGlobal.Res, ImgType.WX_Account);
            ViewBag.wx_account_imgurl = ViewBag.defimgurl;
            WeChatAccount account = ServiceIoc.Get <WeChatAccountService>().Get();

            if (account != null)
            {
                Img img = ServiceIoc.Get <ImgService>().GetImg(ImgType.WX_Account, account.id);
                if (img != null)
                {
                    ViewBag.wx_account_imgurl = string.IsNullOrEmpty(img.getImgUrl()) ? ViewBag.defimgurl : img.getImgUrl();
                }
                ViewBag.account = JsonConvert.SerializeObject(account);
            }
            else
            {
                ViewBag.Token = StringHelper.CreateRandomCode(10);
            }

            WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get();

            if (merchant != null)
            {
                ViewBag.merchant = JsonConvert.SerializeObject(merchant);
            }

            WXOpenAccount openAcount = ServiceIoc.Get <WXOpenAccountService>().Get();

            if (openAcount != null)
            {
                ViewBag.openAcount = JsonConvert.SerializeObject(openAcount);
            }

            WXOpenSetting openSetting = ServiceIoc.Get <WXOpenSettingService>().Get();

            if (openSetting != null)
            {
                ViewBag.opensetting = JsonConvert.SerializeObject(openSetting);
            }
            else
            {
                ViewBag.OpenToken = StringHelper.GetRandomCode(10);
                ViewBag.AscKey    = StringHelper.GetRandomCode(43);
            }

            ViewBag.AuthTitle = "待微信推送票据";
            ViewBag.url       = "javascript:;";

            //获取当前凭据
            WXOpenCmptVerifyTicket ticket = ServiceIoc.Get <WXOpenAuthService>().GetCmptVerifyTicket();

            if (ticket != null && ConfigManage.AppSettings <bool>("WeChatSettings:IsOpenAuthUrl"))
            {
                if (ticket.ComponentVerifyTicket != null)
                {
                    ViewBag.WXOpenTicket = ticket.ComponentVerifyTicket.Value;
                    string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ViewBag.WXOpenTicket);
                    string pre_auth_code     = ServiceIoc.Get <WXOpenAuthService>().GetOpenPreAuthCode(cmpt_access_token, openSetting.component_appid);
                    string redirect_uri      = AppGlobal.Admin + "WeChat/AccountSetting";

                    ViewBag.AuthTitle = "授权公众号";
                    //授权地址
                    ViewBag.url = WeChatOpenHelper.GetOpenOuthUrl(openSetting.component_appid, pre_auth_code, redirect_uri);
                }
            }

            //授权回调
            if (!string.IsNullOrEmpty(auth_code) && !string.IsNullOrEmpty(expires_in))
            {
                //组件Token
                string cmpt_access_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value);
                //使用授权码换取公众号的接口调用凭据和授权信息
                WXOpenAuthFun auth_fun = ServiceIoc.Get <WXOpenAuthService>().GetAuthInfo(cmpt_access_token, openSetting.component_appid, auth_code);
                //组件ID
                string cmpt_token = ServiceIoc.Get <WXOpenAuthService>().GetCmptAccessToken(openSetting, ticket.ComponentVerifyTicket.Value);
                //成功
                if (auth_fun != null && !string.IsNullOrEmpty(cmpt_token))
                {
                    ServiceIoc.Get <WXOpenAccountService>().AuthWeChatAccount(user.id, cmpt_token, openSetting.component_appid, auth_fun.authorization_info.authorizer_appid);
                }

                return(Redirect(AppGlobal.Admin + "WeChat/AccountSetting"));
            }

            return(View());
        }
예제 #3
0
        /// <summary>
        /// 保存公众账号
        /// </summary>
        /// <param name="user"></param>
        /// <param name="account"></param>
        /// <param name="account_ent"></param>
        /// <param name="merchant"></param>
        /// <param name="imgmsg"></param>
        /// <returns></returns>
        public JsonResult SaveAccount(SysUser user, WeChatAccount account, WeChatAccountEnt account_ent, WeChatMerchant merchant, string imgmsg)
        {
            //微信公众号类型验证
            if (account.type != WXAccountType.Subscription)
            {
                AccessToken token = WeChatBaseHelper.GetAccessToken(account.appid, account.app_secret);
                if (token.access_token == null)
                {
                    return(Json(GetResult(StateCode.State_11001, token.errcode.ToString())));
                }
            }

            StateCode state = ServiceIoc.Get <WeChatAccountService>().Save(user.id, account, account_ent, merchant, imgmsg);

            return(Json(GetResult(state)));
        }
예제 #4
0
        public JsonResult SubmitRefundOrder(string no, decimal refund_amount, IHostingEnvironment host)
        {
            try
            {
                //退款状态码
                StateCode state = StateCode.State_500;

                #region 订单基本状态判断

                //退款单
                OrderRefund orderRefund = ServiceIoc.Get <OrderRefundService>().Get(no);

                //订单
                ProductOrder order = ServiceIoc.Get <ProductOrderService>().GetById(orderRefund.order_id);

                //是否存在订单
                if (order == null)
                {
                    return(Json(GetResult(StateCode.State_551)));
                }

                //订单是否未支付
                if (!order.is_pay)
                {
                    return(Json(GetResult(StateCode.State_552)));
                }

                //退款金额是否大于实际支付金额
                if (refund_amount > order.actual_amount)
                {
                    return(Json(GetResult(StateCode.State_554)));
                }

                //订单状态和退款单状态是可以退款的情况
                if (order.refund_status != 1 || orderRefund.status != 1)
                {
                    return(Json(GetResult(StateCode.State_553)));
                }

                #endregion

                //返回信息
                string msg = string.Empty;

                bool PayStatus = ConfigManage.AppSettings <bool>("AppSettings:WXPayStatus");

                //支付宝支付
                if (PayMethod.AliPay == order.pay_method)
                {
                    //商户号ID
                    string app_id = ConfigManage.AppSettings <string>("AppSettings:ALIPAY_APP_ID");
                    //AliRefundPayBizContent bizContent = new AliRefundPayBizContent();
                    //bizContent.out_trade_no = orderRefund.order_serial_no;
                    //bizContent.refund_amount = PayStatus ? refund_amount : decimal.Parse("0.01");

                    ////string webRootPath = host.WebRootPath;
                    //string privateKeyPem = host.ContentRootPath + "Config\\alipay_cret\\rsa_private_key.pem";
                    //string publicKeyPem = host.ContentRootPath + "Config\\alipay_cret\\rsa_public_key.pem";

                    //IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app_id, privateKeyPem, "json", "1.0", "RSA2", publicKeyPem, "utf-8", true);
                    //AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
                    //request.BizContent = JsonConvert.SerializeObject(bizContent);

                    //AlipayTradeRefundResponse response = client.Execute(request);
                    //if (!response.IsError)
                    //{
                    //    state = ServiceIoc.Get<OrderRefundService>().AliPayConfirmRefund(orderRefund.order_serial_no, order.id);
                    //}
                    //else { }
                }//微信app支付
                else if (PayMethod.WeChat_App == order.pay_method)
                {
                    RefundPay refundParam = new RefundPay();

                    //证书路径
                    DirectoryInfo Dir      = Directory.GetParent(ConfigManage.AppSettings <string>("AppSettings:WeChat_App_CertPath"));
                    string        certPath = Dir.Parent.Parent.FullName;

                    //证书密钥
                    //string certPwd = Settings.AppSettings("CertPwd");
                    //商户信息
                    WeChatMerchant merchant = ServiceIoc.Get <WeChatMerchantService>().Get();

                    refundParam.appid = merchant.app_id;
                    //商户号
                    refundParam.mch_id = merchant.mch_id;
                    //随机数
                    refundParam.nonce_str = StringHelper.CreateNoncestr(16);
                    //商户侧传给微信的订单号
                    refundParam.out_trade_no = orderRefund.order_serial_no;
                    //商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
                    refundParam.out_refund_no = orderRefund.refund_serial_no;
                    //订单总金额,单位为分
                    refundParam.total_fee = PayStatus ? (int)(refund_amount * 100) : 1;
                    //订单总金额,单位为分
                    refundParam.refund_fee = PayStatus ? (int)(refund_amount * 100) : 1;
                    //操作员帐号, 默认为商户号
                    refundParam.op_user_id = merchant.mch_id;

                    //退款
                    state = ServiceIoc.Get <OrderRefundService>().WeChatConfirmRefund(refundParam, order.id, certPath, merchant.mch_id, merchant.pay_key, out msg);
                }//微信公众号支付
                else if (PayMethod.WeChat_JsApi == order.pay_method || PayMethod.WeChat_Native == order.pay_method)
                {
                    RefundPay refundParam = new RefundPay();

                    //证书路径
                    DirectoryInfo Dir      = Directory.GetParent(ConfigManage.AppSettings <string>("AppSettings:WeChat_App_CertPath"));
                    string        certPath = Dir.Parent.Parent.FullName;

                    //证书密钥
                    //string certPwd = Settings.AppSettings("CertPwd");

                    //开放平台授权公众号信息
                    WeChatAccount weChatAccount = ServiceIoc.Get <WeChatAccountService>().Get();

                    refundParam.appid = weChatAccount.appid;
                    //商户号
                    refundParam.mch_id = weChatAccount.mch_id;
                    //随机数
                    refundParam.nonce_str = StringHelper.CreateNoncestr(16);
                    //商户侧传给微信的订单号
                    refundParam.out_trade_no = orderRefund.order_serial_no;
                    //商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
                    refundParam.out_refund_no = orderRefund.refund_serial_no;
                    //订单总金额,单位为分
                    refundParam.total_fee = PayStatus ? (int)(refund_amount * 100) : 1;
                    //订单总金额,单位为分
                    refundParam.refund_fee = PayStatus ? (int)(refund_amount * 100) : 1;
                    //操作员帐号, 默认为商户号
                    refundParam.op_user_id = weChatAccount.mch_id;

                    //退款
                    state = ServiceIoc.Get <OrderRefundService>().WeChatConfirmRefund(refundParam, order.id, certPath, weChatAccount.mch_id, weChatAccount.pay_key, out msg);
                }

                return(Json(GetResult(state, msg)));
            }
            catch (Exception ex)
            {
                ServiceIoc.Get <APILogsService>().Save("提交退款SubmitRefundOrder==>" + ex.ToString());
                return(Json(GetResult(StateCode.State_500)));
            }
        }