微信开发入门

环境搭建上:因为微信官方的服务器需要能访问开发者自己的服务器,而且得是80端口接入,所以需要自己的电脑有公网ip,或者在服务器上开发,或者买云服务器在上面开发,或者内网穿透把内网电脑的端口映射到服务器的虚拟目录上,为了后期部署方便,最好把内网电脑映射到外网服务器二级域名上(有些云服务提供了这样的支持,称之为免维服务器,比如新浪云SAE)。而且想要用java开发,在服务器上跑eclipse做开发不太现实,所以需要内网穿透

  1. 基本原理:
    图片转载自
  2. 通信原理:
    微信后台发送消息是一个POST请求,但和普通的POST请求不同的是,首先,URL会带上signature、timestamp、nonce这3个参数:
POST http://www.example.com/weixin?signature=xxx&timestamp=123456&nonce=123

然后,HTTP请求的BODY是一个不规范的XML:

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1348831860</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[this is a test]]></Content>
    <MsgId>1234567890123456</MsgId>
</xml>

我们自己的服务器只需要处理该XML,然后,向微信返回一个类似如下的XML:

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>12345678</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[你好]]></Content>
</xml>

就可以完成消息的回复。微信后台要求必须在5秒内回复,最多重试3次,否则我们自己的回复消息就到达不了用户的手机了。如果我们自己的服务器无法在5秒内回复,就回复一个空字符串,告诉微信服务器,不用重试了,这个消息处理不了,不给用户回复了。

上面的交互逻辑看起来很简单,但实际上坑有很多。

首先,微信服务器发送的POST请求根本就不符合HTTP规范。原则上POST请求不应该在URL上附带参数,但微信后台偏偏要这么干,这就让很多编程语言的标准框架无法获取到POST参数,因为标准的POST参数是从HTTP BODY中解析的。

所以,从POST获取URL参数就需要用到更底层的代码。
本文参考链接:http://www.jianshu.com/p/TM8VUt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值