代码拉取完成,页面将自动刷新
同步操作将从 芦明宝/zhty 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
首页
个人中心未登录
个人中心已登陆
登陆引导
授权
跑步中
跑步暂停
跑步结束
跑步记录
package com.fsd.api;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fsd.context.Request;
import com.fsd.context.ResBody;
import com.fsd.context.annotation.Authentication;
import com.fsd.util.crypto.AES;
import com.fsd.weixin.common.HttpClient;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* @Description
* @Author 芦明宝
* @Date 2019-07-26 9:03
* @Version 1.0
*/
@Controller
@RequestMapping
public class ZhtyApiController {
/**
* 获得微信openid
* @param request
* @param response
* @param code
* @return
*/
@Authentication(anonymous = true)
@ResponseBody
@RequestMapping("/zhty/api/console/getOpenId.htm")
public ResBody getOpenId(Request request, HttpServletResponse response, String code) {
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code="+ code +"&grant_type=authorization_code";
url = url.replace("APPID", "***");
url = url.replace("SECRET", "***");
String returnJson = HttpClient.httpsRequest(url, HttpClient.POST, null);
JSONObject json = JSON.parseObject(returnJson);
return ResBody.success(json);
}
/**
* 微信运动解密
* @param request
* @param response
* @param openid
* @param session_key
* @param encryptedData
* @param iv
* @return
*/
@Authentication(anonymous = true)
@ResponseBody
@RequestMapping("/zhty/api/console/decrypt.htm")
public ResBody decrypt(Request request, HttpServletResponse response, String openid, String session_key, String encryptedData, String iv) {
List<Map<String, Object>> list = null;
try {
AES aes = new AES();
byte[] resultByte = aes.decrypt(encryptedData, session_key, iv);
if(null != resultByte && resultByte.length > 0){
String userInfo = new String(resultByte, "UTF8");
//将微信运动的数据,转换为list
JSONObject userinfo = JSONObject.parseObject(userInfo);
String stepInfoList = userinfo.getString("stepInfoList");
Gson gson = new Gson();
list = gson.fromJson(stepInfoList, new TypeToken<List<Map<String, Object>>>() {}.getType());
}
} catch (Exception e) {
e.printStackTrace();
}
return ResBody.success(list);
}
}
package com.fsd.util.crypto;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
/**
* AES加密
*/
public class AES {
// 算法名称
final String KEY_ALGORITHM = "AES";
// 加解密算法/模式/填充方式
final String algorithmStr = "AES/CBC/PKCS7Padding";
//
private Key key;
private Cipher cipher;
public void init(byte[] keyBytes) {
// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
int base = 16;
if (keyBytes.length % base != 0) {
int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);
keyBytes = temp;
}
// 初始化
Security.addProvider(new BouncyCastleProvider());
// 转化成JAVA的密钥格式
key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
try {
// 初始化cipher
cipher = Cipher.getInstance(algorithmStr);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchPaddingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public byte[] decrypt(String encryptedDataStr, String keyBytesStr, String ivStr) {
byte[] encryptedText = null;
byte[] encryptedData = null;
byte[] sessionkey = null;
byte[] iv = null;
try {
sessionkey = Base64.decodeBase64(keyBytesStr);
encryptedData = Base64.decodeBase64(encryptedDataStr);
iv = Base64.decodeBase64(ivStr);
init(sessionkey);
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
encryptedText = cipher.doFinal(encryptedData);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return encryptedText;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。