您的位置首页百科问答

【.NET/C#】怎样开发个微信服务号应用

【.NET/C#】怎样开发个微信服务号应用

的有关信息介绍如下:

【.NET/C#】怎样开发个微信服务号应用

微信上企业用户可以创建自己的服务号,来宣传介绍啥的,在开发模式里可以通过脚本来与会员互动。

注册应用,这个就不解释了,企业用户才可以使用服务号了,但是菜单什么的订阅号还是可以使用的。

平台地址:https://mp.weixin.qq.com

开发文档:http://mp.weixin.qq.com/wiki/

开启开发模式后,设置服务器URL(用来部署自己的应用),Token(用于数据校验)

初次设置有个校验

public static bool Check(string signature, string timestamp, string nonce, string token = null)

{

Logger.Info(string.Format("{0}=?{1}", signature, GetSignature(timestamp, nonce, token)));

return signature == GetSignature(timestamp, nonce, token);

}

public static string GetSignature(string timestamp, string nonce, string token = null)

{

token = token ?? Config.Token;

var arr = new List { token, timestamp, nonce };

arr.Sort();

var result = arr.Aggregate("", (current, s) => current + s);

var sha1 = new SHA1CryptoServiceProvider();

return BitConverter.ToString(sha1.ComputeHash(Encoding.Default.GetBytes(result))).Replace("-", "").ToLower();

}

应用注册成功后,微信也给了我们 AppId 和 AppSecret

定义菜单,目前自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。请注意,创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。

文档地址:http://mp.weixin.qq.com/wiki/index.php?title=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3

目前自定义菜单接口可实现两种类型按钮,

click:用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;

view:用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,建议与网页授权获取用户基本信息接口结合,获得用户的登入个人信息。

这里用到access_token

public static string GetAccessToken()

{

var key = Cache.Get("access_token")?? InitAccessToken();

return key+"";

}

public static string InitAccessToken()

{

var url = string.Format(Config.UrlForGetAccessToken, Config.AppId, Config.AppSecret);

var result = new ReadUrlParser(url).HttpContent;

Logger.Info(result);

var key = "";

var jss= new JavaScriptSerializer();

if(result.Contains("access_token"))

{

var rep = jss.Deserialize(result);

key = rep.access_token;

Cache.Set("access_token",key,rep.expires_in);

}else

{

var rep = jss.Deserialize(result);

Logger.Error(rep.errcode+rep.errmsg);

key ="";

}

return key;

}

菜单定义后用json格式Post到它的API接口就可以了。

MenuItem

[DataContract]

public class MenuItem

{

[DataMember(Name = "key")]

public string key { get; set; }

[DataMember(Name = "url")]

public string url { get; set; }

[DataMember(Name = "type")]

public string type { get; set; }

[DataMember(Name = "name")]

public string name { get; set; }

}

Button

[Serializable]

[DataContract]

public class Button:MenuItem

{

[DataMember(Name = "sub_button")]

public List