用Java实现成为微信开发者 1、微信开发的数据交互方式 公众平台消息接口为开发者提供了与用户进行消息交互的能力。对于成功接入消息接口的公众账号,当用户发消息给公众账号时,微信公众平台服务器会使用HTTP请求对接入的网址进行消息推送,第三方服务器可通过响应包返回个性的回复,从而达到回复消息的目的。简单地说,就是公众账号可以使用自己的程序来和用户对话。(摘自http://book.2cto.com/201309/33610.html) 2、微信开发者的服务支持 由以上数据交互方式开出看出,必须有  微信公众平台、第三方服务器 3、成为微信开发者 成为微信开发者要通过修改配置,即填写URL、token、和生成EncodingAESKey 认证有servlet完成,代码要有一下代码文件

//weixinServlet.java第三方服务器的入口 

public class weixinServlet extends HttpServlet{ 

private static final long serialVersionUID = 4440739483644821986L; 



/** 

* 确认请求来自微信服务器 

   
 */ 



public void doGet(HttpServletRequest request, HttpServletResponse response) 

throws ServletException, IOException { 

// 微信加密签名 

String signature = request.getParameter("signature"); 

// 时间戳 

String timestamp = request.getParameter("timestamp"); 

// 随机数 

String nonce = request.getParameter("nonce"); 

// 随机字符串 

String echostr = request.getParameter("echostr"); 

PrintWriter out = response.getWriter(); 

// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 

if (SignUtil.checkSignature(signature, timestamp, nonce)) { 

out.print(echostr); 

} 

out.close(); 

out = null; 

} 

 } 





//SignUtil.java签名校验文件在servlet文件中调用 













 public class SignUtil { 

// 与接口配置信息中的Token要一致 

private static String token ="jdl"; 



/** 

* 验证签名 

* @param signature 

* @param timestamp 

* @param nonce 

* @return 

*/ 



public static boolean checkSignature(String signature, String timestamp, 

String nonce) { 

String[] arr = new String[] { token, timestamp, nonce }; 

// 将token、timestamp、nonce三个参数进行字典序排序 

Arrays.sort(arr); 

StringBuilder content = new StringBuilder(); 

for (int i = 0; i < arr.length; i++) { 

content.append(arr[i]); 

} 

MessageDigest md = null; 

String tmpStr = null; 

try { 

md = MessageDigest.getInstance("SHA-1"); 

// 将三个参数字符串拼接成一个字符串进行sha1加密 

byte[] digest = md.digest(content.toString().getBytes()); 

tmpStr = byteToStr(digest); 

} catch (NoSuchAlgorithmException e) { 

e.printStackTrace(); 

} 

content = null; 

// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信 

return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; 

} 



/** 

* 将字节数组转换为十六进制字符串 

* @param byteArray 

* @return 

*/ 



private static String byteToStr(byte[] byteArray) { 

String strDigest = ""; 

for (int i = 0; i < byteArray.length; i++) { 

strDigest += byteToHexStr(byteArray[i]); 

} 

return strDigest; 

} 



/** 

* 将字节转换为十六进制字符串 

* @param mByte 

* @return 

*/ 



private static String byteToHexStr(byte mByte) { 

char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 

'B', 'C', 'D', 'E', 'F' }; 

char[] tempArr = new char[2]; 

tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  // 取一个字节的高4位,然后获得其对应的十六进制字符 

tempArr[1] = Digit[mByte & 0X0F]; 
//  取一个字节的低4位,然后获得其对应的十六进制字符   

String s = new String(tempArr); 

return s; 

} 

 } 





 //配置web.xml文件的servlet 





 <servlet> 

   
 <servlet-name>weixinServlet</servlet-name> 

   
 <servlet-class>com.yc.servlets.weixinServlet</servlet-class> 

  </servlet> 

  <servlet-mapping> 

   
 <servlet-name>weixinServlet</servlet-name> 

   
 <url-pattern>/weixinServlet</url-pattern> 

  </servlet-mapping>

做到这里,准备工作已经完成以下的步奏我只是提示一下 1、在新浪云上发布你的项目 2、将token、URL填写,生成EncodingAESKey 3、选择明文模式 4、提交 注意:URL是项目的URL+/weixinServlet