手机版

网络开发微信公众平台示例教程

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

本文举例说明了用开发微信公众平台的方法。净。分享给大家参考。具体实现方法如下:

一、说明:

公共平台信息接口为开发者提供了一种新的消息处理方法。申请成为开发者后才能使用公共平台的开发功能。在这里,您需要填写一个网址和一个令牌。这两条信息也要求你有自己的服务器(外部服务器)资源,其中Token可以由开发者随意填写,URL是接口配置信息的链接地址。在本文中,我使用的方式是创建一个简单的网站,在一个页面的后台程序中配置相关的界面信息,然后发布到外部网络服务器,最后可以访问这个页面的链接地址就是这里应该填写的URL。

二、接口配置流程:

1.网址访问-检查签名:

复制代码如下:const字符串Token=' aka//定义一个不能修改的局部变量。这里定义的变量应该与接口配置信息中填写的令牌一致。受保护的void page _ load(对象发送方,event args e){ string post str=' ';valid();//验证签名。当填写的信息提交后,页面提示“您已成功成为公共平台开发者,可以使用公共平台的开发功能”,那么您需要注释掉这种验证方式,才能使以下消息回复正常工作if(request . httpmethod . to lower()=' POST ')//当普通微信用户向公共账号发送消息时,微信服务器会将消息发布到if (string。IsNullOrEmpty(postStr)=false){//WriteLog(postStr,Server);//包含在日记ResponseMsg(postStr)中;} } } private void Valid(){ string echoStr=Request。QueryString['echoStr']。ToString();if (CheckSignature()) { if(!字符串。IsNullOrEmpty(echoStr)){ Response。write(echoStr);回应。end();} }}

复制代码如下:///summary///Verify微信签名///Summary///Returns/Returns私有bool check signature(){ string signature=request . query string[' signature ']。tostring();字符串时间戳=请求。QueryString['timestamp']。ToString();字符串随机数=请求。QueryString['nonce']。ToString();string[] ArrTmp={ Token,时间戳,nonce };数组。sort(ArrTMp);//字典排序字符串tmpstr=string。join(',' arrtmp);tmpStr=FormsAuthentication。hashpasswordsforstoringconfigfile(tmpStr,' SHA1 ');//sha1加密字符串tmpStr=tmpStr。toLower();//将字符串的字母部分转换为小写,不要处理非字母字符。//WriteLog(tmpStr,Server);//登录if (tmpStr==signature)//开发者获取的加密字符串可以与签名进行比对,识别请求来源于微信。开发人员通过验证签名来验证请求。如果确认GET请求来自微信服务器,请原样返回echostr参数内容,访问才会生效,否则访问会失败{返回true}否则返回false}

///summary////获取post////summary///returns/returns私有字符串postinput(){ streams=system }返回的数据。web . httpcontext . current . request . inputstream;字节[] b=新字节[s . Length];s.Read(b,0,(int)s . Length);返回编码。UTF8 . GetString(b);}

///summary////返回微信信息结果/////summary//param name=' weixin XML '/param private void response msg(字符串weixin XML){ try { xmldocument doc=new xmldocument();医生。load XMl(WeixinXMl);//读取XML字符串XML element root element=doc . document element;

XmlNode MsgType=rootElement。select single node(' MSgtype ');//获取字符串中的消息类型

字符串resxml=if (MsgType .InnerText=='text')//如果消息类型为文本消息{ var model=new { Tousername=RootElement .选择单个节点(“ToUserName”).内部文本,来自用户名=根元素.选择单个节点("从用户名")。内部文本,创建时间=根元素.选择单个节点("创建时间")。InnerText,MsgType=MsgType .内部文本,内容=根元素.选择单个节点("内容")。InnerText,MsgId=rootElement .选择单个节点(' MsgId ').内部文本};resxml='xmlToUserName![CDATA['型号.来自用户名']]/Tousername来自用户名![CDATA['型号用户名称']]/来自usernamecreatetime ' ConvertDateTimeInt(DateTime .now)'/create time ';if(!字符串IsNullOrEmpty(模型内容))//如果接收到消息{如果(模型。内容。包含('你好)||模型。内容。包含('好)||模型。内容。包含(' hi') ||模型。内容。包含(“你好”)//你好{ resxml='MsgType![CData[文本]]/MsgTypeContent![CDATA[你好,有事请留言,偶会及时回复你的]/ContentFuncFlag0/FuncFlag/XML ';}

}

else/没有接收到消息{ resxml='MsgType![CData[文本]]/MsgTypeContent![CDATA[亲,感谢您对我的关注,有事请留言]/ContentFuncFlag0/FuncFlag/XML ';}

回应write(resxml);} if (MsgType .InnerText=='image')//如果消息类型为图片消息{ var model=new { Tousername=RootElement .选择单个节点(“ToUserName”).内部文本,来自用户名=根元素.选择单个节点("从用户名")。内部文本,创建时间=根元素.选择单个节点("创建时间")。InnerText,MsgType=MsgType .InnerText,PicUrl=rootElement .选择单个节点(“PicUrl”).InnerText,MsgId=rootElement .选择单个节点(' MsgId ').内部文本};resxml='xmlToUserName![CDATA['型号.来自用户名']]/Tousername来自用户名![CDATA['型号用户名称']]/来自usernamecreatetime ' ConvertDateTimeInt(DateTime .Now) '/CreateTimeMsgType![CDATA[新闻]]/msgttypearticlecount 1/articlecounterarticlestitle![CDATA[欢迎您的光临!]]/标题描述![CDATA[非常感谢您的关注!]]/DescriptionPicUrl![CDATA[http://.jpg]]/picurlr![CData[http://www .百度。com/]/URl/item/articles Funcflag 0/Funcflag/XML ';回应write(resxml);} else//如果是其余的消息类型{ var model=new { Tousername=RootElement .选择单个节点(“ToUserName”).内部文本,来自用户名=根元素.选择单个节点("从用户名")。内部文本,创建时间=根元素.选择单个节点("创建时间")。InnerText,};resxml='xmlToUserName![CDATA['型号.来自用户名']]/Tousername来自用户名![CDATA['型号用户名称']]/来自usernamecreatetime ' ConvertDateTimeInt(DateTime .Now) '/CreateTimeMsgType![CData[文本]]/MsgTypeContent![CDATA[亲,感谢您对我的关注,有事请留言,我会及时回复你的哦]/ContentFuncFlag0/FuncFlag/XML ';回应write(resxml);} } catch(Exception ex){ throw ex;}回应end();

}///摘要///日期时间转换成unixtime////summary///param name=' time '/param////返回/returnsprivate int ConvertDateTimeInt(System .日期时间){系统。日期时间开始时间=时区。新系统DateTime(1970,1,1));返回(int)时间-开始时间)。TotalSeconds}///摘要///写日志(用于跟踪),可以将想打印出的内容计入一个文本文件里面,便于测试////summary public static void write log(string STrmemo,HttpServerRuthy server){ string filename=server .MapPath('/logs/log。txt’);//在网站项目中建立一个文件夹命名日志(然后在文件夹中随便建立一个网页面文件,避免网站在发布到服务器之后看不到预定文件)if(!目录。存在(服务器. MapPath('//log//'))目录创建目录('//log//');StreamWriter sr=null请尝试{ if(!文件。存在(文件名)){ sr=文件创建文本(文件名);} else { sr=文件.附录文本(文件名);} Sr . WriteLine(Strmemo);} catch { }终于{ if (sr!=null)Sr . Close();}}

希望本文所述对大家的。网程序设计有所帮助。

版权声明:网络开发微信公众平台示例教程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。