微信公众号获取openId、扫一扫功能

微信公众号获取openId、扫一扫功能

一、拥有80端口配置:

1、微信公众号相关配置

2、后台授权获取code、access_token、openid
参考微信开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

二、未拥有80端口配置:

1、需要通过中间服务器(IIS、tomcat)转发获取code然后传递到后台获取access_token和openId
2、微信公众号菜单配置跳转路径:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4ceddbea1632a889&redirect_uri=http://xxxx.com&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirect

三、微信公众号中调用扫一扫:

1、后台获取access_token
	get:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+wxAppID+"&secret="+secret
	注意:需要放入缓存中,有效期2小时  7200S(多次获取会导致access_token失效)

2、根据access_token换去票据ticket
	get:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ accessToken +"&type=jsapi
	注意:需要放入缓存中,有效期2小时  7200S(多次获取会导致ticket失效)

3、生成签名signature
	生成随机字符串:noncestr=UUID.randomUUID().toString();
	取当前时间戳:timestamp = String.valueOf(System.currentTimeMillis() / 1000);
	解码前台传递的URL url = URLDecoder.decode(url);
		注意:前台当前页面的url需要去掉#以后内容
	加密生成签名signature
	String str = "jsapi_ticket="+ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+URLDecoder.decode(urls);
	signature =Util.SHA1(str);

4、将随机字符串、当前时间戳、生成的签名signature、微信公众号的AppID返回给前台

5、前台需要调用config

实例:

//urls:微信当前页面的url(vue应去掉#之后的内容,不带参数)
public WxSignatureOutData getSignature(String urls) {
	WxSignatureOutData outData = new WxSignatureOutData();
	String accessToken = (String) redisUtil.get("access_token");
	if(Util.isEmpty(accessToken)) {
		getAccessToken();
	}
	String noncestr = UUID.randomUUID().toString();//随机字符串
    String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳
    String ticket = (String) redisUtil.get("ticket");
    if(Util.isEmpty(ticket)) {
    	String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ accessToken +"&type=jsapi";//这个url链接和参数不能变
    	Json json = HttpClientUtil.doGet(url);
    	Map<String, Object> map = (Map<String, Object>) JSONObject.parse((String) json.getObj());
    	ticket = (String) map.get("ticket");
    	redisUtil.set("ticket", ticket,7000L);
    }
    String str = "jsapi_ticket="+ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+URLDecoder.decode(urls);
    //6、将字符串进行sha1加密
    String signature =Util.SHA1(str);
    outData.setAppid(wxAppID);
    outData.setNoncestr(noncestr);
    outData.setSignature(signature);
    outData.setTimestamp(timestamp);
    return outData;
}

需要返回给前台的参数

public Class WxSignatureOutData {
	private String timestamp;//时间戳
	
	private String noncestr;//随机字符串
	
	private String signature;//签名signature
	
	private String appid;//appid
	}

获取AccessToken

private void getAccessToken() {
       String accessToken = null;
   	String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+wxAppID+"&secret="+secret;
   	Json json = HttpClientUtil.doGet(url);
       Map<String, Object> map = (Map<String, Object>) JSONObject.parse((String) json.getObj());
       accessToken = (String) map.get("access_token");
       redisUtil.set("access_token", accessToken,7000L);
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值