Exemple #1
0
        /// <summary>
        /// 绑定微信
        /// </summary>
        /// <param name="sceneid">微信识别码</param>
        /// <param name="trueName">真实姓名</param>
        /// <returns></returns>
        public JsonResult setShopWeiXin(string sceneid, string trueName)
        {
            if (!sceneid.Equals("") && !trueName.Equals(""))
            {
                var key = CacheKeyCollection.BindingReturn(sceneid);
                var obj = Core.Cache.Get <Mall.DTO.WeiXinInfo>(key);

                Mall.DTO.WeChatAccount model = new WeChatAccount()
                {
                    ShopId         = CurrentSellerManager.ShopId,
                    Address        = obj.province + obj.city,
                    Logo           = string.IsNullOrEmpty(obj.headimgurl) ? "" : obj.headimgurl,
                    Sex            = obj.sex,
                    WeiXinNickName = string.IsNullOrEmpty(obj.NickName)?"":obj.NickName,
                    WeiXinOpenId   = obj.OpenId,
                    WeiXinRealName = trueName
                };

                ShopApplication.SetWeChatAccount(model);
                return(Json(new Result()
                {
                    success = true
                }));
            }
            else
            {
                return(Json(new Result()
                {
                    success = false
                }));
            }
        }
Exemple #2
0
        /// <summary>
        /// 同步公众号所用粉丝
        /// </summary>
        /// <param name="wxAccount"></param>
        public void SyncAllWXUser(WeChatAccount wxAccount, string next_openid)
        {
            if (wxAccount.type == WeChatAccountType.AuthSubscriber || wxAccount.type == WeChatAccountType.AuthService)
            {
                //获取ToKen
                WXAccessTokenCache token     = ServiceIoc.Get <WeChatTokenService>().AccessToken(wxAccount.appid, wxAccount.app_secret);
                string             user_list = WeChatUserHelper.GetWXUserList(token.token, next_openid);
                WeChatUserBase     wxUsers   = JsonConvert.DeserializeObject <WeChatUserBase>(user_list);

                if (wxUsers.data != null)
                {
                    //open_id 集合
                    string[] open_ids = wxUsers.data.openid;

                    //遍历
                    foreach (string open_id in open_ids)
                    {
                        //通过微信接口获取
                        string WeChatUser_json = WeChatUserHelper.GetWXUserInfo(token.token, open_id);

                        //序列化用户
                        WeChatUser WeChatUser = JsonConvert.DeserializeObject <WeChatUser>(WeChatUser_json);

                        SyncWXUser(WeChatUser);
                    }

                    //存在下一openid
                    if (!string.IsNullOrEmpty(wxUsers.next_openid))
                    {
                        SyncAllWXUser(wxAccount, wxUsers.next_openid);
                    }
                }
            }
        }
        /// <summary>
        /// 在Action执行之前调用
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var           query     = context.HttpContext.Request.Query;
            string        nonce     = query["nonce"];                                            //随机数
            string        timestamp = query["timestamp"];                                        //时间戳
            string        signature = query["signature"];                                        //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数
            string        openId    = query.ContainsKey("openid") ? $"{query["openid"]}" : "";   //用户的标识,对当前公众号唯一
            string        echostr   = query.ContainsKey("echostr") ? $"{query["echostr"]}" : ""; //随机字符串
            WeChatAccount account   = ((BaseController)context.Controller).Account;              //微信账户信息配置

            if (!SignatureVerifyUtil.CheckSignature(signature, timestamp, nonce, account.Token))
            {
                ContractResult result = new ContractResult();
                result.SetError(ErrorCodeType.CheckSignFail);
                context.Result = new JsonResult(result);
                _log.Debug($"【微信签名校验】请求参数=》signature:{signature},timestamp:{timestamp},nonce:{nonce},echostr:{echostr},appid:{account.AppId},openid:{openId}");
                return;
            }

            if (context.HttpContext.Request.Method.Equals("GET", StringComparison.InvariantCultureIgnoreCase) && !string.IsNullOrEmpty(echostr))
            {
                ContentResult result = new ContentResult()
                {
                    Content = echostr
                };
                context.Result = result;
                return;
            }
        }
        /// <summary>
        /// 删除微信菜单
        /// </summary>
        /// <returns></returns>
        public JsonResult DelWeChatMenu()
        {
            try
            {
                string        data;
                WeChatAccount wxAccount = ServiceIoc.Get <WeChatAccountService>().Get();
                AccessToken   token     = WeChatBaseHelper.GetAccessToken(wxAccount.appid, wxAccount.app_secret);
                if (token.access_token == null)
                {
                    return(Json(GetResult(StateCode.State_152)));
                }
                data = WeChatBaseHelper.DeleteWXMenu(token.access_token);
                var errcode = JsonConvert.DeserializeObject <WXErrCode>(data);
                if (errcode.errcode > 0)
                {
                    return(Json(GetResult(StateCode.State_152, token.errcode)));
                }

                //errcode 等于0时候成功
                return(Json(GetResult(StateCode.State_200)));
            }
            catch
            {
                return(Json(GetResult(StateCode.State_500)));
            }
        }
