コード例 #1
0
        /// <summary>
        /// 发送消息,有异常会跳过
        /// </summary>
        /// <param name="userIDs"></param>
        /// <param name="tempID"></param>
        /// <param name="data"></param>
        /// <param name="url"></param>
        public void SendTempMessage(IEnumerable <string> userIDs, string tempID, object data, string url)
        {
            var accessToken = GetAccessToken();

            foreach (var openID in userIDs)
            {
                var obj = new
                {
                    touser      = openID,
                    template_id = tempID,
                    url         = url,
                    data        = data
                };
                var api = new Api.BaseApi($"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={accessToken}", "POST", obj);
                try
                {
                    var r2 = api.CreateRequestReturnJson();
                    Comm.WriteLog("wechat", $"OpenID:{openID},Result:{JsonConvert.SerializeObject(r2)}", Enums.DebugLogLevel.Normal);
                }
                catch (Exception ex)
                {
                    Comm.WriteLog("wechat", $"OpenID:{openID},Error:{ex.Message}", Enums.DebugLogLevel.Error);
                }
            }
        }
コード例 #2
0
        public UserInfoResult GetUserInfoCgi(string openID)
        {
            var p = new Dictionary <string, string>();

            p.Add("access_token", GetAccessToken());
            p.Add("openid", openID);
            p.Add("lang", "zh_CN");
            try
            {
                var result = new Api.BaseApi($"https://api.weixin.qq.com/cgi-bin/user/info{p.ToParam("?")}", "GET")
                             .CreateRequestReturnJson();
                if (result["errcode"] != null)
                {
                    throw new Exception(JsonConvert.SerializeObject(result));
                }
                return(new UserInfoResult
                {
                    NickName = result["nickname"].Value <string>(),
                    HeadImgUrl = result["headimgurl"].Value <string>(),
                    UnionID = result["unionid"].Value <string>(),
                    IsSubscribe = result["subscribe"]?.Value <int>() == 1
                });
            }
            catch (Exception)
            {
                throw;
            }
        }
コード例 #3
0
        public string GetMenu()
        {
            string accessToken = GetAccessToken();
            var    url         = $"https://api.weixin.qq.com/cgi-bin/menu/get?access_token={accessToken}";
            var    api         = new Api.BaseApi(url, "GET");
            var    result      = api.CreateRequestReturnString();

            return(result);
        }
コード例 #4
0
        public string DecryptID(string id)
        {
            var p = new Dictionary <string, string>();

            p.Add("id", id);
            var url    = GetUrl("xiaodian.common.decryptID", p);
            var result = new Api.BaseApi(url, "POST", p).CreateRequestReturnJson();

            return(result["result"]["data"].Value <string>());
        }
コード例 #5
0
        public List <Channel> ChannelGetAll()
        {
            var p = new Dictionary <string, string>();

            p.Add("userId", Token.UserID);
            var url    = GetUrl("xiaodian.cpsdata.channelgroup.getList", p);
            var result = new Api.BaseApi(url, "POST", p).CreateRequestReturnJson();
            var model  = result["result"]["data"].Values <JObject>()
                         .Select(s => new Channel(s))
                         .ToList();

            return(model);
        }
コード例 #6
0
        /// <summary>
        /// 修改微信菜单
        /// </summary>
        /// <param name="menu"></param>
        public void CreateMenu(string menu)
        {
            var    jMenu       = JsonConvert.DeserializeObject <JObject>(menu);
            string accessToken = GetAccessToken();
            var    url         = $"https://api.weixin.qq.com/cgi-bin/menu/create?access_token={accessToken}";
            var    api         = new Api.BaseApi(url, "POST", jMenu);
            var    result      = api.CreateRequestReturnJson();

            if (result["errcode"].Value <string>() != "0")
            {
                throw new Exception(result["errmsg"].Value <string>());
            }
        }
