微信公众号开发搭建

刚开始很简单啦,申请微信公众号:https://mp.weixin.qq.com,选择你要创建的公众号分类,然后填写个人信息,设置一下你申请的公众号各个基本详情,例如图片,名称,认证什么的。

但是如果想和微信服务器对接,就需要搭建自己的服务器。因此就需要拥有公网的ip或者域名。如下:

 

 

 

一般来说搭建外网服务器,有两种方法:

1.如果资金比较充足,可以用购买阿里,腾讯等云服务器,自己搭建外网服务器,再买一个域名,然后备案,就可以进行配置了。

2.可以使用内网穿透技术,购买隧道,在自己本机上搭建服务器,然后映射到外网上。我是用的是natapp这个内网穿透,还有其他的,这里就不一一说明了。https://natapp.cn,需要注册。


说明:免费隧道虽然不要钱,但是无法拥有二级域名,可以自己玩一下。我是买的vip_1型的隧道,然后注册了二级域名,这个域名是外网域名,并且映射到自己电脑的内网ip,已经备案,可以在微信验证时直接使用(微信开发的服务器域名需要备案,否则无法验证)。接下来就需要自己电脑配置natapp了。官方给出的mac和windows的配制方法https://natapp.cn/article/natapp_newbie

我是mac的:

对下载软件解压,然后打开电脑的cmd控制台,跳转到软件所在的目录,进行如下操作

 

 

 

现在如果在你自己的电脑上搭建了web服务器,并且已经开启而且可以正运行,服务器端口和配置隧道时的端口一致,则可以用外网访问你的web网站。可以试试127.0.0.1:8080,或者http://xxx.natapp1.cc:8080/你的项目名/。

接下来就是对微信公众开发进行服务器token验证:

package org.andy.shop.controller;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.andy.shop.constant.SessionCheck;
import org.andy.shop.model.Attentions;
import org.andy.shop.model.Usersession;
import org.apache.catalina.connector.Response;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/wx")
public class WXController {

	@RequestMapping("/checkToken")
//	@RequestMapping(value = "/checkToken",  method = RequestMethod.GET,produces = {"text/plain;charset=UTF-8"}) 这样也是可以访问的
	public @ResponseBody Object checkToken(String signature, String timestamp,
			String nonce, String echostr) {

		String token = "你再微信公众号上设置的token,请确定一样";
		String checktext = null;
		if (null != signature) {
			// 对ToKen,timestamp,nonce 按字典排序
			String[] paramArr = new String[] { token, timestamp, nonce };
			Arrays.sort(paramArr);
			// 将排序后的结果拼成一个字符串
			String content = paramArr[0].concat(paramArr[1])
					.concat(paramArr[2]);
			try {
				MessageDigest md = MessageDigest.getInstance("SHA-1");
				// 对接后的字符串进行sha1加密
				byte[] digest = md.digest(content.toString().getBytes());
				checktext = byteToStr(digest);
			} catch (NoSuchAlgorithmException e) {
				e.printStackTrace();
			}
		}
		// 将加密后的字符串与signature进行对比
		String temp= (checktext != null) ? (checktext.equals(signature.toUpperCase())?echostr:"")
				: "";
		if (temp==null||temp.equals("")) {
			return 0;
		}else {
			return Long.parseLong(temp);
		}

	}

	/**
	 * 将字节数组转化为16进制字符串
	 * 
	 * @param byteArrays
	 *            字符数组
	 * @return 字符串
	 */
	private static String byteToStr(byte[] byteArrays) {
		String str = "";
		for (int i = 0; i < byteArrays.length; i++) {
			str += byteToHexStr(byteArrays[i]);
		}
		return str;
	}

	/**
	 * 将字节转化为十六进制字符串
	 * 
	 * @param myByte
	 *            字节
	 * @return 字符串
	 */
	private static String byteToHexStr(byte myByte) {
		char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
				'B', 'C', 'D', 'E', 'F' };
		char[] tampArr = new char[2];
		tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
		tampArr[1] = Digit[myByte & 0X0F];
		String str = new String(tampArr);
		return str;
	}

}

如果返回的和你的echor是一样的,验证通过,否则就会失败,失败的原因请参考我的另一篇博客微信公众平台服务器配置时token验证失败  ,别忘记在微信公众号配置上配置白名单ip。

以上就是简单的微信公众号前期搭建。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值