返回
快速导航关闭
当前搜索
网站分类
栏目推荐
实用工具
热门标签
子分类:
公众号运营 >公众号 » 正文

微信公众号开发者模式的申请与设置,企业微信开发者,C# 关于调用微信接口的代码

公众号 更新时间: 发布时间: 公众号归档 最新发布 网站地图

之前公司下达了开发微信只一块的任务,然后我就去网上取了一番经,可是感觉对于我这种微信开发的新手来说,所需要的东西太多,太凌乱了,然后整个人就懵逼了。

  费了很长时间才将微信接口调用完成。所以呢,我整理了一下,调用微信接口前需要准备的内容。

  1.微信公众平台的appid

  2.微信公众平台的secret

  3..获取tokenid

  4.获取ticket

  5.生成签名的随机串

  6.生成签名的时间戳

  7.生成签名

================================================================================

1.微信公众平台的appid

2.微信公众平台的secret

这两者需要登录到申请的微信公众平台中去获取,建议写在配置文件中

================================================================================

3.获取tokenid



public static string GetWxTokenId()
        {            string token = "";            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret);            //向上面的地址发起httpget请求            //这里是封装的一个http请求的类            string content = HttpHelper.HttpGet(url);            if (!string.IsNullOrEmpty(content))
            {                var obj = JsonConvert.DeserializeObject<TokenResult>(content);                if (!obj.errcode.HasValue)
                {
                    token = obj.access_token;
                }
            }            return token;
        }


  这里是获取微信tokenid的返回对象



private class TokenResult
        {            public string access_token { get; set; }            public string expires_in { get; set; }            public int? errcode { get; set; }            public string errmsg { get; set; }
        }


注意:在每个微信公众号中获取tokenid的次数是有限的,所以应该将获取到的tokenid储存起来,以便后续使用。我使用的方法是将tokenid存储在数据库中,所以在每次使用之前都要做判断处理

/*tokenid保存方式说明:
*可在数据库中创建表:SysConfig(用户存储项目中的配置数据)
* 字段:
* ConfigKey:用于查询该条数据的key,做为主键
* ConfigValue:存储数据的值
* TypeName:该条配置数据的名称
* Description:说明
* CreateTime:创建时间
* LastModifyTime:上次修改的时间
* AllowEdit:是否可编辑
* LastValue:上一次的值
* tokenid的有效时间是两个小时=7200秒,每重新获取一次就更新一次LastModifyTime的值,将LastModifyTime和当前时间进行比对,如果小于7200秒则可以不用再次获取,反之则需要再次从微信获取。
*/

===================================================================================================

4.获取ticket。需要上一步中获取到的tokenid。



 /// <summary> /// 获取ticket /// </summary> /// <param name="token">获取到的tokenid</param> /// <returns>strticket</returns> public static string GetTicket(string token)
  {            string getticketurl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token);            string content = HttpHelper.HttpGet(getticketurl);
            JsApiTicket obj = JsonConvert.DeserializeObject<JsApiTicket>(content);            return obj.ticket;
  }


=====================================================================================================

5.生成签名的随机串


//生成签名的随机串string noncestr = Guid.NewGuid().ToString().Replace("-", "");

====================================================================================================

6.生成签名的时间戳


TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();

====================================================================================================

7.生成签名



string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url));/// <summary>        /// SDK生成签名        /// 注意:需要引用System.Security.dll        /// </summary>        /// <param name="str"></param>        /// <returns>str签名</returns>        public static string MakeSha1Sign(string str)
        {            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();
        }


====================================================================================================

最后可以将这些步骤封装在一个方法中



/// <summary>        /// 获取调用微信接口用的SDKConfig        /// </summary>        /// <param name="url"></param>        /// <returns>SDKConfig整个对象</returns>        public static JsApiConfig GetJsSdkConfig(string url)
        {            //获取tokenid            string access_token = GetWxTokenId();            //获取ticket            string jsapi_ticket = GetTicket(access_token);            //生成签名的随机串            string noncestr = Guid.NewGuid().ToString().Replace("-", "");            //生成签名的时间戳
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);            string timestamp = Convert.ToInt64(ts.TotalSeconds).ToString();            //签名            string signature = MakeSha1Sign(string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}", jsapi_ticket, noncestr, timestamp, url));

            JsApiConfig config = new JsApiConfig()
            {
                appId = appid,
                debug = false,
                nonceStr = noncestr,
                timestamp = timestamp,
                signature = signature,
                ticket = jsapi_ticket,                //需要使用的JS接口列表
                jsApiList = new string[] { "chooseImage", "previewImage", "uploadImage", "downloadImage" }

            };            return config;


        }


===================================================================================================

页面上面调用我们上面配置好的内容



 $.post('/WapCardInfo/GetSDKConfig', { url: location.href.split('#')[0] }, function (data) {    var configObj = data;

            wx.config({                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。                appId: configObj.appId, // 必填,公众号的唯一标识                timestamp: configObj.timestamp, // 必填,生成签名的时间戳                nonceStr: configObj.nonceStr, // 必填,生成签名的随机串                signature: configObj.signature, // 必填,签名,见附录1                jsApiList: [                                'checkJsApi',                                'onMenuShareTimeline',                                'onMenuShareAppMessage',                                'onMenuShareQQ',                                'onMenuShareWeibo',                                'onMenuShareQZone'
                ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
            });
});


===================================================================================================

请求的后台代码



[HttpPost]        public JsonResult GetSDKConfig(string url)
        {            try
            {    //这里就是调用上面封装的方法
                JsSdkApi.jsapiConfig model = JsSdkApi.GetJsSdkConfig(url);                return Json(model);
            }            catch (Exception ex)
            {
                LogHelper.Error("获取wxconfig出现异常:" + ex.Message.Replace("'", "\""));                return Json(new JsSdkApi.jsapiConfig());
            }
        }


至于需要的接口就去微信公众平台开发者文档中去查看啦。

转载请注明:文章转载自 http://ywclxp.com/
本文地址:http://ywclxp.com/gzh/2432.html
考高分网交流群

扫一扫加入QQ交流群

和更多志同道合朋友一起交流,分享干货资料!
公众号运营客服

扫一扫加客服微信

有疑问请咨询公众号运营微信号,在线为您解答!
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 Copyright Your WebSite.Some Rights Reserved. Powered · 创奇学院

ICP备案号:浙ICP备14032708号