GVKun编程网logo

Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者(微信公众平台开发者中心)

5

在本文中,我们将详细介绍Senparc.Weixin.MPSDK微信公众平台开发教程的各个方面,并为您提供关于二:成为开发者的相关解答,同时,我们也将为您带来关于.Net开发之微信公众平台认证"成为开

在本文中,我们将详细介绍Senparc.Weixin.MP SDK 微信公众平台开发教程的各个方面,并为您提供关于二:成为开发者的相关解答,同时,我们也将为您带来关于.Net开发之微信公众平台认证"成为开发者"实例详解、Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系、JFinal Weixin 1.1 发布,微信极速 SDK、JFinal Weixin 1.2 发布,微信极速 SDK的有用知识。

本文目录一览:

Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者(微信公众平台开发者中心)

Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者(微信公众平台开发者中心)

    我觉得做好成为开发者的准备比稀里糊涂开通微信后台的“高级”功能更重要,所以这一节先放在前面说。

一、公众平台的通讯过程

    作为开发者,我们需要面对的主要有两个对象:微信服务器和应用程序(网站)服务器。

    当微信用户向你的公众平台发送一条消息,实际上这条消息首先发送到微信服务器,由微信服务器向网站服务器发起另外一个请求,网站服务器返回这个请求的结果,再由微信服务器发送到微信客户端。

    整个消息通讯流程如下图:

    Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者

    上述5个步骤中,作为开发者我们主要精力都集中在步骤3上,这个步骤主实际上要有3项任务:

  1. 接收来自2的XML信息

  2. 服务器内部逻辑执行

  3. 组织并返回用于4的XML信息

    上述三项任务我会在后面做详细说明,并提供一整套简单、高效的处理方法。

二、XML通讯格式

    用户使用微信客户端发送的不同类型的消息,网站服务器会收到不同格式的数据(文字、语音、图片等等),数据格式暂时只有XML一种。

    作为学习,我觉得只要熟练掌握最简单的文字类型就可以了,其他的格式都是大同小异。且在后面的说明中你会发现,Senparc.Weixin.MP.dll可以帮助我们完全忽略这些繁琐的格式和定义。

    一个简单的文字请求XML(RequestMessage)内容如下:

<xml>
    <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName>
    <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName>
    <CreateTime>1357986928</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[TNT2]]></Content>
    <MsgId>5832509444155992350</MsgId>
</xml>
登录后复制

  对应节点的官方说明如下:

参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgTypetextContent文本消息内容MsgId消息id,64位整型

一个简单的文字返回XML(ResponseMessage)内容如下:

<xml>
   <ToUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></ToUserName>
   <FromUserName><![CDATA[gh_a96a4a619366]]></FromUserName>
   <CreateTime>12345678</CreateTime>
   <MsgType><![CDATA[text]]></MsgType>
   <Content><![CDATA[content]]></Content>
   <FuncFlag>0</FuncFlag>
</xml>
登录后复制

  对应节点的官方说明如下:

参数 描述 ToUserName 接收方帐号(收到的OpenID) FromUserName 开发者微信号 CreateTime 消息创建时间 MsgType text Content 回复的消息内容,长度不超过2048字节 FuncFlag 位0x0001被标志时,星标刚收到的消息。

 

 

 

 

 

 


三、一些需要注意和容易被忽视的问题:

  1. 每条XML信息都有大小限制,如文本信息,建议Content内容不要超过600字。

  2. 上图中,步骤2开始之后,微信服务器有一个等待时间:5秒,如果在这个时间内没有进行到步骤4,那么这个请求将会被关闭(包括数据传输的时间)。也就是说如果超过时间,即使网站服务器返回了数据,客户端也无法收到回复。

  3. 在文本消息中,是允许添加标签来放置连接的,但是有许多朋友测试之后发现iOS没问题,Android上链接无法点击,其实原因是(至少目前为止):Android的微信客户端对标签格式的判定比较严格,请严格按照这个格式书写:内容,href后不要使用单引号,也不要添加其他属性。

  4. 上面XML节点中的FromUserName即微信用户的OpenId,对于同一个公众账号,这个OpenId的前6位是一致的,并且在整个公众平台的记录中也是唯一的。也就是说同一个用户关注了两个不同的公众账号,他会有两个不同的OpenId。

  5. CreateTime使用的是Unix时间,因此如果使用C#的话,需要做一个转换。

  6. 尽量保持官方API中XML节点的顺序,以前微信服务器是使用节点位置的方式读取信息的(node[0]),而非节点名称,现在这个问题似乎有好转,不过还是要小心(¥…………&%&……)。

  7. 由于这种特殊的通讯方式,(至少目前为止)所有请求必须从客户端先发起,不要指望光使用API或SDK可以实现由网站服务器主动推送消息到客户端(当然其他办法还是有的,比如模拟登陆)。

