自学java开发微信公众号/服务号 服务器配置

这些是我写给自己的小文档,希望以后自己有写文档记录的习惯

在进行微信公众平台前,需要先阅读微信开发文档,相信许多小伙伴已经做过了。

这里附一个微信公众号技术文档的链接  https://mp.weixin.qq.com/wiki

接入微信公众平台开发,开发者需要按照如下步骤完成:

①,填写服务期配置

②,验证服务器地址的有效性

③,依据接口文档实现业务逻辑

服务器配置

首先要申请一个微信订阅号或者服务号,开通接口,有一些高级接口,如生成二维码,网页授权,自定义菜单,微信支付这样的借口权限个人订阅号是没有调用权限的,而微信公众平台也提供了测试公众账号,具备了几乎所有的接口。

然后在本地安装java开发环境,包括开发工具如Eclipse,开发微信公众号的应用需要部署到一个公网服务器进行测试,因为微信用户每次向公众号发起请求时,微信服务器都会先接收到用户的请求,然后再转发到我们的服务器上,微信服务器是要和我们的服务器交互,这里我们借用第三方软件Ngrok,Ngrok是一个免费的软件,使用后可以实现内网穿透,也就是说我们可以将内网的服务器映射到外网给别人访问,这样减少了一些调试上的不必要。

国内提供Ngrok服务比较好的网站是 https://natapp.cn/

Ngrok 经过注册下载运行之后会得到图上的地址(网址内有详细教程

NATAPP1分钟快速新手图文教程

 https://natapp.cn/article/natapp_newbie  )

其中红框所画出的地址就是Ngrok所映射出的地址,我们按照这个地址访问就可以了

其中有一个需要注意的地方 微信服务器只能和外部开通了80端口和443端口的服务器之间通信

 

可以看到 我们的项目已经可以被外网正常的访问到了  这样就可以在我们的开发工具里敲代码了

在Eclipse里创建一个Web工程,编写一个servlet, 在其中的doGet方法中定义校验方法

开发者提交信息后,微信服务器将发送Get请求到填写的服务器地址URL上,Get请求携带参数:

 

参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

如果参数原様返回,微信服务器校验通过,则接入生效,成为开发者成功。

WX_Interface

public class WX_Interface extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String str = WX_Util.validate(request);
	
		PrintWriter out = response.getWriter();
		
		out.print(str);
	
		out.flush();
		out.close();
	}
}

WX_Util

public class WX_Util {
	
	//验证服务器地址
	public static String validate(HttpServletRequest request){
		
		 String signature = request.getParameter("signature");
		 String timestamp = request.getParameter("timestamp");
		 String nonce = request.getParameter("nonce");
		 String echostr   = request.getParameter("echostr");
		 
		 String token = "51FE28CA600C2D3015129F2835FC4F1A";
		 
		 String str = "";
		 
		 try {

				if (null != signature) {
					String[] ArrTmp = { token, timestamp, nonce };
					Arrays.sort(ArrTmp);
					StringBuffer sb = new StringBuffer();
					for (int i = 0; i < ArrTmp.length; i++) {
						sb.append(ArrTmp[i]);
					}

					MessageDigest md = MessageDigest.getInstance("SHA-1");
					byte[] bytes = md.digest(new String(sb).getBytes());
					StringBuffer buf = new StringBuffer();
					for (int i = 0; i < bytes.length; i++) {
						if (((int) bytes[i] & 0xff) < 0x10) {
							buf.append("0");
						}
						buf.append(Long.toString((int) bytes[i] & 0xff, 16));
					}
					if (signature.equals(buf.toString())) {
						str = echostr;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return str;
	}
}
51FE28CA600C2D3015129F2835FC4F1A";
		 
		 String str = "";
		 
		 try {

				if (null != signature) {
					String[] ArrTmp = { token, timestamp, nonce };
					Arrays.sort(ArrTmp);
					StringBuffer sb = new StringBuffer();
					for (int i = 0; i < ArrTmp.length; i++) {
						sb.append(ArrTmp[i]);
					}

					MessageDigest md = MessageDigest.getInstance("SHA-1");
					byte[] bytes = md.digest(new String(sb).getBytes());
					StringBuffer buf = new StringBuffer();
					for (int i = 0; i < bytes.length; i++) {
						if (((int) bytes[i] & 0xff) < 0x10) {
							buf.append("0");
						}
						buf.append(Long.toString((int) bytes[i] & 0xff, 16));
					}
					if (signature.equals(buf.toString())) {
						str = echostr;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return str;
	}
}

在微信公众平台上填入URL和Token

URL就是我们外网部署的项目地址  http://ng3qw3.natappfree.cc/wx/WX_Interface

Token 可以自定义 和WX_Util 中的token相同

然后提交配置 出现提交成功字样就说明配置成功了

到此,我们的公众号应用已经能和为新服务器正常运行了,也就说明我们的公众号已经接入到微信公众平台了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值