Exemple #5
0
        public ActionResult DeleteConfirmed(string id)
        {
            WeChatAccount weChatAccount = db.WeChatAccounts.Find(id);

            db.WeChatAccounts.Remove(weChatAccount);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemple #6
0
        public void should_not_generate_name_a_second_time_for_same_wechat_account()
        {
            var weChatAccount = new WeChatAccount();

            var name1 = weChatAccount.DisplayName;
            var name2 = weChatAccount.DisplayName;

            Assert.True(name1 == name2);
        }
Exemple #7
0
 public ActionResult Edit([Bind(Include = "Id,AccountId,NickName,BarCode,Valid")] WeChatAccount weChatAccount)
 {
     if (ModelState.IsValid)
     {
         db.Entry(weChatAccount).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(weChatAccount));
 }
Exemple #8
0
        public ActionResult Create([Bind(Include = "AccountId,NickName,BarCode,Valid")] WeChatAccount weChatAccount)
        {
            if (ModelState.IsValid)
            {
                db.WeChatAccounts.Add(weChatAccount);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(weChatAccount));
        }
        /// <summary>
        /// 生成微信自定义菜单
        /// </summary>
        /// <returns></returns>
        public JsonResult BuildWeChatMenu()
        {
            try
            {
                ComplexButton complexBtn;
                WXDefineMenu  wxDefiMenu = new WXDefineMenu();
                wxDefiMenu.button = new List <Button>();
                List <DefineMenu> Menus     = ServiceIoc.Get <DefineMenuService>().GetEnableList();
                List <DefineMenu> mainMenus = Menus.Where(m => m.parent_id == 0).ToList();
                if (mainMenus.Count > 0)
                {
                    foreach (var menu in mainMenus)
                    {
                        var subMenus = Menus.Where(m => m.parent_id == menu.id).ToList();
                        if (subMenus.Count > 0)
                        {
                            complexBtn            = new ComplexButton();
                            complexBtn.sub_button = new List <Button>();
                            complexBtn.name       = menu.name;
                            foreach (var submenu in subMenus)
                            {
                                complexBtn.sub_button.Add(GetButton(submenu));
                            }
                            wxDefiMenu.button.Add(complexBtn);
                        }
                        else
                        {
                            wxDefiMenu.button.Add(GetButton(menu));
                        }
                    }

                    string        postData  = JsonConvert.SerializeObject(wxDefiMenu).Replace("%26", "&");
                    WeChatAccount wxAccount = ServiceIoc.Get <WeChatAccountService>().Get();
                    AccessToken   token     = WeChatBaseHelper.GetAccessToken(wxAccount.appid, wxAccount.app_secret);
                    if (token.access_token == null)
                    {
                        return(Json(GetResult(StateCode.State_152, token.errcode)));
                    }
                    string data    = WeChatBaseHelper.CreateWXMenu(token.access_token, postData);
                    var    errcode = JsonConvert.DeserializeObject <WXErrCode>(data);
                    if (errcode.errcode > 0)
                    {
                        return(Json(GetResult(StateCode.State_152, token.errcode)));
                    }
                }
                return(Json(GetResult(StateCode.State_200)));
            }
            catch
            {
                return(Json(GetResult(StateCode.State_500)));
            }
        }
 public JsonResult Save(WeChatAccount account)
 {
     if (account.Id != default(Guid))
     {
         db.Entry(account).State = System.Data.Entity.EntityState.Modified;
     }
     else
     {
         db.WeChatAccounts.Add(account);
     }
     db.SaveChanges();
     return(Json(new { code = "ok", message = "success saved" }));
 }
Exemple #11
0
        /// <summary>
        /// 同步单一粉丝
        /// 关注时同步
        /// </summary>
        /// <param name="open_id"></param>
        /// <param name="wxAccount"></param>
        public void SyncSingleWXUser(string open_id, WeChatAccount wxAccount)
        {
            //获取ToKen
            WXAccessTokenCache token = ServiceIoc.Get <WeChatTokenService>().AccessToken(wxAccount.appid, wxAccount.app_secret);

            //通过微信接口获取
            string WeChatUser_json = WeChatUserHelper.GetWXUserInfo(token.token, open_id);

            //序列化用户
            WeChatUser WeChatUser = JsonConvert.DeserializeObject <WeChatUser>(WeChatUser_json);

            SyncWXUser(WeChatUser);
        }
Exemple #12
0
        // GET: WeChatAccounts/Delete/5
        public ActionResult Delete(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WeChatAccount weChatAccount = db.WeChatAccounts.Find(id);

            if (weChatAccount == null)
            {
                return(HttpNotFound());
            }
            return(View(weChatAccount));
        }
Exemple #13
0
        public void should_generate_unique_names()
        {
            var account = new WeChatAccount();
            var names   = new List <string>();
            var i       = 20;

            do
            {
                names.Add(RandomDisplayNameGenerator.Generate());
            } while (--i > 0);

            var distinctNames = names.Distinct().ToList();

            Assert.True(distinctNames.Count >= names.Count / 2);
        }
        /// <summary>
        /// 初始化基础上下文
        /// </summary>
        /// <param name="openId">用户的标识,对当前公众号唯一</param>
        /// <param name="account">公众号账户配置</param>
        /// <returns></returns>
        private IAccountContext InitContext(string openId, WeChatAccount account)
        {
            var messageContext = new AccountContext();

            if (account == null || string.IsNullOrEmpty(account.AppId) ||
                string.IsNullOrEmpty(account.SecretKey) || string.IsNullOrEmpty(account.Token))
            {
                return(messageContext);
            }


            messageContext.OpenId  = openId;
            messageContext.Account = account;
            messageContext.AppId   = account.AppId;
            return(messageContext);
        }
Exemple #15
0
        /// <summary>
        /// 同步微信用户分组
        /// </summary>
        /// <param name="wxaccount"></param>
        /// <param name="open_id"></param>
        /// <param name="tableConfig"></param>
        public void SyncWXGroup(WeChatAccount wxAccount, string open_id)
        {
            //获取token
            WXAccessTokenCache token = ServiceIoc.Get <WeChatTokenService>().AccessToken(wxAccount.appid, wxAccount.app_secret);

            //公众号粉丝集合
            string groups = WeChatUserHelper.GetWxGroups(token.token);

            //序列化数据
            string[] groupslist = JsonConvert.DeserializeObject <string[]>(groups);

            foreach (string s in groupslist)
            {
            }
            //open_ids
        }
Exemple #16
0
        private WeChatAccount GetOrCreateGetWeChatAccount(ChatMessage msg)
        {
            var wxId          = msg.SourceWxId;
            var wechatAccount = _weChatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId.ToLower() == wxId.ToLower());

            if (wechatAccount == null)
            {
                wechatAccount = new WeChatAccount
                {
                    WxId = msg.SourceWxId
                };
                _weChatAccountRepo.Save(wechatAccount);
            }

            return(wechatAccount);
        }
        /// <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)));
        }
