/// <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); } } }
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; } }
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); }
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>()); }
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); }
/// <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>()); } }
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); }
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); }
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>()); } }
/// <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>(), }); }
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()); }
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); }
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); }
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>(), }); }
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×tamp={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()); }
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>() }); }
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); }