微信公众服务号接口开发环境搭建

本文详细记录了在微信服务号接入过程中遇到的技术挑战,包括服务器地址配置、URL路径冲突解决、动态域名解析及防火墙设置等问题,并最终通过使用nat123端口映射工具成功解决微信验证超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步要去微信的官方网站申请个服务号地址是:https://mp.weixin.qq.com/

第二步,验证服务器地址的有效性真是一波三折,考虑到开发阶段要经常用到调试,特别是断点调试,所以决定先将服务器地址配置为本机(经过路由器和电信接入互联网) 。因为之前有个网站用的是struts2架构的,现在想把微信的业务逻辑写在servlet 里面,然后也跟着这个网站部署到互联网上 ,因为这样复用性比较大,servlet可以直接用于其他项目,如果写在struts里面则通用性不好。先遇到的是servlet 跟struts2 的filter 冲突了url访问不了servlet,这个问题都好解决,web.xml里面servlet 的 url-pattern 的值加个“.servlet”。 然后servlet就能访问了。
web.xml增加的片段如下:

<servlet>
<servlet-name>winxin</servlet-name>
<servlet-class>com.cdlqjj.ServletWeiXin</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>winxin</servlet-name>
<url-pattern>/winxin.servlet</url-pattern>
</servlet-mapping>

其实就是url-pattern 的值加了个叫servlet 的扩展名。然后这几行代码要写到struts过滤器的前面 。

java实现如下:MsgCompoent 是具体处理报文的逻辑。这自己实现吧。


import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.velocity.VelocityContext;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.xxx.analysis.TextAnalysis;
import com.xxx.pub.MsgCompoent;
import com.xxx.pub.StringTools;

import edu.fudan.util.exception.LoadModelException;

public class ServletWeiXin extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;




public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

//如果是接入验证 ,这里就该为true
if(true) {

String signature = (String) request.getParameter("signature");
String timestamp = (String) request.getParameter("timestamp");
String nonce = (String) request.getParameter("nonce");
String echostr = (String) request.getParameter("echostr");

if(echostr!=null&&!echostr.equals("")) {

response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.print(echostr);
return ;
}
}

String webpath = this.getServletConfig().getServletContext().getRealPath("/");

String toUserName = (String) request.getAttribute("ToUserName");



request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();

InputStream in = request.getInputStream();

try {
MsgCompoent msgcompoent = new MsgCompoent();
out.print(msgcompoent.dealReceive(in,webpath));

} catch (Exception e) {
e.printStackTrace();
}

in.close();
in = null;
out.close();
out = null;


}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

doGet(request, response);

}
}



然后用了花生壳将动态域名解析。同样的url我自己通过浏览器可以访问,但是微信验证的时候就提示超时,我曾花了几秒钟怀疑过微信,不过这个想法立马就此打住。想了一下整个网络连通过程,没什么问题我tomcat 的端口是80 。

最后我觉得可能是我防火墙的问题,看了一下防火墙是否打开,结果真是打开状态。果断就把他关闭了。以为这回可以了,结果 ,验证还是超时 希望又破灭了。

最最后发现是电信封了这80端口 ,本着我花了钱的,我是大爷的思想给10000号打去了电话,得到的答复是他们是封了80端口不过如果想打开要报批,等48小时。
再想了一下,应该有什么工具可以绕开这个吧,然后用了nat123 ,冲了一块钱人民币做了端口映射,这才开通了80端口 。

[img]http://dl2.iteye.com/upload/attachment/0107/3645/4bd24b79-f55e-3306-a743-9373b78a592d.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值