コード例 #7
0
        public string RefreshToken()
        {
            var date   = DateTime.Now;
            var api    = new Api.BaseApi($"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={AppID}&secret={Secret}", "GET");
            var result = api.CreateRequestReturnJson();

            _accessToken = new WeChat.AccessToken()
            {
                Code = result["access_token"].Value <string>(),
                End  = DateTime.Now.AddSeconds(3500)
            };
            return(_accessToken.Code);
        }
コード例 #8
0
        public List <Cid2> GetAllCategory2(string pid = null)
        {
            var p = new Dictionary <string, string>();

            p.Add("parentID", pid);
            p.Add("userId", Token.UserID);
            var url    = GetUrl("xiaodian.item.getAllCategory", p);
            var result = new Api.BaseApi(url, "POST", p).CreateRequestReturnJson();
            var model  = result["result"]["data"].Values <JObject>()
                         .Select(s => new Cid2(s))
                         .ToList();

            return(model);
        }
コード例 #9
0
        public void ChannelDelete(int id)
        {
            var p = new Dictionary <string, string>();

            p.Add("CpsChannelGroupParam", JsonConvert.SerializeObject(new { id = id }));
            p.Add("userId", Token.UserID);
            var url    = GetUrl("xiaodian.cpsdata.channelgroup.delete", p);
            var result = new Api.BaseApi(url, "POST", p).CreateRequestReturnJson();
            var code   = result["status"]["code"].Value <string>();

            if (code != "0000000")
            {
                throw new Exception(result["status"]["msg"].Value <string>());
            }
        }
コード例 #10
0
        /// <summary>
        /// 获取关注用户的OpenID
        /// </summary>
        /// <param name="next">第一个拉取的OPENID,不填默认从头开始拉取</param>
        /// <returns></returns>
        public OpenIDList GetAllFollowerOpenIDs(string next = null)
        {
            var accessToken   = GetAccessToken();
            var apiGetOpenIDs = new Api.BaseApi($"https://api.weixin.qq.com/cgi-bin/user/get?access_token={accessToken}&next_openid={next}", "GET");
            var result        = apiGetOpenIDs.CreateRequestReturnJson();
            var count         = result["count"].Value <int>();

            return(new OpenIDList
            {
                Count = count,
                Next = result["next_openid"].Value <string>(),
                OpenIDs = count > 0 ? result["data"]["openid"].Values <string>().ToArray() : new string[0],
                Total = result["total"].Value <int>(),
            });
        }
コード例 #11
0
        public List <TempMessage> GetAllTempMessage()
        {
            var url    = $"  https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token={GetAccessToken()}";
            var api    = new Api.BaseApi(url, "GET");
            var result = api.CreateRequestReturnJson();

            return(result["template_list"].Values <JObject>().Select(s => new TempMessage
            {
                Content = s["content"].Value <string>(),
                DeputyID = s["deputy_industry"].Value <string>(),
                ID = s["template_id"].Value <string>(),
                PrimaryID = s["primary_industry"].Value <string>(),
                Title = s["title"].Value <string>(),
            }).ToList());
        }
コード例 #12
0
        public void GetAccessToken(string code, string url, string state)
        {
            var p = new Dictionary <string, string>();

            p.Add("app_key", Config.AppKey);
            p.Add("app_secret", Config.AppSecret);
            p.Add("redirect_uri", url);
            p.Add("grant_type", "authorization_code");
            p.Add("code", code);
            p.Add("state", state);
            var tokenUrl = "https://oauth.mogujie.com/token";
            var api      = new Api.BaseApi(tokenUrl + p.ToParam("?"), "POST");
            var j        = api.CreateRequestReturnJson();

            Token = new Token(j);
        }
