微信开发:接入微信入口

帅比萌擦擦* 提交于 2020-04-18 00:12:44

一,申请开发者账号,进行服务器配置

        首先我们得先有一个公众号,到微信公众号平台申请一个,本人申请的是订阅号。网址:https://mp.weixin.qq.com

还需要一个外网地址接口微信推送的消息,微信约定外网地址目前支持80和443接口,本人使用的是花生壳映射本机

        登陆公众号,选择开发-基本配置-填写服务器配置

        

参数说明:

URL:服务器地址-用来接收微信消息和事件的接口URL(需保持外网访问)

Token:任意填写,用作生成签名

EncodingAESKey:消息体加解密密钥(自己填写或者自动生成)

此处消息加解密方式如果选择的安全模式则需要用到EncodingAESKey进行解密消息

若是此处点击提交会出现token验证失败,是因为我们需要新建一个工程来进行微信验证。本人此处使用的是SpringMvc,请看下一步

 

二,验证服务器地址

 URL参数

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

 加密/校验流程:
    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信请求     
    4. 通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败

@Controller
@RequestMapping("/")
public class WeixinController {

	@RequestMapping("signature")
	@ResponseBody
	public String signature(String signature,
							String timestamp,
							String nonce,
							String echostr){
		try {
			String shaPw = SHA1.getSHA1("xiaofli007", timestamp, nonce);
			if(signature.equals(shaPw))
				return echostr;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}
}
/**
	 * 用SHA1算法生成安全签名
	 * @param token 
	 * @param timestamp 时间戳
	 * @param nonce 随机字符串
	 * @return 安全签名
	 * @throws Exception 
	 */
	public static String getSHA1(String token, String timestamp, String nonce) throws Exception 
			  {
		try {
			String[] array = new String[] { token,timestamp, nonce};
			StringBuffer sb = new StringBuffer();
			// 字符串排序
			Arrays.sort(array);
			for (int i = 0; i < 3; i++) {
				sb.append(array[i]);
			}
			String str = sb.toString();
			// SHA1签名生成
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			md.update(str.getBytes());
			byte[] digest = md.digest();

			StringBuffer hexstr = new StringBuffer();
			String shaHex = "";
			for (int i = 0; i < digest.length; i++) {
				shaHex = Integer.toHexString(digest[i] & 0xFF);
				if (shaHex.length() < 2) {
					hexstr.append(0);
				}
				hexstr.append(shaHex);
			}
			return hexstr.toString();
		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception();
		}
	}

 

 本人的配置:

 URL:*/weixin/signature (*为我外网地址)

 TOKEN:xiaofli007 (我自行填写-任意)

 EncodingAESKey:自动生成(此处不会用到,安全模式下接收消息会用此密钥进行解密)

 点击提交,如果出现以下情况:

    1. URL请求超时:检查本机URL是否能正常访问,外网URL是否能正常访问
    2. TOKEN验证失败:确定signature是否与解密过后的字符串一致,本人此处验证过后返回为JSON
 

  提交成功,则可以进行下一步开发。

三,文档阅读

     1,微信定义的规则,一定要仔细看微信开发文档(http://mp.weixin.qq.com/wiki),无非就是进行接口的调用。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!