Exemple #18
0
        private WeChatAccount GetOrCreateGetWeChatAccount(ChatMessage msg)
        {
            var wxId          = msg.SourceWxId;
            var wechatAccount = _weChatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId.ToLower() == wxId.ToLower());

            if (wechatAccount == null)
            {
                // todo: real wechat account!!
                // todo: download avatar!!
                wechatAccount = new WeChatAccount
                {
                    WxId     = msg.SourceWxId,
                    NickName = msg.SourceName
                };
                _weChatAccountRepo.Save(wechatAccount);
            }

            return(wechatAccount);
        }
Exemple #19
0
        public async Task <ApiResponse> VerifyWeChatAccountByCode([FromForm] string code)
        {
            var verifyResult = await _chatyApiService.VerifyWeChatAccount(code);

            if (verifyResult == null)
            {
                return(ApiResponse.NoContent(HttpStatusCode.InternalServerError));
            }

            var user = HttpContext.DiscussionUser();

            if (verifyResult.Id == null)
            {
                _logger.LogWarning("验证微信账号失败:{@WeChatAccountVerification}", new { user.UserName, UserId = user.Id, Code = code, Result = "验证码不正确或已过期" });
                return(ApiResponse.Error("验证失败"));
            }

            _logger.LogInformation("验证微信账号成功:{@WeChatAccountVerification}", new { user.UserName, UserId = user.Id, Code = code });
            var weChatAccount = _wechatAccountRepo.All().FirstOrDefault(wxa => wxa.WxId == verifyResult.Id && wxa.UserId == 0);

            if (weChatAccount == null)
            {
                weChatAccount = new WeChatAccount()
                {
                    WxId      = verifyResult.Id,
                    UserId    = user.Id,
                    WxAccount = verifyResult.Weixin
                };
                _wechatAccountRepo.Save(weChatAccount);
            }
            else
            {
                weChatAccount.UserId    = user.Id;
                weChatAccount.WxAccount = verifyResult.Weixin;
                _wechatAccountRepo.Save(weChatAccount);
            }

            return(ApiResponse.NoContent());
        }