コード例 #13
0
ファイル: Jd.cs プロジェクト: bsed/Buy
        public void RefeashToken()
        {
            var p = new Dictionary <string, string>();

            p.Add("client_id", Config.AppKey);
            p.Add("client_secret", Config.AppSecret);
            p.Add("grant_type", "refresh_token");
            p.Add("refresh_token", Token.RefreshToken);
            var tokenUrl = "https://oauth.jd.com/oauth/token";
            var api      = new Api.BaseApi(tokenUrl + p.ToParam("?"), "POST");
            var j        = api.CreateRequestReturnJson();

            if (string.IsNullOrWhiteSpace(j["code"]?.Value <string>()))
            {
                throw new Exception("京东授权过期");
            }
            Token = new Token(j);
        }
コード例 #14
0
        public UserInfoResult GetUserInfoSns(string openID, string accessToken)
        {
            var p = new Dictionary <string, string>();

            p.Add("access_token", accessToken);
            p.Add("openid", openID);
            p.Add("lang", "zh_CN");
            var result = new Api.BaseApi($"https://api.weixin.qq.com/sns/userinfo{p.ToParam("?")}", "GET").CreateRequestReturnJson();

            if (result["errcode"] != null)
            {
                throw new Exception(JsonConvert.SerializeObject(result));
            }
            return(new UserInfoResult
            {
                NickName = result["nickname"].Value <string>(),
                HeadImgUrl = result["headimgurl"].Value <string>(),
                UnionID = result["unionid"].Value <string>(),
            });
        }
コード例 #15
0
ファイル: Config.cs プロジェクト: bsed/Buy
        public static String JsSign(string url)
        {
            var api1         = new Api.BaseApi($"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={AppID}&secret={AppSecret}", "GET");
            var json         = api1.CreateRequestReturnJson();
            var access_token = json["access_token"].Value <string>();
            var api2         = new Api.BaseApi($"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={access_token}&type=jsapi", "GET");
            var josn2        = api2.CreateRequestReturnJson();
            var str          = $"jsapi_ticket={josn2["ticket"].Value<string>()}&noncestr=Octopus&timestamp={JsapiTimeStamp}&url={url}";

            byte[]        StrRes = Encoding.Default.GetBytes(str);
            HashAlgorithm iSHA   = new SHA1CryptoServiceProvider();

            StrRes = iSHA.ComputeHash(StrRes);
            StringBuilder EnText = new StringBuilder();

            foreach (byte iByte in StrRes)
            {
                EnText.AppendFormat("{0:x2}", iByte);
            }
            return(EnText.ToString());
        }
コード例 #16
0
        public AccessTokenResult RefreshAccessTokenSns(string refreshToken)
        {
            var p = new Dictionary <string, string>();

            p.Add("appid", AppID);
            p.Add("grant_type", "refresh_token");
            p.Add("refresh_token", refreshToken);
            var result = new Api.BaseApi($"https://api.weixin.qq.com/sns/oauth2/refresh_token{p.ToParam("?")}", "GET").CreateRequestReturnJson();

            if (result["errcode"] != null)
            {
                throw new Exception(JsonConvert.SerializeObject(result));
            }
            return(new AccessTokenResult
            {
                OpenID = result["openid"].Value <string>(),
                AccessToken = result["access_token"].Value <string>(),
                UnionID = result["unionid"].Value <string>(),
                RefreshToken = result["refresh_token"].Value <string>()
            });
        }