四、工欲善其事,必先利其器:Senparc.Weixin.MP.dll

    虽然整个通讯过程十分简单,但是官方API还是对一些字段做了特殊的约定或处理,况且面向过程地处理这么多类型的请求数据也是一件十分费力的事情。

    为此我做了一个开源项目:Senparc.Weixin.MP,地址:http://www.php.cn/

    Senparc.Weixin.MP的主要目的是帮助C#开发者简化整个通讯过程,面向对象地处理消息,把主要精力放到业务逻辑上,而非繁琐的API上。

    使用Senparc.Weixin.MP,并部署到外网与微信服务器通讯,你需要准备这些环境:

  1. VS2012(至少VS2010 SP1);

  2. 如果需要运行MVC的Demo,至少需要.NET 4.0(安装MVC 4),运行Webforms Demo,至少需要.NET 3.5;

  3. 一个可以使用80端口访问的域名或IP,虚拟主机、花生壳映射内网、VPS、独立服务器都可以。

 

更多Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者相关文章请关注PHP中文网!

.Net开发之微信公众平台认证

.Net开发之微信公众平台认证"成为开发者"实例详解

这篇文章主要为大家详细解析了微信公众平台开发之认证成为开发者.Net代码,感兴趣的小伙伴们可以参考一下

.Net 实现微信公共服务平台开发的认证,认证成为开发者,具体内容如下

这些代码也就开始认证的时候用一次,以后就不用了:

const string Token = XXXXX;//你的token 
protected void Page_Load(object sender, EventArgs e) 
{ 
  string postStr = ; 
  if (Request.HttpMethod.ToLower() == post) 
  { 
    System.IO.Stream s = System.Web.HttpContext.Current.Request.InputStream; 
    byte[] b = new byte[s.Length]; 
    s.Read(b, 0, (int)s.Length); 
    postStr = System.Text.Encoding.UTF8.GetString(b); 
    if (!string.IsNullOrEmpty(postStr)) 
    { 
      //ResponseMsg(postStr); 
      Response.Write(ResponseMsg(postStr)); 
      Response.End(); 
    } 
   //WriteLog(postStr: + postStr); 
  } 
  else 
  { 
    Valid(); 
  } 
}    
 
/// <summary> 
/// 验证微信签名 
/// </summary> 
/// * 将token、timestamp、nonce三个参数进行字典序排序 
/// * 将三个参数字符串拼接成一个字符串进行sha1加密 
/// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 
/// <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); 
  tmpStr = tmpStr.ToLower(); 
  if (tmpStr == signature) 
  { 
    return true; 
  } 
  else 
  { 
    return false; 
  } 
} 
.private void Valid() 
{ 
  string echoStr = Request.QueryString[echoStr].ToString(); 
  if (CheckSignature()) 
  { 
    if (!string.IsNullOrEmpty(echoStr)) 
    { 
      Response.Write(echoStr); 
      Response.End(); 
    } 
  } 
}    
 
/// <summary> 
/// 写日志(用于跟踪) 
/// </summary> 
private void WriteLog(string strMemo) 
{ 
  string filename = Server.MapPath(/logs/log.txt); 
  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(); 
  } 
}

Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系

Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系

1. sdk platform

简单理解为系统版本

最新级别:

28:Android 9

27:Android 8.1

26:Android 8.0

25:Android 7.1

24:Android 7.0

23:Android 6.0

22:Android 5.1

 


 

 

2.sdk tools

Android SDK工具是Android SDK的一个组件。它包括Android的完整开发和调试工具集。在Android sdk中只存在一个版本

在Android studio中可以查看到当前sdk tools的版本


 

 

sdk tools中有很多常用的工具,比如:

uiautomatorviewer是常用的获取页面元素的工具


 

 

3.sdk Build tools


 

 

**摘抄别人的理解:


 

 

4.sdk platform tools

platform-tools目录:包含开发app的平台依赖的开发和调试工具。adb就在这里


 

查看当前sdk platform tools版本


 

JFinal Weixin 1.1 发布,微信极速 SDK

JFinal Weixin 1.1 发布,微信极速 SDK

