写皮皮虾分享微信看不了吃虾公签名

微信公众号如何设置签名
全部答案(共1个回答)
微信号设置注意事项。1.微信号最后事先想好,微信号也是唯一的,设置好后便不能修改。2.微信号设置尽量做到:简单,易记,容易输入。不要用特殊符号,以方便粉丝查找关...
选择包含有超级链接的文字,右击-----取消超级链接
PDF软件有两个版本,一个是read,只能用来阅读PDF文档,是免费的,还有一个Adobe Acrobat
Professional专业标准版,可以创建及编辑...
您好,注册微信公众平台非常简单,登陆https://mp./在右上角点击注册就可以。 希望对你有帮助,求好评!
答: 申请试用商品,也收到了通过审核邮件,但是已经10多天还为收到实物,无法提交报告,马上就要过期了,急
答: 慢慢弄。我最开始只会装游戏;后来中国有了网络慢慢跟朋友上聊天室聊天;后来出了OICQ(现在叫QQ),又用那东西聊;然后上联众玩在线游戏(棋牌类);后来乱七八糟逛...
答: 七十年代的计算机网络X.25 分组交换网:各国的电信部门建设运行各种专用的网络体系结构:SNA,DNAInternet 的前身ARPANET进行实验运行八十年代...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415为了宝宝的营养丰富,宝妈们有没有想吃大虾的,有的话留下微信号码_百度宝宝知道阅读(2743)
  离刚开始做微信开发到现在已经两个月了,因为被分配了另外一个任务,所以微信的开发就先放到了一遍。
  在小公司便是如此,只有自己一个人做开发,所以哪里需要就要先转到哪一块。其实想想自己也没什么太好的理由说留在这个公司,想想也就是工作比较放松点,老板人还可以,项目上也催的不紧,孩子还小家里有点事了可以随时请假回家,这次也是家里父亲和小孩都住院了请了半个月假刚过来。
  闲话不多说,先说下微信开发的博客,微信开发也算完成了一部分,因为没有完成,所以之前的『微信公众平台开发(一)---接口介绍及配置』起了个头便一直没写,目前打算是等手头这边的工作完了把大致的功能都写的差不多了再继续写。
  这次来了之后看到微信接口增加了&消息体签名及加解密&这块,于是抽了一点时间把原来的接口的消息加密模式改成安全模式。因为微信接口已经提供了加/解密的实现,所以修改起来也是极其的简单了,下面就简单说下 &验证微信签名以及对微信消息的加/解密。
  首先,在开发者首次提交验证申请时,微信服务器将发送GET请求到填写的URL上,并且带上四个参数(signature、timestamp、nonce、echostr),开发者通过对签名(即signature)的效验,来判断此条消息的真实性。
  开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
  修改我们上次创建的WeixinService.cs  
2 using System.Collections.G
3 using System.L
4 using System.W
5 using System.ServiceM
6 using System.ServiceModel.A
7 using System.ServiceModel.W
8 using System.Web.S
9 using System.Runtime.S
10 using System.IO;
11 using System.T
12 using WeiXinM
13 using WeiXinRestWCF.BLL;
15 namespace WeiXinRestWCF
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class WeixinService
/// &summary&
/// 验证微信签名
/// &/summary&
/// * 将token、timestamp、nonce三个参数进行字典序排序
/// * 将三个参数字符串拼接成一个字符串进行sha1加密
/// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
/// &returns&&/returns&
[OperationContract]
[WebGet(UriTemplate = "API?signature={signature}&timestamp={timestamp}&nonce={nonce}&echostr={echostr}", ResponseFormat = WebMessageFormat.Json)]
public Stream CheckSignature(string signature, string timestamp, string nonce, string echostr)
string outstr = string.E
if (SignatureHelper.CheckSignature(signature, timestamp, nonce))
if (!String.IsNullOrEmpty(echostr))
byte[] resultBytes = Encoding.UTF8.GetBytes(outstr);
WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
return new MemoryStream(resultBytes);
  在上面的代码中,我们添加了一个WebGet来处理微信发送过来的签名验证GET请求,在UriTemplate中我们添加传入的4个参数,注意{}内的参数字符与方法体的参数名称大小写对应。
  需要着重提示的一点就是wcf的返回结果默认是json或xml这两种格式之一,而对于微信服务器需要我们返回的结果是文本型的,所以在这里我们必须把方法体返回的结果设置为Stream类型,并在方法体内设置 &WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";将需要返回的结果字符串写进MemoryStream中,以此达到我们想到达到的目的。
  SignatureHelper.CheckSignature对应的实现:
