申请成为微信开发者
作为开发者账号,你需要有一个自己的服务器(也可以使用云服务,例如阿里云),最重要的是需要有一个固定的域名或者ip能够访问这个服务器。
最简单地,这个服务器需要能够监听80端口,接收来自微信服务器的身份验证信息并且能够按照要求返回对应的字符串(或XML格式数据)。
当你拥有一个满足上述条件的服务器,那么你就把这个服务器的ip填上去吧!格式就像这样:
下面的Token就是用来验证你自己身份的。微信服务器会在你按下“提交”的时候往URL发送一个Get请求,其中参数包含了一个时间戳、随机字符串1、字符串2。如果你按照微信所说的步骤计算时间戳、随机字符串1和你的Token,会得到一个结果,如果这个结果和字符串2一致,就将字符串2 Post回去。
微信服务器收到你的POST后,这里就会显示验证成功。
微信的API文档写得很清楚的。
如何成为微信开发者
成为微信公众平台开发者的方法
1第一、我们登录微信公众平台,然后找到功能——高级功能,点击进入高级功能。如下图所示:
2第二、选择开发模式,直接进入高级功能界面里,在这里我们要找到“成为开发者”,进入成为开发者验证步骤,首先要同意开发者协议。如下图所示:
3第三、同意开发者协议后,点击“下一步”,这样我们就要提供一些资金料了。比如URL等。如下图所示:
4第四、只要URL的有效性验证通过的话,我们就成功的成为开发者,如果不是,就不会成为开发者。
.net微信开发
半年后再说
.net
亚马逊销量最高的就可以了
如何用java开发微信
说明:
本次的教程主要是对微信公众平台开发者模式的讲解,网络上很多类似文章,但很多都让初学微信开发的人一头雾水,所以总结自己的微信开发经验,将微信开发的整个过程系统的列出,并对主要代码进行讲解分析,让初学者尽快上手。
在阅读本文之前,应对微信公众平台的官方开发文档有所了解,知道接收和发送的都是xml格式的数据。另外,在做内容回复时用到了图灵机器人的api接口,这是一个自然语言解析的开放平台,可以帮我们解决整个微信开发过程中最困难的问题,此处不多讲,下面会有其详细的调用方式。
1.1 在登录微信官方平台之后,开启开发者模式,此时需要我们填写url和token,所谓url就是我们自己服务器的接口,用WechatServlet.java来实现,相关解释已经在注释中说明,代码如下:
[java]?view plain?copy
package?demo.servlet;??
import?java.io.BufferedReader;??
import?java.io.IOException;??
import?java.io.InputStream;??
import?java.io.InputStreamReader;??
import?java.io.OutputStream;??
import?javax.servlet.ServletException;??
import?javax.servlet.http.HttpServlet;??
import?javax.servlet.http.HttpServletRequest;??
import?javax.servlet.http.HttpServletResponse;??
import?demo.process.WechatProcess;??
/**?
*?微信服务端收发消息接口?
*??
*?@author?pamchen-1?
*??
*/??
public?class?WechatServlet?extends?HttpServlet?{??
/**?
*?The?doGet?method?of?the?servlet.?<br>?
*??
*?This?method?is?called?when?a?form?has?its?tag?value?method?equals?to?get.?
*??
*?@param?request?
*????????????the?request?send?by?the?client?to?the?server?
*?@param?response?
*????????????the?response?send?by?the?server?to?the?client?
*?@throws?ServletException?
*?????????????if?an?error?occurred?
*?@throws?IOException?
*?????????????if?an?error?occurred?
*/??
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)??
throws?ServletException,?IOException?{??
request.setCharacterEncoding("UTF-8");??
response.setCharacterEncoding("UTF-8");??
/**?读取接收到的xml消息?*/??
StringBuffer?sb?=?new?StringBuffer();??
InputStream?is?=?request.getInputStream();??
InputStreamReader?isr?=?new?InputStreamReader(is,?"UTF-8");??
BufferedReader?br?=?new?BufferedReader(isr);??
String?s?=?"";??
while?((s?=?br.readLine())?!=?null)?{??
sb.append(s);??
}??
String?xml?=?sb.toString();?//次即为接收到微信端发送过来的xml数据??
String?result?=?"";??
/**?判断是否是微信接入激活验证,只有首次接入验证时才会收到echostr参数,此时需要把它直接返回?*/??
String?echostr?=?request.getParameter("echostr");??
if?(echostr?!=?null?&&?echostr.length()?>?1)?{??
result?=?echostr;??
}?else?{??
//正常的微信处理流程??
result?=?new?WechatProcess().processWechatMag(xml);??
}??
try?{??
OutputStream?os?=?response.getOutputStream();??
os.write(result.getBytes("UTF-8"));??
os.flush();??
os.close();??
}?catch?(Exception?e)?{??
e.printStackTrace();??
}??
}??
/**?
*?The?doPost?method?of?the?servlet.?<br>?
*??
*?This?method?is?called?when?a?form?has?its?tag?value?method?equals?to?
*?post.?
*??
*?@param?request?
*????????????the?request?send?by?the?client?to?the?server?
*?@param?response?
*????????????the?response?send?by?the?server?to?the?client?
*?@throws?ServletException?
*?????????????if?an?error?occurred?
*?@throws?IOException?
*?????????????if?an?error?occurred?
*/??
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)??
throws?ServletException,?IOException?{??
doGet(request,?response);??
}??
}??
<?xml?version="1.0"?encoding="UTF-8"?>??
<web-app?version="2.5"???
xmlns="http://java.sun.com/xml/ns/javaee"???
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"???
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee???
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">??
<servlet>??
<description>This?is?the?description?of?my?J2EE?component</description>??
<display-name>This?is?the?display?name?of?my?J2EE?component</display-name>??
<servlet-name>WechatServlet</servlet-name>??
<servlet-class>demo.servlet.WechatServlet</servlet-class>??
</servlet>??
<servlet-mapping>??
<servlet-name>WechatServlet</servlet-name>??
<url-pattern>/wechat.do</url-pattern>??
</servlet-mapping>??
<welcome-file-list>??
<welcome-file>index.jsp</welcome-file>??
</welcome-file-list>??
</web-app>??
package?demo.process;??
import?java.util.Date;??
import?demo.entity.ReceiveXmlEntity;??
/**?
*?微信xml消息处理流程逻辑类?
*?@author?pamchen-1?
*?
*/??
public?class?WechatProcess?{??
/**?
*?解析处理xml、获取智能回复结果(通过图灵机器人api接口)?
*?@param?xml?接收到的微信数据?
*?@return??最终的解析结果(xml格式数据)?
*/??
public?String?processWechatMag(String?xml){??
/**?解析xml数据?*/??
ReceiveXmlEntity?xmlEntity?=?new?ReceiveXmlProcess().getMsgEntity(xml);??
/**?以文本消息为例,调用图灵机器人api接口,获取回复内容?*/??
String?result?=?"";??
if("text".endsWith(xmlEntity.getMsgType())){??
result?=?new?TulingApiProcess().getTulingResult(xmlEntity.getContent());??
}??
/**?此时,如果用户输入的是“你好”,在经过上面的过程之后,result为“你也好”类似的内容??
*??因为最终回复给微信的也是xml格式的数据,所有需要将其封装为文本类型返回消息?
*?*/??
result?=?new?FormatXmlProcess().formatXmlAnswer(xmlEntity.getFromUserName(),?xmlEntity.getToUserName(),?result);??
return?result;??
}??
}??
package?demo.entity;??
/**?
*?接收到的微信xml实体类?
*?@author?pamchen-1?
*?
*/??
public?class?ReceiveXmlEntity?{??
private?String?ToUserName="";??
private?String?FromUserName="";??
private?String?CreateTime="";??
private?String?MsgType="";??
private?String?MsgId="";??
private?String?Event="";??
private?String?EventKey="";??
private?String?Ticket="";??
private?String?Latitude="";??
private?String?Longitude="";??
private?String?Precision="";??
private?String?PicUrl="";??
private?String?MediaId="";??
private?String?Title="";??
private?String?Description="";??
private?String?Url="";??
private?String?Location_X="";??
private?String?Location_Y="";??
private?String?Scale="";??
private?String?Label="";??
private?String?Content="";??
private?String?Format="";??
private?String?Recognition="";??
public?String?getRecognition()?{??
return?Recognition;??
}??
public?void?setRecognition(String?recognition)?{??
Recognition?=?recognition;??
}??
public?String?getFormat()?{??
return?Format;??
}??
public?void?setFormat(String?format)?{??
Format?=?format;??
}??
public?String?getContent()?{??
return?Content;??
}??
public?void?setContent(String?content)?{??
Content?=?content;??
}??
public?String?getLocation_X()?{??
return?Location_X;??
}??
public?void?setLocation_X(String?locationX)?{??
Location_X?=?locationX;??
}??
public?String?getLocation_Y()?{??
return?Location_Y;??
}??
public?void?setLocation_Y(String?locationY)?{??
Location_Y?=?locationY;??
}??
public?String?getScale()?{??
return?Scale;??
}??
public?void?setScale(String?scale)?{??
Scale?=?scale;??
}??
public?String?getLabel()?{??
return?Label;??
}??
public?void?setLabel(String?label)?{??
Label?=?label;??
}??
public?String?getTitle()?{??
return?Title;??
}??
public?void?setTitle(String?title)?{??
Title?=?title;??
}??
public?String?getDescription()?{??
return?Description;??
}??
public?void?setDescription(String?description)?{??
Description?=?description;??
}??
public?String?getUrl()?{??
return?Url;??
}??
public?void?setUrl(String?url)?{??
Url?=?url;??
}??
public?String?getPicUrl()?{??
return?PicUrl;??
}??
public?void?setPicUrl(String?picUrl)?{??
PicUrl?=?picUrl;??
}??
public?String?getMediaId()?{??
return?MediaId;??
}??
public?void?setMediaId(String?mediaId)?{??
MediaId?=?mediaId;??
}??
public?String?getEventKey()?{??
return?EventKey;??
}??
public?void?setEventKey(String?eventKey)?{??
EventKey?=?eventKey;??
}??
public?String?getTicket()?{??
return?Ticket;??
}??
public?void?setTicket(String?ticket)?{??
Ticket?=?ticket;??
}??
public?String?getLatitude()?{??
return?Latitude;??
}??
public?void?setLatitude(String?latitude)?{??
Latitude?=?latitude;??
}??
public?String?getLongitude()?{??
return?Longitude;??
}??
public?void?setLongitude(String?longitude)?{??
Longitude?=?longitude;??
}??
public?String?getPrecision()?{??
return?Precision;??
}??
public?void?setPrecision(String?precision)?{??
Precision?=?precision;??
}??
public?String?getEvent()?{??
return?Event;??
}??
public?void?setEvent(String?event)?{??
Event?=?event;??
}??
public?String?getMsgId()?{??
return?MsgId;??
}??
public?void?setMsgId(String?msgId)?{??
MsgId?=?msgId;??
}??
public?String?getToUserName()?{??
return?ToUserName;??
}??
public?void?setToUserName(String?toUserName)?{??
1.2 相应的web.xml配置信息如下,在生成WechatServlet.java的同时,可自动生成web.xml中的配置。前面所提到的url处可以填写例如:http;//服务器地址/项目名/wechat.do
[html]?view plain?copy
1.3 通过以上代码,我们已经实现了微信公众平台开发的框架,即开通开发者模式并成功接入、接收消息和发送消息这三个步骤。
下面就讲解其核心部分——解析接收到的xml数据,并以文本类消息为例,通过图灵机器人api接口实现智能回复。
2.1 首先看一下整体流程处理代码,包括:xml数据处理、调用图灵api、封装返回的xml数据。
[java]?view plain?copy
2.2 解析接收到的xml数据,此处有两个类,ReceiveXmlEntity.java和ReceiveXmlProcess.java,通过反射的机制动态调用实体类中的set方法,可以避免很多重复的判断,提高代码效率,代码如下:
[java]?view plain?copy
- 上一篇: 屏蔽微信群,如何能屏蔽微信群
- 下一篇: 开发微信小程序开发,开发微信小程序需要学会那种程序语言