JFinal Weixin 1.1 主要添加了消息加密功能,以及对 access token 意外失效问题做出了处理。
 access token 通常会因为外部原因而意外失效:
 1:项目中 AccessTokenApi 在获取到 access token 之后,在微信公众平台利用在线调试工具再次获取了该公众号的 access token
 2:项目中 AccessTokenApi 在获取到 access token 之后,其它程序包括正在开发中的程序再次获取了该公众号的 access token

 3:微信服务器未知原因导致当前 access token 失效(测试证实概率较高)

   开启加密功能步骤如下:
1:在配置文件中添加
  encryptMessage=true
  encodingAesKey=yourEncodingAesKey
2:在 YourJFinalConfig.configConstant(Constants me) 中添加
  ApiConfig.setEncryptMessage(getPropertyToBoolean("encryptMessage", false));
  ApiConfig.setEncodingAesKey(getProperty("encodingAesKey"));

3:登录微信平台配置 EncodingAESKey 值,以及选择消息加解密方式为安全模式,如下图所示


4:出现java.security.InvalidKeyException:illegal Key Size异常是正常现象,按照微信官方给的方案来解决:http://mp.weixin.qq.com/wiki/index.php?title=%E5%BC%80%E5%8F%91%E8%80%85FAQ

具体用法参考 jfinal-weixin-1.9-demo,在此下载 http://www.jfinal.com

One More Thing,JFinal 官方微信又一大波美女来袭,扫描下方二维码可立即查看,我们只看美女 ^_^


JFinal Weixin 1.2 发布,微信极速 SDK

JFinal Weixin 1.2 发布,微信极速 SDK

JFinal Weixin 1.2 主要添加了对多公众号账户的支持,并对原有代码进行小幅重构,具体变化如下:

改进内容:

  1. 添加 ApiConfigKit,便于将 ApiConfig 对象与当前线程进行绑定,方便在各处通过 ApiConfigKit.getApiConfig() 进行获取

  2. 原有 ApiCofig 对象中的所有属性与方法去掉 static 关键字

  3. WeixinController 更名为 MsgController,WeixinInterceptor 更名为 MsgInterceptor

  4. 添加 ApiController、ApiInterceptor

  5. 所有对 ApiConfig 静态方法有依赖的地方改为:ApiConfigKit.getApiConfig() 获取对象后再获取属性值,以便支持多公众号账户

  6. demo重构:DemoController 更名为 WeixinMsgController,ApiController更名为WeixinApiController

  7. WeixinConfig 中的路由配置 "/weixin" 改为 "/msg"

升级步骤:

  1. 引入新版本 jar 包 jfinal-weixin-1.2-bin-with-src.jar

  2. 原来继承自 WeixinController 的类改为继承 MsgController

  3. 需要使用 ApiConfig 的自定义 controller 需要继承自 ApiController

  4. 去掉YourJFinalConfig 中原来对 ApiConfig 的配置,改而实现控制中的 getApiConfig() 方法

  5. 原来对 ApiConfig 静态方法的依赖改为通过 ApiConfigKit.getApiConfig() 获取对象后再获取相关属性

  6. 使用 ApiConfigKit.setDevMode(true) 输出消息交互时的xml与json

多公众号支持的建议方案:

  1. 创建数据库表 api_config(weixinId, token, appId, appSecret, encodingAesKey, messageEncrypt)

  2. 多公众号的微信服务器 url 格式设置为:http://域名/msg?weixinId=123,其中 weixinId 对应 api_config 数据库表中的 weixinId

  3. 在 MsgController 继承类中的 getApiConfig() 中动态获取并返回相应的 ApiConfig 对象

    public ApiConfig getApiConfig() { 
        Record r = Db.findFrist("select * from api_config where weixinId=? limit 1", 
            getPara("weixinId")); 
        return new ApiConfig(r.get("token"), r.get("appId"), 
            r.get("appSecret"), r.get("encodingAesKey"), 
            r.get("messageEncrypt")); 
    }

One More Thing,JFinal 官方微信又一大波美女来袭,扫描下方二维码可立即查看,我们只看美女 ^_^

今天关于Senparc.Weixin.MP SDK 微信公众平台开发教程二:成为开发者的分享就到这里,希望大家有所收获,若想了解更多关于.Net开发之微信公众平台认证"成为开发者"实例详解、Android sdk platform,sdk tools,sdk Build tools,sdk platform tools 的关系、JFinal Weixin 1.1 发布,微信极速 SDK、JFinal Weixin 1.2 发布,微信极速 SDK等相关知识,可以在本站进行查询。

本文标签: