Compare commits

...

3 Commits

Author SHA1 Message Date
ck 2e0524ef52 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	src/main/java/com/bsd/say/service/impl/WeixinService.java
5 years ago
ck 5a59d1dfac up 5 years ago
ck 963d595787 js sdk 签名 5 years ago

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.api.R;
import com.bsd.say.beans.AjaxRequest;
import com.bsd.say.beans.AjaxResult;
import com.bsd.say.entities.Record;
import com.bsd.say.mapper.RecordMapper;
@ -29,6 +30,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Map;
@RestController
@RequestMapping("wechat")
@ -151,10 +153,60 @@ public class WechatController {
String resutl = HttpRequestUtils.sendGet("https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + decode + "&openid=" + openId + "&lang=zh_CN");
JSONObject jsonObject = JSONObject.parseObject(resutl);
Integer subscribe = jsonObject.getInteger("subscribe");
weixinService.insertRecord(openId,subscribe);
logger.info("subscribe"+ subscribe);
Record recordByOpenId = recordMapper.selectOne(Wrappers.<Record>lambdaQuery().eq(Record::getOpenId,openId)
.and(queryWrapper1 -> queryWrapper1.eq(Record::getState,1)));
if (subscribe == 0){
//未关注公众号
if (recordByOpenId == null){
logger.info("新粉丝第一次进入");
Record record = new Record();
record.setOpenId(openId);
record.setFan("新粉丝");
record.setCreateDateTime(new Date());
recordMapper.insert(record);
}else {
logger.info("游客访问过,但未关注");
}
}else {
//关注过公众号
if (recordByOpenId == null){
logger.info("老粉丝第一次进入");
Record record = new Record();
record.setOpenId(openId);
record.setFan("老粉丝");
record.setCreateDateTime(new Date());
recordMapper.insert(record);
}else {
logger.info("老粉丝访问过,已关注");
}
}
AjaxResult ajaxResult = new AjaxResult();
ajaxResult.setData(jsonObject);
return ajaxResult;
}
@RequestMapping("get-sign")
public AjaxResult getSign(@RequestBody AjaxRequest ajaxRequest){
AjaxResult ajaxResult = new AjaxResult();
JSONObject data = ajaxRequest.getData();
if (data == null){
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("data missing");
return ajaxResult;
}else {
String url = data.getString("url");
if (StringUtils.isEmpty(url)){
ajaxResult.setRetcode(AjaxResult.FAILED);
ajaxResult.setRetmsg("url missing");
return ajaxResult;
}else {
Map<String,String> sign = weixinService.getSign(url);
ajaxResult.setRetmsg("SUCCESS");
ajaxResult.setRetcode(AjaxResult.SUCCESS);
ajaxResult.setData(sign);
}
}
return ajaxResult;
}
}

@ -10,6 +10,7 @@ import com.bsd.say.service.WxOpenServiceDemo;
import com.bsd.say.util.AESWithJCEUtils;
import com.bsd.say.util.HttpRequestUtils;
import com.bsd.say.util.LogUtils;
import com.bsd.say.util.wechat.Sign;
import com.sun.org.apache.bcel.internal.generic.NEW;
import me.chanjar.weixin.open.api.impl.WxOpenInRedisConfigStorage;
import me.chanjar.weixin.open.api.impl.WxOpenMessageRouter;
@ -49,6 +50,8 @@ public class WeixinService extends WxOpenServiceImpl {
private String getUnionIdUrl;
@Value("${wechat.getWxUserInfoUrl}")
private String getWxUserInfoUrl;
@Value("${wechat.getTicketUrl}")
private String getTicketUrl;
@Resource
private RedisTemplate redisTemplate;
@Resource
@ -148,6 +151,30 @@ public class WeixinService extends WxOpenServiceImpl {
return jsonObject;
}
/**
* accessTokenticket
*/
public String getTicket(){
String result1 = HttpRequestUtils.sendGet("https://api.weq.me/wx/token.php?id=15969759463491&key=1234567890123456");
JSONObject result2 = JSONObject.parseObject(result1);
String access_token = result2.getString("access_token");
String getTicketNewUrl = getTicketUrl + access_token + "&type=jsapi";
String ticketResult = HttpRequestUtils.sendGet(getTicketNewUrl);
JSONObject ticketJson = JSONObject.parseObject(ticketResult);
String jsapi_ticket = ticketJson.getString("ticket");
// redisTemplate.opsForValue().set("jsapi_ticket",jsapi_ticket);
return jsapi_ticket;
}
public Map<String,String> getSign(String url){
String jsapiTicket = getTicket();
logger.info("jsapiTicket:"+ jsapiTicket);
Map<String,String> sign = Sign.sign(jsapiTicket,url);
sign.put("appId",appId);
logger.info("sign:" + sign);
return sign;
}
/**
*
* @param openId

@ -0,0 +1,86 @@
package com.bsd.say.util.wechat;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* CK
* 2020/8/12
* JS-SDK使
*/
public class Sign {
public static void main(String[] args) {
String jsapi_ticket = "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg";
// 注意 URL 一定要动态获取,不能 hardcode
String url = "http://mp.weixin.qq.com?params=value";
Map<String, String> ret = sign(jsapi_ticket, url);
for (Map.Entry<String,String> entry : ret.entrySet()) {
System.out.println(entry.getKey() + ", " + entry.getValue());
}
}
public static Map<String, String> sign(String jsapi_ticket, String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"&timestamp=" + timestamp +
"&url=" + url;
// System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}

@ -54,6 +54,7 @@ wechat:
getAccessTokenUrl: https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=
getUnionIdUrl: https://api.weixin.qq.com/sns/userinfo?access_token=
getWxUserInfoUrl: https://api.weixin.qq.com/cgi-bin/user/info?access_token=
getTicketUrl: https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=
bsd:

Loading…
Cancel
Save