1128XF

微信公众平台测试号注册

微信公众号测试号申请地址,http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
 
第一步是配置appID和appsecret,这两个值在个人设置可以看到,是微信给每一位用户提供的属性值,复制即可
第二步配置接口,url是项目中调用微信接口的url,需要是外网地址,可通过ngrok实现外网映射的功能

同时在项目中编写对应的Control层方法:

public static final String TOKEN = "yfkj_xfcamp_token";  
	 @RequestMapping("get")  
	    public void getToken(String signature,String timestamp,String nonce,String echostr,HttpServletResponse response) throws NoSuchAlgorithmException, IOException{  
	        // 将token、timestamp、nonce三个参数进行字典序排序   
	        System.out.println("signature:"+signature);  
	        System.out.println("timestamp:"+timestamp);  
	        System.out.println("nonce:"+nonce);  
	        System.out.println("echostr:"+echostr);  
	        System.out.println("TOKEN:"+TOKEN);  
	        String[] params = new String[] { TOKEN, timestamp, nonce };  
	        Arrays.sort(params);  
	        // 将三个参数字符串拼接成一个字符串进行sha1加密  
	        String clearText = params[0] + params[1] + params[2];  
	        String algorithm = "SHA-1";  
	        String sign = new String(    
	                org.apache.commons.codec.binary.Hex.encodeHex(MessageDigest.getInstance(algorithm).digest((clearText).getBytes()), true));    
	        // 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信    
	        if (signature.equals(sign)) {    
	            response.getWriter().print(echostr);    
	        }    
	} 

  

第三步配置域名,域名即外网域名
第四步,关注测试号,需要关注测试号才可以
最后,往下翻找到网页授权获取用户基本信息
点击修改,输入外网域名,搞定
到此,测试号已成功生成。
编写测试代码,获取用户信息
 
     @GetMapping("login")
	public void login(HttpServletResponse resp) throws IOException {
		// 公众号:
		String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" + "appid=" + appkey.getAppID() + "&"
				+ "redirect_uri=" + appkey.getRedirectUri() + "&" + "response_type=code&" + "scope=snsapi_userinfo&" // snsapi_base
				+ "state=STATE#wechat_redirect";
		/*
		 * String url = "https://open.weixin.qq.com/connect/qrconnect?" +
		 * "appid="+appkey.getAppID()+"&" + "redirect_uri="+appkey.getRedirectUri()+"&"
		 * + "response_type=code&" + "scope=snsapi_base&" +
		 * "state=STATE#wechat_redirect";
		 */
		resp.sendRedirect(url);
	}

	@GetMapping("get/callback")
	public void callback(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		String code = req.getParameter("code");
		ObjectMapper objectMapper = new ObjectMapper();
		String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + "appid=" + appkey.getAppID() + "&"
				+ "secret=" + appkey.getAppSecret() + "&" + "code=" + code + "&" + "grant_type=authorization_code";
		ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
		String str = null;
		if (forEntity.getStatusCodeValue() == 200) {
			str = forEntity.getBody();
		}
		AccessTokenBO accessTokenBO = null;
		try {
			accessTokenBO = objectMapper.readValue(str, AccessTokenBO.class);
		} catch (IOException e) {
			throw new RuntimeException(e.getMessage());
		}
		System.out.println(accessTokenBO.toString());
		url = "https://api.weixin.qq.com/sns/userinfo?" + "access_token=" + accessTokenBO.getAccess_token() + "&"
				+ "openid=" + accessTokenBO.getOpenid() + "&" + "lang=zh_CN";

		forEntity = restTemplate.getForEntity(url, String.class);
		if (forEntity.getStatusCodeValue() == 200) {
			str = forEntity.getBody();
		}
		UserInfoBO userInfoBO = null;
		try {
			userInfoBO = objectMapper.readValue(str, UserInfoBO.class);
		} catch (IOException e) {
			throw new RuntimeException(e.getMessage());
		}
		System.out.println(userInfoBO.toString());
		resp.sendRedirect("/index.html");
	}

  

 
 
 
 
 
 
 
 
 
 
 
 

posted on 2018-04-09 10:03  1128XF  阅读(593)  评论(0编辑  收藏  举报

导航