Exemple #20
0
 public ActionResult Index(WeChatAccount account)
 {
     try
     {
         if (account.ID == null)
         {
             svc.Create(account);
         }
         else
         {
             svc.Update(account);
         }
         ViewBag.Url   = account.Url;
         ViewBag.Token = account.Token;
         return(View(account));
     }
     catch (RuleViolatedException e)
     {
         ViewBag.Error = e.Message;
         ViewBag.Url   = account.Url;
         ViewBag.Token = account.Token;
         return(View(account));
     }
 }
Exemple #21
0
        public ActionResult LoginByWeiXin(string code, string state = null, WeChatAccount type = WeChatAccount.AiCardMini)
        {
            Func <string, string, ActionResult> error = (content, detail) =>
            {
                if (type != WeChatAccount.PC)
                {
                    return(Json(Comm.ToJsonResult("Error", content, detail)));
                }
                else
                {
                    return(this.ToError("错误", detail, Url.Action("Login", "Account")));
                }
            };

            if (string.IsNullOrWhiteSpace(code))
            {
                return(error("请求有误", "Code不能为空"));
            }
            if (Request.HttpMethod == "GET")
            {
                type = WeChatAccount.PC;
            }
            if (type != WeChatAccount.AiCardMini && type != WeChatAccount.AiCardPersonalMini)
            {
                //非小程序
                switch (type)
                {
                default:
                case WeChatAccount.PC:
                {
                    Common.WeChat.IConfig           config = new Common.WeChat.ConfigWeChatWork();
                    Common.WeChat.WeChatApi         wechat = new Common.WeChat.WeChatApi(config);
                    Common.WeChat.AccessTokenResult result;
                    try
                    {
                        result = wechat.GetAccessTokenSns(code);
                        var openID = result.OpenID;

                        if (state == "openid")
                        {
                            Response.Cookies["WeChatOpenID"].Value = openID;
                            return(Json(Comm.ToJsonResult("Success", "成功", new { OpenID = openID })));
                        }
                        config.AccessToken = result.AccessToken;
                        var unionid = result.UnionID;
                        var user    = db.Users.FirstOrDefault(s => s.WeChatID == unionid);

                        try
                        {
                            if (user != null)
                            {
                                if (user.UserName == user.NickName)
                                {
                                    var    userInfo = wechat.GetUserInfoSns(openID);
                                    string avart;
                                    try
                                    {
                                        avart = this.Download(userInfo.HeadImgUrl);
                                    }
                                    catch (Exception)
                                    {
                                        avart = "~/Content/Images/404/avatar.png";
                                    }
                                    user.NickName = userInfo.NickName;
                                    user.Avatar   = avart;
                                }
                                var option = new Bll.Users.UserOpenID(user);
                                option.AddOpenID(config.AppID, result.OpenID);
                                user.LastLoginDateTime = DateTime.Now;
                                db.SaveChanges();
                            }
                            else
                            {
                                try
                                {
                                    var userInfo = wechat.GetUserInfoSns(openID);
                                    user = CreateByWeChat(userInfo);
                                }
                                catch (Exception)
                                {
                                    user = CreateByWeChat(new Common.WeChat.UserInfoResult {
                                            UnionID = unionid
                                        });
                                }
                            }
                            if (type != WeChatAccount.PC)
                            {
                                return(Json(Comm.ToJsonResult("Success", "成功", new UserForApiViewModel(user))));
                            }
                            SignInManager.SignIn(user, true, true);
                            switch (state.ToLower())
                            {
                            case null:
                            case "":
                            case "ticketindex":
                                return(RedirectToAction("Index", "Tickets"));

                            case "qrcode":
                                return(RedirectToAction("Index", "Tickets", new { mode = "qrcode" }));

                            case "pagelogin":
                            {
                                var card = db.Cards.FirstOrDefault(s => s.UserID == user.Id);
                                if (card != null)
                                {
                                    return(Redirect($"https://radar.dtoao.com/#/Login?userID={user.Id}&enterpriseID={card.EnterpriseID}&cardID={card.ID}&userName={user.UserName}"));
                                }
                                else
                                {
                                    return(Redirect($"https://radar.dtoao.com/#/Login?error=名片不存在"));
                                }
                            }

                            default:
                                return(Redirect(state));
                            }
                        }
                        catch (Exception ex)
                        {
                            return(error("请求有误", ex.Message));
                        }
                    }
                    catch (Exception ex)
                    {
                        return(error("请求有误", ex.Message));
                    }
                }
                }
            }
            else
            {
                Common.WeChat.IConfig config;
                switch (type)
                {
                case WeChatAccount.AiCardMini:
                    config = new Common.WeChat.ConfigMini();
                    break;

                case WeChatAccount.AiCardPersonalMini:
                    config = new Common.WeChat.ConfigMiniPersonal();
                    break;

                default:
                    return(Json(Comm.ToJsonResult("Error", "Type参数有误")));
                }
                //小程序
                WeChatMinApi wechat = new Common.WeChat.WeChatMinApi(config);
                try
                {
                    var             result = wechat.Jscode2session(code);
                    ApplicationUser user   = null;
                    if (!string.IsNullOrWhiteSpace(result.UnionID))
                    {
                        user = db.Users.FirstOrDefault(s => s.WeChatID == result.UnionID);
                        // 把OpenID存进数据库
                        if (user != null)
                        {
                            var option = new Bll.Users.UserOpenID(user);
                            option.AddOpenID(config.AppID, result.OpenID);
                            db.SaveChanges();
                        }
                    }
                    return(Json(Comm.ToJsonResult("Success", "成功", new
                    {
                        result.OpenID,
                        result.UnionID,
                        User = user == null ? null : new UserForApiViewModel(user)
                    })));
                }
                catch (Exception ex)
                {
                    return(Json(Comm.ToJsonResult("Error", ex.Message)));
                }
            }
        }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="openId">用户的标识,对当前公众号唯一</param>
 /// <param name="account">公众号账户配置</param>
 /// <param name="inputStream">微信传入的文件流</param>
 public MessageHandlerProvider(string openId, WeChatAccount account, Stream inputStream)
 {
     Account         = InitContext(openId, account);
     RequestDocument = XmlUtility.SerializeObject(inputStream);
     Descendants     = RequestDocument.Descendants();
 }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="openId">用户的标识,对当前公众号唯一</param>
 /// <param name="account">公众号账户配置</param>
 /// <param name="requestDocument">微信传入的Xml文档</param>
 public MessageHandlerProvider(string openId, WeChatAccount account, XDocument requestDocument)
 {
     RequestDocument = requestDocument;
     Account         = InitContext(openId, account);
     Descendants     = RequestDocument.Descendants();
 }
Exemple #24
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)));
            }
        }
Exemple #25
0
 /// <summary>
 /// 设置店铺微信帐户
 /// </summary>
 /// <param name="account"></param>
 public static void SetWeChatAccount(WeChatAccount account)
 {
     Service.SetWeChatAccount(account);
     ClearCacheShop(account.ShopId);
 }
Exemple #26
0
 public async Task <int> UpdateWeChatAccountAsync(WeChatAccount model)
 {
     using var spiderContext = new SpiderContext();
     spiderContext.WeChatAccounts.Update(model);
     return(await spiderContext.SaveChangesAsync());
 }
        /// <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());
        }
Exemple #28
0
 /// <summary>
 /// 同步公众号所用粉丝
 /// </summary>
 /// <param name="wxAccount"></param>
 public void SyncAllFans(WeChatAccount wxAccount)
 {
     SyncAllWXUser(wxAccount, "");
 }