2014-12-02 00:51:19 cuoban 阅读数 6998
  • 微信公众平台深度开发v2.0第6季——微信WEB开发、手机...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    12237 人正在学习 去看看 翟东平

一、序言

  一直在想第一次写博客,应该写点什么好?正好最近在研究微信公众平台开发,索性就记录下,分享下自己的心得,也分享下本人简单模仿asp.net运行机制所写的通用的微信公众平台开发.Net(c#)框架吧。由于本人知识有限、文字组织能力有限,如有错误或不足,请多多指教!

二、微信公众平台.Net(C#)框架介绍

 

  运行流程:WeiXinRequestHandler.ashx接收微信服务器post请求,创建WeiXinApplication实例,构造函数中设置WeiContext(WeiXinRequest,WeiXinResponse)请求上下文属性,执行WeiXinApplication的GetResponseXml()方法,使用WeiXinHandlerFactory工厂类动态加载程序集,遍历程序集里的Type集合,反射获取控制器中的WeiXinMsgType属性值判断是否与请求消息上下文WeiXinRequest的WeiXinMsgType属性值一致创建相对应的消息处理控制器实例,并返回这个实例,赋值给WeiXinApplication中IWeiXinHandler属性值,调用ProcessWeiXin(WeiXinContext context)方法,执行完毕后,返回WeiXinResponse对象中的响应消息。

三、微信公众平台注册/接入相关事宜

1、注册:

  填写基本信息,激活邮箱,登记信息......公众号信息。值得一提的是:目前个人只允许注册订阅号,公司单位才能注册服务号,服务号可以实现自定义菜单;公众号名称一经确认就无法修改!

2、接入:(必须条件:拥有自己的公网可访问的服务器)

   ①、成为开发者:在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,根据官方文档填写相关接口配置信息并提交。

   ②、验证url有效性:开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

 

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

 

  开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

 

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

验证工具类:UtilityHelper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
     #region 检查加密签名是否一致 - public static bool CheckSignature(string signature, string timestamp, string nonce)
  
        /// <summary>
        /// 检查加密签名是否一致
        /// </summary>
        /// <param name="signature">微信加密签名</param>
        /// <param name="timestamp">时间戳</param>
        /// <param name="nonce">随机数</param>
        /// <returns></returns>
        public static bool CheckSignature(string signature, string timestamp, string nonce)
        {
            List<string> stringList = new List<string> {Token, timestamp, nonce};
            // 字典排序
            stringList.Sort();
            return Sha1Encrypt(string.Join("", stringList)) == signature;
        }
  
        #endregion
  
        #region 对字符串SHA1加密 - public static string Sha1Encrypt(string targetString)
  
        /// <summary>
        /// 对字符串SHA1加密
        /// </summary>
        /// <param name="targetString">源字符串</param>
        /// <returns>加密后的十六进制字符串</returns>
        private static string Sha1Encrypt(string targetString)
        {
            byte[] byteArray = Encoding.Default.GetBytes(targetString);
            HashAlgorithm hashAlgorithm = new SHA1CryptoServiceProvider();
            byteArray = hashAlgorithm.ComputeHash(byteArray);
            StringBuilder stringBuilder = new StringBuilder();
            foreach (byte item in byteArray)
            {
                stringBuilder.AppendFormat("{0:x2}", item);
            }
            return stringBuilder.ToString();
        }
  
        #endregion
  
        #region 根据加密类型对字符串SHA1加密 - public static string Sha1Encrypt(string targetString, string encryptType)
  
        /// <summary>
        /// 根据加密类型对字符串SHA1加密
        /// </summary>
        /// <param name="targetString">源字符串</param>
        /// <param name="encryptType">加密类型:MD5/SHA1</param>
        /// <returns>加密后的字符串</returns>
        private static string Sha1Encrypt(string targetString, string encryptType)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(targetString, encryptType);
        }
  
        #endregion

  

四、微信公众平台运行原理介绍

 

五、结束

  字穷了...~~~!附源码吧。看web.config,打开Test.html进行测试。添加自己的消息控制器必须继承WeiXinHandlerType,程序集生成插件目录bin/WeiXinPlugins。

源码下载:WeiXin.Framework

广交四海豪杰:Q390915549,T15002122201
2013-08-12 15:06:47 qp23401 阅读数 1871
  • 微信公众平台深度开发v2.0第6季——微信WEB开发、手机...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    12237 人正在学习 去看看 翟东平


这是一个基于java的简易微信开发框架,因本人水平有限,大神勿喷,多多指点。

下载地址:http://download.csdn.net/detail/qp23401/5914683

实体类

Package:net.qp234.weixin.entities

消息推送实体类

ReqBaseMessage  推送消息基类

    参数                                          

                                                                                                   描述                                                                                                                                                

ToUserName

开发者微信号

FromUserName

发送方帐号(一个OpenID

CreateTime

消息创建时间(整型)

MsgType

text/event/image/location/link

MsgId

消息id64位整型

每个推送消息都包括以上5个属性

 

ReqTextMessage 继承自 ReqBaseMessage  文本消息

   参数                                        

                                                                          描述                                                                                                                                                                           

Content

文本消息内容

 

ReqImageMessage 继承自 ReqBaseMessage  图片消息

          参数                            

                                                                 描述                                                                                                                                                                                        

PicUrl

图片链接

 

ReqLocationMessage继承自ReqBaseMessage  地理位置消息

      参数                                     

                                                                                 描述                                                                                                                                                                  

Location_X

地理位置纬度

Location_Y

地理位置经度

Scale

地图缩放大小

Label

地理位置信息

 

ReqLinkMessage 继承自ReqBaseMessage 链接消息

         参数                                           

                                                                                    描述                                                                                                                                                    

Title

消息标题

Description

消息描述

Url

消息链接

ReqEventMessage 继承自ReqBaseMessage  事件消息

    参数                                    

                                                                  描述                                                                                                                                                                                 

Event

事件类型,subscribe(订阅)unsubscribe(取消订阅)CLICK(自定义菜单点击事件)

EventKey

事件KEY值,与自定义菜单接口中KEY值对应

Event消息略有不同它没有MsgId属性

 

ReqVoiceMessage继承自 ReqBaseMessage  语音消息

          参数                        

                                                                             描述                                                                                                                                                                            

mediaId

format

 

ReqVideoMessage继承自 ReqBaseMessage  视频消息

                       参数                               

                                                                   描 述                                                                                                                                                                 

mediaId

thumbMediaId

 

消息回复实体类

ResBaseMessage  消息回复基类

             参数                                  

                                                                   描述                                                                                                                                                                         

ToUserName

接收方帐号(收到的OpenID

FromUserName

开发者微信号

CreateTime

消息创建时间

MsgType

text/music/news

FuncFlag

星标消息

 

ResTextMessage  继承自ResBaseMessage  回复文本消息

                      参数                        

                                                         描述                                                                                                                                                                                    

Content

消息内容

 

ResNewsMessage 继承自ResBaseMessage  回复图文消息

                      参数                      

                                                                                                    描述                                                                                                                                             

ArticleCount

图文消息个数,限制为10条以内

Articles

多条图文消息信息,默认第一个item为大图

Title

图文消息标题

Description

图文消息描述

PicUrl

图片链接,支持JPGPNG格式,较好的效果为大图640*320,小图80*80

Url

点击图文消息跳转链接

 

ResMusicMessage继承自ResBaseMessage  回复音乐消息

                       参数                          

                                                              描述                                                                                                                                                                              

MusicUrl

音乐链接

HQMusicUrl

高质量音乐链接,WIFI环境优先使用该链接播放音乐






2019-06-11 10:05:29 chinahuyong 阅读数 197
  • 微信公众平台深度开发v2.0第6季——微信WEB开发、手机...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    12237 人正在学习 去看看 翟东平

1、前言

通过前面一系列文章的学习,我们对微信公众号开发已经有了一个比较深入和全面的了解。

微信公众号开发为企业解决那些问题呢?

我们经常看到微信公众号定制开发、微信公众平台定制开发,都不知道这些能给企业带来什么,让很多人产生疑惑,那么下面就来给你解答。

我们都知道微信公众号是微信推出的一款提资讯和服务的平台应用,但却需要通过微信公众号开发技术来真正实现平台化。那么,作为想通过移动互联网来发展业务,或者需要改变目前经营状况,解决当前发展瓶颈问题的企业、商家或个体商户来说,微信公众号是一个很好的实现移动互联网化的着陆点,而微信公众号开发是帮助你实现更多功能应用的基础。
微信 不仅仅是聊天工具

2、企业微信公众号开发能带来哪些好处?

2.1、为什么你要选择微信公众号来发展业务?

微信,是目前使用频率最高,用户数最大的社交应用,朋友圈曝光效果好,传播速度快。通过微信发展业务,最早被微商普遍采用,前几年微商的火爆发展,足够证明微信是一个很好的发展业务的平台。

传统的微信营销方式,只是简单的通过朋友圈发布信息来展示。但自从微信公众号推出以后,多了更多的营销方式,效果更好,微信一键分享功能让公众号内容可以无限的传播下去。1个人有一个朋友圈,N个人有N个朋友圈,只要运营方式得当,可以覆盖到更多的朋友圈,实现最大效果的曝光和传播。

2.2、为什么要对你的微信公众号进行定制开发?

微信公众号自带的功能有限,无法真正实现平台化需求,仅可用作信息的展示和发布。当你选择微信公众号时,你可能考虑到的是它离目标用户最近,但是你仍需解决如何吸引目标用户,如何向目标用户直接销售产品和提供服务,如何聚拢用户等等一系列的问题。而微信公众号开发技术,不只是帮你实现功能应用,还能让传播推广、营销、管理等等工作便捷化,甚至超过传统的思维方式,给你意想不到的效果。

  1. 实现平台化
    实现网站才有的功能,像淘宝一样,可以展示,搜索,买卖商品。
  2. 拓展渠道
    “一键分享”是微信最便捷的操作,通过开发后的功能和模式,可以让你的用户成为你的销售和推广渠道,试想一下人人营销的概念和营销效果。
  3. 聚拢用户
    发布一篇文章很难聚拢用户,但是实现平台化以后,你的产品和服务,以及你的营销方式,都能帮助你聚拢用户,让他们对你的平台产生依赖和信任。也可以与线下实体门店营销相结合,会起到更好的作用。
  4. 完成营销目标
    营销,不只是产品销售,还包括品牌推广。朋友圈曝光和转发是一种途径,但是平台化的公众号能够实现和完成更好的营销目标。甚至可以做到不花广告费或极低的广告费用,来实现营销目的。
  5. 管理便捷化
    开发后的公众号,可以成为一个工具,快捷的管理你的产品,你的代理商和你的用户。淘宝京东类电商平台能做的,开发后的微信公众号也可以。

2.3、微信公众号定制开发技术如何帮你解决问题?

在这个几乎人手一部手机的时代,人们上网都是依靠手机,衣食住行等我们生活的方方面面,都可以使用手机联网来完成购买和获取服务。比如手机支付方式——微信支付,已经成了连街边小贩都会用的交易方式。这也使得微信公众号能够成为一个销售闭环,来完成你的销售目标。但是,微信公众号开发,以当前移动互联网发展趋势为根本,帮你实现长远发展。

  • 梳理你的需求:你的行业或经营业务怎么做才能实现互联网化?

搭建一个网站,还是在京东、淘宝上注册个账号?如果还局限在这种思维,那就真的只能说你不懂互联网思维逻辑。传统方式,如同大海捞针,用户找不到你,你也找不到用户。这个时代,你的用户都聚集在手机端,打通与手机端的联系,能够更快的传播,销售产品和提供服务。所以,微信公众号是你最好的选择。经过开发过的微信公众号是可以成为你专属的平台,在这里完全自由的与用户交互,展示和传播产品和品牌信息,销售产品,提供服务。

  • 解答你的困惑:如何利用互联网发展业务和销售产品?

当你身边的朋友都通过手机购买产品和预约服务;当你的顾客慢慢都选择通过手机购买产品;当结账的时候,你的顾客问你是否可以用微信支付;你的生活,你的经营方式,都慢慢的被移动互联网影响和改变着。
面对这样的影响你该怎么选择?又该如何利用互联网去发展业务和销售产品?
答案是:微信?不,是微信公众号,并通过微信公众号开发技术来帮你实现更多功能。既然你的顾客都依赖移动互联网,那么就顺着他们的消费习惯是发展业务。不管你是企业、商家还是个体商户,微信公众号能帮你实现现有业务的互联网化,也能帮你拓展业务渠道,聚拢客户资源,销售产品和提供服务。除此以外,经过开发的微信公众号,还能拥有营销功能,比如:
砍价——能帮你快速增加粉丝
拼团——能帮你低价做促销
微信公众号开发技术,还可以实现更多个性定制化功能,加强用户体验,管理好你的商品。

  • 解决你的问题:帮你改善经营状况,解决发展瓶颈

对于需要改变现有经营状况,解决当前发展瓶颈的你来说,选择移动互联网,选择微信公众号,是当前最行之有效的方法。
打通线上线下渠道,实体店与微信公众号一起为你的顾客服务;通过微信公众号聚拢用户,扩展渠道资源,实现更好的业务发展;传统管理方式落后,微信公众号让管理便捷化,你的代理商,你的顾客可以同步管理;维护老客户,发展新客户,通过朋友圈实现更大范围的曝光和推广;微信公众号可以用极低的广告费用,实现比传统方式很好的推广效果。。。。。等等。

3、基于RDIFramework.NET框架整合微信应用

RDIFramework.NET敏捷开发框架,基于.NET的快速信息化系统开发、整合框架,为企业或个人快速开发系统提供了强大的支持,开发人员不需要开发系统的基础功能和公共模块,框架自身提供了强大的函数库和开发包,开发人员只需集中精力专注于业务部分的开发,因此大大提高开发效率和节约开发成本。框架采用目前最主流的C#语言开发完成,支持多种数据库类型,支持BS、CS。使用RDIFramework.NET敏捷开发框架能提高管理类软件系统的整体质量、提高模块与模块之间的兼容性、提高代码的重复利用率,使软件系统架构更加合理、质量更加过硬,使得劳动成果最大程度上重复利用。框架基础模块包括:强大灵活的权限控制组件,模块分配与管理组件,灵活易用的工作流组件、数据字典管理组件,丰富的报表统计组件、即时通讯(IM)组件、自动升级组件,各种常用的商业控件,强大的基于本框架的代码生成器,开发实例、丰富的基础类库、开发辅助工具等各基础常用功能组件。框架提供的大量通用插件,完成功能的开发就像搭积木一样,只需要把各种组件进行组合拼装,拼装好了系统的开发也就完成了。应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、医院管理系统、快递管理系统、教务管理系统等各类管理软件。由框架开发团队的原版人马直接提供技术支持,为您顺利完成开发工作保驾护航。不管您是零基础还是专业开发人员,都能轻松驾驭这套开发框架。

3.1 公众号管理

为了方便对微信的管理,我们集成了对微信公众号的管理。支持多个多种类型公众号的统一管理,我们把公众号类型进行了归类,常用的有:个人订阅号、政府媒体订阅号、企业号、开发测试号,公众号管理主界面如下图所示。特别说明的是,这儿集成了多种类型公众号的统一管理,但当前默认操作的公众号只能是一个,设置某一公众号为默认公众号后,其他的公众号会自动取消默认。
公众号管理-主界面
在上图中我们可以创建、修改一个公众号,设置某一公众号为默认公众号,删除公众号以及更新公众号的Token。
具体详情可以参考:微信公众号开发C#系列-9、多公众号集中管理

3.2 用户管理-用户组

我们知道QQ好友可以分组,其实微信公众号的关注者(粉丝)也可以分组,分组后便于管理。用户组的管理可以实现新增、修改、删除用户分组、以及一键同步所有分组,用户组管理如下图所示。在用户组管理主界面上还显示了对应分组下的粉丝数量,新关注的用户默认会自动分到“未分组”分组中,我们可以根据实现需要建立我们自己的分组并把用户移动到对应的分组中,以方便管理与业务应用的处理。
用户管理-用户组

3.3 用户管理-用户列表

眼前时下流行的经济有个叫粉丝经济,粉丝带动收益。一个好运营良好的公众号肯定会有一大批的粉丝团,如何挖掘粉丝来产生效益,是微信营销的关键。微信公众号后台本身提供了粉丝(用户)与用户分组的管理,但这些都是存放在微信的服务器,我们不好拿来分析应用。因为我们需要把我们的粉丝放在我们自己的库中,以方便做各种应用分析。微信公众号提供了相应的接口方便我们调用,可方便的把用户同步到本地,这样我们可以自己为用户定义更多的信息,以及与本地的业务更好的对接起来。

微信用户列表管理主界面如下图所示,左侧为用户的分组列表,右侧展示了对应分组下的用户。通过用户列表主界面上的功能按钮我们可以修改对应用户的备注信息、手动同步对应用户、一键同步所有用户以及移动用户分组。
用户管理-用户列表

3.4 自动回复(消息管理)###

当微信用户向公众账号发消息时,微信服务器会先接收到用户发送的消息,然后将用户消息按照指定的XML格式组装好数据,最后POST消息的XML数据包到开发者填写的URL上。
接收消息种类
消息回复目前支持回复文本、图片、图文、语音、视频、音乐,每一种类型的消息都有特定的XML数据格式。针对上面提到的7种消息类型我们框架都进行了处理,消息回复设置主界面如下图所示。
自动回复-主界面
文本回复主界面参考如下:
自动回复-文本回复
添加回复如下图所示:
自动回复-文本回复-修改
其他类型的回复设置类似。

3.5 菜单设置

自定义菜单能够帮助公众号丰富界面,让用户更好更快地理解公众号的功能。菜单分为默认菜单与个性化菜单。个性化菜单接口是为了帮助公众号实现灵活的业务运营,开发者可以通过该接口,让公众号的不同用户群体看到不一样的自定义菜单,该接口开放给已认证订阅号和已认证服务号。

对于具体的微信菜单设置相关可以参考微信公众号开发C#系列-8、自定义菜单及菜单响应事件的处理

菜单设置主界面如下图所示,在菜单设置主界面上我们可以获取我们设置好的公众号菜单,也可以修改与删除菜单。
菜单管理-主界面
菜单管理-参数设置

4、微信开发系列文章列表

5、参考文章

微信公众平台技术文档-官方

Senparc.Weixin SDK + 官网示例源代码

RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录

RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍

RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

RDIFramework.NET代码生成器全新V3.5版本发布-重大升级


一路走来数个年头,感谢RDIFramework.NET框架的支持者与使用者,大家可以通过下面的地址了解详情。

RDIFramework.NET官方网站:http://www.rdiframework.net/

RDIFramework.NET官方博客:http://blog.rdiframework.net/

同时需要说明的,以后的所有技术文章以官方网站为准,欢迎大家收藏!

RDIFramework.NET框架由海南国思软件科技有限公司专业团队长期打造、一直在更新、一直在升级,请放心使用!

欢迎关注RDIFramework.net框架官方公众微信(微信号:guosisoft),及时了解最新动态。

扫描二维码立即关注

微信号:guosisoft

2015-11-29 11:02:52 u013668719 阅读数 2936
  • 微信公众平台深度开发v2.0第6季——微信WEB开发、手机...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    12237 人正在学习 去看看 翟东平
    Wechat Framework(微信开发框架,简称WTF)能帮助开发者快速搭建微信公众号开发环境,开发者在自己的微信公众号开发项目中引入本框架后,仅需简单的几步配置即可获得消息接收、解析、回复等功能,同时还有菜单创建,二维码请求等功能供开发者调用。
 
    WTF使得开发者能够集中精力关注自身业务能力的开发,省去对Http、Xml、Json等大量基础能力模块的理解和构建,节省大量人力和时间。引入WTF使得微信公众号开发变成一件快速而简单的工作,尤其适合个人公众号,以及非软件研发专业公司的营销公众号的快速开发。
 
    仅需四步,就能完成微信公众号的接入、鉴权、菜单创建、消息接收与回复等核心功能。
 
    第一步:将WTF的4个jar包拷贝到项目的lib目录下;
    第二步:在项目的web.xml文件中增加spring上下文配置;
    第三步:在项目的classpath目录下加入配置文件“wechat.properties”,配置app_id、app_secret和token;
    第四步:实现WTF框架中的com.halo.wechat.mvc.commands.Command接口。
 

    关于WTF的详细配置与功能,请访问“Wechat Framework开发者指南”:http://115.159.67.204/Tutorial/tutorial.htm

    WTF下载:http://115.159.67.204/Tutorial/Download/wtf-1.0.rar

    依赖包下载:http://115.159.67.204/Tutorial/Download/wtf-dependencies.rar

    开源项目地址:https://github.com/junior9919/WTF

    欢迎扫码关注我的微信公众号获得更多资讯:

junior9919


如果WTF能帮到您,让您用的倍儿爽,请猛烈的打赏我!


2014-11-17 14:02:51 u011127019 阅读数 1473
  • 微信公众平台深度开发v2.0第6季——微信WEB开发、手机...

    “微信公众平台深度开发Java版 v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java版”陆续上线。 详情 qq2326321088

    12237 人正在学习 去看看 翟东平

本文实例讲述了.net开发微信公众平台的方法。分享给大家供大家参考。具体实现方法如下:

一、说明:

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

二、接口配置过程:

1.网址接入-校验签名:

const string Token = "aka";//定义一个局部变量不可以被修改,这里定义的变量要与接口配置信息中填写的Token一致
protected void Page_Load(object sender, EventArgs e)
{
        string postStr = "";
        Valid();//校验签名,当填入的信息提交之后页面有提示“你已成功成为公众平台开发者,可以使用公众平台的开发功能”这个的时候,接下来你就需要注释掉这个校验的方法,使得后面的消息回复得以正常运作
        if (Request.HttpMethod.ToLower() == "post")//当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL上
        {
            postStr = PostInput();
            if (string.IsNullOrEmpty(postStr) == false)
            {
                //WriteLog(postStr,Server);//计入日记
                ResponseMsg(postStr);
            }
        }
}
private void Valid()
{
        string echoStr = Request.QueryString["echoStr"].ToString();
        if (CheckSignature())
        {
            if (!string.IsNullOrEmpty(echoStr))
            {
                Response.Write(echoStr);
                Response.End();
            }
        }
}

复制代码 代码如下:
/// <summary>
/// 验证微信签名
/// </summary>
/// <returns></returns>
private bool CheckSignature()
{
        string signature = Request.QueryString["signature"].ToString();
        string timestamp = Request.QueryString["timestamp"].ToString();
        string nonce = Request.QueryString["nonce"].ToString();
        string[] ArrTmp = { Token, timestamp, nonce };
        Array.Sort(ArrTmp);//字典排序
        string tmpStr = string.Join("", ArrTmp);
        tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//对该字符串进行sha1加密
        tmpStr = tmpStr.ToLower();//对字符串中的字母部分进行小写转换,非字母字符不作处理
        //WriteLog(tmpStr, Server);//计入日志
        if (tmpStr == signature)//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败
        {
            return true;
        }
        else
            return false;
}
/// <summary>
/// 获取post返回来的数据
/// </summary>
/// <returns></returns>
private string PostInput()
{
        Stream s = System.Web.HttpContext.Current.Request.InputStream;
        byte[] b = new byte[s.Length];
        s.Read(b, 0, (int)s.Length);
        return Encoding.UTF8.GetString(b);
}

/// <summary>
///返回微信信息结果
/// </summary>
/// <param name="weixinXML"></param>
private void ResponseMsg(string weixinXML)
{
        try
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(weixinXML);//读取XML字符串
            XmlElement rootElement = doc.DocumentElement;

            XmlNode MsgType = rootElement.SelectSingleNode("MsgType");//获取字符串中的消息类型

            string resxml = "";
            if (MsgType.InnerText == "text")//如果消息类型为文本消息
            {
                var model = new
                {
                    ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                    FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                    CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                    MsgType = MsgType.InnerText,
                    Content = rootElement.SelectSingleNode("Content").InnerText,
                    MsgId = rootElement.SelectSingleNode("MsgId").InnerText
                };
                resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime>";
                if (!string.IsNullOrEmpty(model.Content))//如果接收到消息
                {
                    if (model.Content.Contains(" 你好") || model.Content.Contains(" 好") || model.Content.Contains("hi") || model.Content.Contains("hello"))// 你好
                    {
                        resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好,有事请留言,偶会及时回复你的。]]></Content><FuncFlag>0</FuncFlag></xml>";
                    }

                 }

                 else//没有接收到消息
                {
                    resxml += "<MsgType><![CDATA[text]]></MsgType><Content><![CDATA[亲,感谢您对我的关注,有事请留言。]]></Content><FuncFlag>0</FuncFlag></xml>";
                }

                Response.Write(resxml);
            }
            if (MsgType.InnerText == "image")//如果消息类型为图片消息
            {
                var model = new
                {
                    ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                    FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                    CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                    MsgType = MsgType.InnerText,
                    PicUrl = rootElement.SelectSingleNode("PicUrl").InnerText,
                    MsgId = rootElement.SelectSingleNode("MsgId").InnerText
                };
                resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>1</ArticleCount><Articles><item><Title><![CDATA[欢迎您的光临!]]></Title><Description><![CDATA[非常感谢您的关注!]]></Description><PicUrl><![CDATA[http://...jpg]]></PicUrl><Url><![CDATA[http://www.baidu.com/]]></Url></item></Articles><FuncFlag>0</FuncFlag></xml>";
                Response.Write(resxml);
            }
            else//如果是其余的消息类型
            {
                var model = new
                {
                    ToUserName = rootElement.SelectSingleNode("ToUserName").InnerText,
                    FromUserName = rootElement.SelectSingleNode("FromUserName").InnerText,
                    CreateTime = rootElement.SelectSingleNode("CreateTime").InnerText,
                };
                resxml += "<xml><ToUserName><![CDATA[" + model.FromUserName + "]]></ToUserName><FromUserName><![CDATA[" + model.ToUserName + "]]></FromUserName><CreateTime>" + ConvertDateTimeInt(DateTime.Now) + "</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[亲,感谢您对我的关注,有事请留言,我会及时回复你的哦。]]></Content><FuncFlag>0</FuncFlag></xml>";
                Response.Write(resxml);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        Response.End();

}
/// <summary>
/// datetime转换成unixtime
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
private int ConvertDateTimeInt(System.DateTime time)
{
        System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
        return (int)(time - startTime).TotalSeconds;
}
/// <summary>
/// 写日志(用于跟踪),可以将想打印出的内容计入一个文本文件里面,便于测试
/// </summary>
public static void WriteLog(string strMemo, HttpServerUtility server)
{
        string filename = server.MapPath("/logs/log.txt");//在网站项目中建立一个文件夹命名logs(然后在文件夹中随便建立一个web页面文件,避免网站在发布到服务器之后看不到预定文件)
        if (!Directory.Exists(server.MapPath("//logs//")))
            Directory.CreateDirectory("//logs//");
        StreamWriter sr = null;
        try
        {
            if (!File.Exists(filename))
            {
                sr = File.CreateText(filename);
            }
            else
            {
                sr = File.AppendText(filename);
            }
            sr.WriteLine(strMemo);
        }
        catch
        {
        }
        finally
        {
            if (sr != null)
                sr.Close();
        }
}

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

使用net怎进行微信公众平台开发?

提供的接口一般是webservice,socket之类的,和开发语言没关系。
 

微信公众平台开发实例

京东或当当都有这本书卖《微信公众平台应用开发实战》作者钟志勇,腾讯公司资深软件研发工程师兼微信公众平台应用开发先驱者撰写,权威性毋庸置疑
  全面介绍微信公众平台应用开发所需各项技术,系统解读微信公众平台开放的API和各项高级功能,逐步讲解微信公众平台应用开发的流程、方法和技巧
  注重实战,不仅通过3个案例呈现了娱乐型、应用型、游戏型应用的完整开发过程,而且还实现了一个快速开发公众平台应用的框架,可以直接使用。

没有更多推荐了,返回首页