コード例 #17
0
        public GetItemListResult GetItemList(IEnumerable <ChannelUser> channelUsers,
                                             Cid2 cid,
                                             string keyword = null, int pageNo      = 1,
                                             int pageSize   = 50, SortType sortType = SortType.Default)
        {
            //{ "keyword":    字符串 否    搜索词(商品名称关键词或商品描述关键词)
            //"pageNo":    整型 否    页码
            //"pageSize": 整型 否    每页数据个数
            //"sortType":    整型 是    0:默认排序,11:佣金升序,12:佣金降序,21:价格升序,22:价格降序;销量升序,32:销量降序,41:优惠券升序,42:优惠券降序
            //"tag":    字符串 否    商品标签,待官方确认要素值
            //"cid":    整型 否    类目id }

            var p = new Dictionary <string, string>();
            var q = new
            {
                keyword  = keyword,
                pageNo   = pageNo,
                pageSize = pageSize,
                //sortType = (int)sortType,
                cid       = cid.DID,
                hasCoupon = true
            };

            p.Add("promInfoQuery", JsonConvert.SerializeObject(q));
            p.Add("userId", Token.UserID);
            var url    = GetUrl("xiaodian.cpsdata.promitem.get", p);
            var result = new Api.BaseApi(url, "POST", p).CreateRequestReturnJson();
            var model  = new GetItemListResult();

            if (result["status"]["code"].Value <string>() != "0000000")
            {
                throw new Exception($"请求有误{result["status"].Value<JToken>().ToString(Formatting.None)}");
            }
            model.Total     = result["result"]["data"]["total"].Value <int>();
            model.TotalPage = (model.Total / 50) + (model.Total % 50 > 0 ? 1 : 0);
            model.Page      = pageNo;
            foreach (JObject item in result["result"]["data"]["items"])
            {
                try
                {
                    var obj = new
                    {
                        ItemID           = item["itemId"].Value <string>(),
                        DayLeft          = item["dayLeft"].Value <int>(),
                        PictUrl          = item["pictUrl"].Value <string>(),
                        Title            = item["title"].Value <string>(),
                        ShopTitle        = item["shopTitle"].Value <string>(),
                        ExtendDesc       = item["extendDesc"].Value <string>(),
                        AfterCouponPrice = item["afterCouponPrice"].Value <decimal>(),
                        CouponStartFee   = item["couponStartFee"].Value <decimal>(),
                        CouponInfo       = item["couponInfo"].Value <string>(),
                        Promid           = item["promid"].Value <string>(),
                        BIZ30day         = item["biz30day"].Value <int>(),
                        CommissionRate   = Convert.ToDecimal(item["commissionRate"].Value <string>().Replace("%", "")),
                        CouponLeftCount  = item["couponLeftCount"].Value <int>(),
                        CouponTotalCount = item["couponTotalCount"].Value <int>(),
                        Cid = item["cid"].Value <string>()
                    };
                    if (!string.IsNullOrWhiteSpace(obj.CouponInfo))
                    {
                        foreach (var c in channelUsers)
                        {
                            var tm = new Models.Coupon
                            {
                                CreateDateTime = DateTime.Now,
                                EndDateTime    = DateTime.Now.Date.AddDays(obj.DayLeft + 1).AddSeconds(-1),
                                StartDateTime  = DateTime.Now.Date,
                                ProductID      = obj.ItemID,
                                Image          = obj.PictUrl,
                                Link           = $"http://union.mogujie.com/jump?userid={Token.UserID}&itemid={obj.ItemID}&promid={obj.Promid}&gid={c.ID}",
                                Name           = obj.Title,
                                OriginalPrice  = obj.AfterCouponPrice + obj.CouponStartFee,
                                Platform       = Enums.CouponPlatform.MoGuJie,
                                Price          = obj.AfterCouponPrice,
                                ShopName       = obj.ShopTitle,
                                Subtitle       = obj.ExtendDesc,
                                Value          = obj.CouponInfo,
                                Sales          = obj.BIZ30day,
                                CommissionRate = obj.CommissionRate,
                                Commission     = Math.Round(obj.AfterCouponPrice * obj.CommissionRate / 100, 2),
                                Total          = obj.CouponTotalCount,
                                Left           = obj.CouponLeftCount,
                                PCouponID      = obj.Promid,
                                Cid            = obj.Cid,
                                PLink          = $"http://union.mogujie.com/jump?itemid={obj.ItemID}&promid={obj.Promid}",
                                UserID         = c.UserID,
                                TypeID         = cid.TypeID,
                                ProductType    = cid.Name,
                            };
                            model.Items.Add(tm);
                        }
                    }
                }
                catch (Exception ex)
                {
                    continue;
                }
            }
            return(model);
        }