2 using System.Collections.G
3 using System.L
4 using System.W
5 using System.IO;
6 using System.Web.S
7 using System.T
9 namespace WeiXinRestWCF.BLL
public class SignatureHelper
//检验signature判断真实性
public static bool CheckSignature(string signature, string timestamp, string nonce)
bool ischeck = false;
string[] ArrTmp = { DeveloperInfo.ServerToken, timestamp, nonce };
Array.Sort(ArrTmp);
string tmpStr = string.Join("", ArrTmp);
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr = tmpStr.ToLower();
string outstr = string.E
if (tmpStr == signature)
ischeck = true;
  这样,我们就完成了签名验证的过程。接下来我们处理来自微信用户的消息。
  当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
  (每次开发者接收用户消息的时候,微信也都会带上前面三个参数(signature、timestamp、nonce)访问开发者设置的URL,开发者依然通过对签名的效验判断此条消息的真实性。PS:特别注意同事传递的另外一个的参数:msg_signature,这个也是对加密的消息体进行解密时的一个重要参数)
  微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次
  假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
&  对于接收到的微信消息我们这样处理:
&  在WeixinService.cs中添加下面的代码以对微信服务器的POST请求作出回应:
/// &summary&
/// 接收微信传递来的消息
/// &/summary&
/// &param name="xmlMessage"&传递的消息&/param&
/// &returns&&/returns&
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "API?signature={signature}&timestamp={timestamp}&nonce={nonce}&msg_signature={msg_signature}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
//注意上面我们的UriTemplate中url参数列表内包含了msg_signature参数
public Stream ReciveTextMessge(Stream xmlMessage, string signature, string timestamp, string nonce, string msg_signature)
//此处依然需要验证消息请求来源是否为微信服务器
if (!SignatureHelper.CheckSignature(signature, timestamp, nonce))
return null;
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(DeveloperInfo.ServerToken, DeveloperInfo.EncodingAESKey, DeveloperInfo.AppId);
//我这里创建了DeveloperInfo类,其中存放着开发者相关的信息,如 public const string AppId = "*************";
int ret = 0;
double createTime = Math.Truncate(DateTime.UtcNow.Subtract(DateTime.Parse("")).TotalSeconds);
StreamReader reader = new StreamReader(xmlMessage);
//[密文]收到的消息
string incptmsg = reader.ReadToEnd();
//[明文]收到的消息
string Recive = string.E
//在对收到的用户消息进行处理之前进行解密(只在消息内容不为空的时候)
if (!string.IsNullOrEmpty(incptmsg))
ret = wxcpt.DecryptMsg(msg_signature, timestamp, nonce, incptmsg, ref Recive);//注意,此处使用的是msg_signature
ReciveHandler.LogReciveMsg(Recive);//这里记录所有收到的消息到DataBase中
//[明文]回复的消息
string Reply = ReplyHandler.GetReply(Recive);//ReplyHandler.GetReply方法会对受到的消息进行处理,并返回对应回复消息的字符串
//[密文]回复的消息
string outcpt = string.E
//在此对回复的消息体进行加密(只在消息内容不为空的时候)
if (!string.IsNullOrEmpty(Reply))
ret = wxcpt.EncryptMsg(Reply, timestamp, nonce, ref outcpt);
byte[] resultBytes = Encoding.UTF8.GetBytes(Reply);
WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";
Log("这里收到的一条POST信息,当前时间:" + DateTime.Now.ToString() + "\r\n" + "标准时间间隔秒数:" + createTime + "\r\n" + Recive + "\r\n\r\n" + "服务器返回信息为:" + Reply);
return new MemoryStream(resultBytes);
  微信消息体的加密解密代码可以参照API文档中提供的Demo,下载地址:http://mp./wiki/downloads/SampleCode.zip
  结果如下:
&  &暂时先写到这里。To be continued...原文链接:
阅读排行榜微信公众内容签名助手beta Chrome插件同类插件推荐

我要回帖

更多关于 皮皮虾分享微信看不了 的文章

 

随机推荐