最新要闻
- 世界今热点:AirPods Pro 2立大功!苹果占据31%真无线耳机市场
- 天天热议:网友吐槽买瓶饮料都要下载APP 网友:是我我扭头就走
- 全球热点!Chrome更新置顶横幅通知:明确不再支持Win7/8.1平台
- 环球速看:价格屠夫 小米4K双99%色域专业显示器2399元(首发3499)
- 天天快播:日本队更衣室留千纸鹤表感谢!国际足联再感谢日本球迷清理看台引热议 高素质
- 世界快讯:日产回应车机更新显示文案待定:车联网激活才可正常使用
- 手机端光追将至:Basemark推出首个移动设备光追基准测试
- 奇瑞汽车站起来了!连续6月销量超10万 破百万辆大关
- 小太阳取暖忘断电7分钟烧掉整间屋!官方科普冬季电器使用指南
- 世界焦点!买到运损保时捷女子要求退一赔三!判了:退车4S店再赔20万
- 焦点快播:吃肉最毁环境、很不环保?国外动物保护主义者抗议肉食让吃素
- “不良剧情直播”污人眼球 抖音出手:禁止虚假炒作、已处罚9万多账号
- 天天热点!醉驾男遇上碰瓷女:给五万要私了嫌贵 结果双双被拘
- 4比1送走韩国 巴西球员轮流摸罗纳尔多双腿蹭欧气 “小熊”说要继续跳舞直到决赛
- 环球微动态丨告别半斤机!小米13全系机身数据出炉:陶瓷/玻璃/素皮集齐了
- 4比1大胜韩国 巴西队赛后集体为球王贝利祈福 女儿称正从肺部感染康复
手机
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
票房这么火爆,如何请视障人士“看”一场电影?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
- 票房这么火爆,如何请视障人士“看”一场电影?
家电
世界视点!浙里办单点登陆、令牌获取用户信息
原文链接:https://blog.csdn.net/qq_41441896/article/details/124636772
浙里办开发票据认证单点登陆、令牌获取用户信息(JAVA后端处理) 最近在搞浙里办开发,周边的人里都没人接触过,以至于自己摸索搞起来比较心累。浙里办单点登陆需要在IRS上走申请,审核流程通过后,和指定的老师对接就可以了。
ak、sk获取 组件申请审核通过后,组件申请提交人可以通过“公共应用组件系统-我申请的组件” https://csss.zj.gov.cn/verifyComList/applyNew 获取 AK/SK 信息。发送ak、sk、回调地址 还有系统名称给易和的老师,发送可以参考我的。
(资料图片仅供参考)
系统名称 XXXXXX系统正式环境回调地址(测试环境发测试的地址) https://mapi.zjzwfw.gov.cn/web/mgop/gov-open/zj/200XXXX676/reserved/index.htmlSecretKey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAccessKey 8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX81234阅读接入文档 通过对文档的阅读,锁定到文档目录4.0.1的票据认证接口和4.2.3的根据令牌获取用户信息接口。
接口调用controller/** * 浙里办用户信息Controller * * @author xxxxxx * @date 2022/4/11 */
import com.ruoyi.common.constant.PipelineConstants;import com.ruoyi.common.core.domain.AjaxResult;import com.ruoyi.common.utils.StringUtils;import com.zjasm.zlb.service.IZlbClientService;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import io.swagger.annotations.ApiParam;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;
@Api("浙里办用户信息")@RestController@RequestMapping("/zlb/client")public class ZlbClientController {
@Autowired private IZlbClientService zlbClientService;
private static final Logger logger = LoggerFactory.getLogger(ZlbClientController.class);
/** * 获取用户临时授权码authCode */ @ApiOperation(value = "获取用户登陆票据ticket", notes = "获取用户登陆票据ticket", httpMethod = "GET") @GetMapping("/getClientTicket/{ticket}") public AjaxResult getClientTicket( @ApiParam(name = "票据ticket", value = "获取用户登陆票据ticket", required = true) @PathVariable String ticket) { if (StringUtils.isEmpty(ticket) || "undefined".equals(ticket)) { return AjaxResult.error(PipelineConstants.MSG_ERROR_PARAMETER_WRONG); } logger.info("获取用户登陆票据ticket=" + ticket); return zlbClientService.getClientTicketCode(ticket); }
/* * 根据令牌获取用户详细信息 */ @ApiOperation(value = "根据令牌token获取用户详细信息", notes = "根据令牌token获取用户详细信息", httpMethod = "GET") @GetMapping("/getClientInfo/{token}") public AjaxResult getClientInfoByToken( @ApiParam(name = "令牌token", value = "需要获取的用户令牌token", required = true) @PathVariable String token) { if (StringUtils.isEmpty(token) || "undefined".equals(token)) { return AjaxResult.error(PipelineConstants.MSG_ERROR_PARAMETER_WRONG); } logger.info("用户令牌token=" + token); return zlbClientService.getClientInfoByToken(token); }
}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061IService接口import com.ruoyi.common.core.domain.AjaxResult;
/** * 浙里办身份认证 * * @author xxxxxx * @date 2022/4/14 */public interface IZlbClientService {
public AjaxResult getClientTicketCode(String ticket);
public AjaxResult getClientInfoByToken(String token);}1234567891011121314service实现类
import com.alibaba.fastjson.JSONObject;import com.ruoyi.common.constant.PipelineConstants;import com.ruoyi.common.core.domain.AjaxResult;import com.ruoyi.common.core.domain.entity.SysRole;import com.ruoyi.common.core.domain.entity.SysUser;import com.ruoyi.common.core.domain.model.LoginUser;import com.ruoyi.common.utils.sign.Md5Utils;import com.ruoyi.framework.web.service.TokenService;import com.ruoyi.system.mapper.SysRoleMapper;import com.zjasm.zlb.model.ZlbClientInfo;import com.zjasm.zlb.model.ZlbTicketClientInfo;import com.zjasm.zlb.service.IZlbClientService;import com.zjasm.zlb.utils.HmacAuthUtil;import com.zjasm.zlb.utils.HttpUtil;import org.apache.http.client.methods.HttpPost;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Service;
import javax.annotation.Resource;import java.text.SimpleDateFormat;import java.util.*;
/** * 浙里办用户认证Service * * @author xxxxxx * @date 2022/4/14 */@Servicepublic class ZlbClientServiceImpl implements IZlbClientService {
/** * token验证处理 */ @Resource private TokenService tokenService; /** * 用户角色表处理 */ @Resource private SysRoleMapper sysRoleMapper;
/** * 初始密钥(仅正式ak和sk,没有测试ak和sk) */ private static final String ACCESS_KEY = "8******************************8"; private static final String APP_SECRET = "0******************************e";
/** * 接口请求 */ private final HttpUtil httpUtil = HttpUtil.getInstance(); /** * 日志打印 */ private static final Logger logger = LoggerFactory.getLogger(ZlbClientServiceImpl.class);
/** * 票据认证 * * @param ticket 票据 * @return 用户认证信息 */ @Override public AjaxResult getClientTicketCode(String ticket) { String url = "https://ibcdsg.zj.gov.cn:8443/restapi/prod/IC33000020220228000002/sso/servlet/simpleauth"; // 接口请求方法 String method = "POST"; // 封装请求参数 Map
@Override public AjaxResult getClientInfoByToken(String token) { String url = "https://ibcdsg.zj.gov.cn:8443/restapi/prod/IC33000020220228000004/sso/servlet/simpleauth"; // 接口请求方法 String method = "POST"; // 封装请求参数 Map
/** * 获取时间戳,当前时间(年月日时分秒) * * @return 时间戳,当前时间(年月日时分秒)例如:2009年10月10日 12时12分12秒格式为20091010121212 */ private static String getSecondTimestamp() { // 时间戳,当前时间(年月日时分秒) SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); return formatter.format(new Date()); }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157utils工具类HmacAuthUtil.javaimport javafx.util.Pair;import lombok.extern.slf4j.Slf4j;
import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import javax.xml.bind.DatatypeConverter;import java.io.UnsupportedEncodingException;import java.net.URI;import java.net.URL;import java.net.URLEncoder;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.*;import java.util.stream.Collectors;
/** * 浙里办加密工具类 */@Slf4jpublic class HmacAuthUtil {
/** * 构造请求 header * * @param urlStr 请求url,全路径格式,比如:https://bcdsg.zj.gov.cn/api/p/v1/user.get * @param requestMethod 请求方法,大写格式,如:GET, POST * @param accessKey 应用的 AK * @param secretKey 应用的 SK * @return */ public static Map
String canonicalQueryString = getCanonicalQueryString(uri.getQuery());
String message = requestMethod.toUpperCase() + "\n" + uri.getPath() + "\n" + canonicalQueryString + "\n" + accessKey + "\n" + date + "\n";
Mac hasher = Mac.getInstance("HmacSHA256"); hasher.init(new SecretKeySpec(secretKey.getBytes(), "HmacSHA256"));
byte[] hash = hasher.doFinal(message.getBytes());
// to lowercase hexits DatatypeConverter.printHexBinary(hash);
// to base64 String sign = DatatypeConverter.printBase64Binary(hash); header.put("X-BG-HMAC-SIGNATURE", sign); header.put("X-BG-HMAC-ALGORITHM", "hmac-sha256"); header.put("X-BG-HMAC-ACCESS-KEY", accessKey); header.put("X-BG-DATE-TIME", date); } catch (Exception e) { log.error("generate error", e); throw new RuntimeException("generate header error"); } log.info("header info,{}", header); return header; }
private static String getCanonicalQueryString(String query) { if (query == null || query.trim().length() == 0) { return ""; } List
List
return queryParamString.substring(0, queryParamString.length() - 1); }}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109HttpUtil.javaimport org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.ssl.DefaultHostnameVerifier;import org.apache.http.conn.util.PublicSuffixMatcher;import org.apache.http.conn.util.PublicSuffixMatcherLoader;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;
import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.List;import java.util.Map;
public class HttpUtil {
private final Logger logger = LoggerFactory.getLogger(getClass());
private final RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(8000) .setConnectTimeout(8000) .setConnectionRequestTimeout(8000) .build();
private static HttpUtil instance = null;
private HttpUtil() { }
public static HttpUtil getInstance() { if (instance == null) { instance = new HttpUtil(); } return instance; }
/** * 发送 post请求 * * @param httpUrl 地址 */ public String sendHttpPost(String httpUrl) { HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost return sendHttpPost(httpPost); }
/** * 发送 post请求 * * @param httpUrl 地址 * @param params 参数(格式:key1=value1&key2=value2) */ public String sendHttpPost(String httpUrl, String params) { HttpPost httpPost = new HttpPost(httpUrl);// 创建httpPost try { //设置参数 StringEntity stringEntity = new StringEntity(params, "UTF-8"); stringEntity.setContentType("application/x-www-form-urlencoded"); httpPost.setEntity(stringEntity); } catch (Exception e) { logger.error(e.getMessage(), e); } return sendHttpPost(httpPost); }
/** * 发送 post请求 * * @param httpUrl 地址 * @param maps 参数 */ public String sendHttpPost(String httpUrl, Map
/** * 发送 post请求 * * @param httpPost 地址 * @param maps 参数 */ public String sendHttpPost(HttpPost httpPost, Map
/** * 发送Post请求 * * @param httpPost * @return */ private String sendHttpPost(HttpPost httpPost) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; HttpEntity entity = null; String responseContent = null; try { // 创建默认的httpClient实例. httpClient = HttpClients.createDefault(); httpPost.setConfig(requestConfig); // 执行请求 response = httpClient.execute(httpPost); entity = response.getEntity(); responseContent = EntityUtils.toString(entity, "UTF-8"); } catch (Exception e) { logger.error(e.getMessage(), e); } finally { try { // 关闭连接,释放资源 if (response != null) { response.close(); } if (httpClient != null) { httpClient.close(); } } catch (IOException e) { logger.error(e.getMessage(), e); } } return responseContent; }
/** * 发送 get请求 * * @param httpUrl */ public String sendHttpGet(String httpUrl) { HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求 return sendHttpGet(httpGet); }
/** * 发送 get请求Https * * @param httpUrl */ public String sendHttpsGet(String httpUrl) { HttpGet httpGet = new HttpGet(httpUrl);// 创建get请求 return sendHttpsGet(httpGet); }
/** * 发送Get请求 * * @param httpGet * @return */ public String sendHttpGet(HttpGet httpGet) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; HttpEntity entity = null; String responseContent = null; try { // 创建默认的httpClient实例. httpClient = HttpClients.createDefault(); httpGet.setConfig(requestConfig); // 执行请求 response = httpClient.execute(httpGet); entity = response.getEntity(); responseContent = EntityUtils.toString(entity, "UTF-8"); } catch (Exception e) { logger.error(e.getMessage(), e); } finally { try { // 关闭连接,释放资源 if (response != null) { response.close(); } if (httpClient != null) { httpClient.close(); } } catch (IOException e) { logger.error(e.getMessage(), e); } } return responseContent; }
/** * 发送Get请求Https * * @return */ private String sendHttpsGet(HttpGet httpGet) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; HttpEntity entity = null; String responseContent = null; try { // 创建默认的httpClient实例. PublicSuffixMatcher publicSuffixMatcher = PublicSuffixMatcherLoader.load(new URL(httpGet.getURI().toString())); DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher); httpClient = HttpClients.custom().setSSLHostnameVerifier(hostnameVerifier).build(); httpGet.setConfig(requestConfig); // 执行请求 response = httpClient.execute(httpGet); entity = response.getEntity(); responseContent = EntityUtils.toString(entity, "UTF-8"); } catch (Exception e) { logger.error(e.getMessage(), e); } finally { try { // 关闭连接,释放资源 if (response != null) { response.close(); } if (httpClient != null) { httpClient.close(); } } catch (IOException e) { logger.error(e.getMessage(), e); } } return responseContent; }}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250实体类票据认证用户信息DTO ZlbTicketClientInfo.java/** * 票据认证用户信息DTO * * @author xxxxx * @date 2022/5/6 */public class ZlbTicketClientInfo {
/** 用户在SSO分配的身份唯一号 */ private String userId;
/** 用户真实姓名 */ @Excel(name = " 用户真实姓名") private String userName;
/** 用户昵称 */ @Excel(name = "登录用户名") private String loginname;
// 用户身份认证标识 private String sign;
// 令牌 private String token;
/*** getter&setter ***/}123456789101112131415161718192021222324252627浙里办用户信息对象VO ZlbClient.java/** * 浙里办用户信息对象VO * * @author xxxxx * @date 2022-05-06 */public class ZlbClient{ private static final long serialVersionUID = 1L;
/** 用户在SSO分配的身份唯一号 */ private String userId;
/** 认证级别 1.匿名 2.实名 3.实人 (当认证级别为2或者3的时候实名信息才有效) */ private String authlevel;
/** 用户真实姓名 */ @Excel(name = " 用户真实姓名") private String userName;
/** 用户昵称 */ @Excel(name = "登录用户名") private String loginname;
/** 证件号码(身份证) */ @Excel(name = "证件号码") private String idnum;
/** 用户性别(1男 2女) */ @Excel(name = "用户性别", readConverterExp = "1=男,2=女") private String sex;
/** 民族 */ @Excel(name = "民族") private String nation;
/** 用户邮箱 */ @Excel(name = "用户邮箱") private String email;
/** 手机号码 */ @Excel(name = "手机号码") private String mobile;
/** 邮编 */ @Excel(name = "邮编") private String postcode;
/** CA证书KEY */ @Excel(name = "CA证书KEY") private String cakey;
/** 生日 */ @Excel(name = "生日") private String birthday;
/** 国籍 */ @Excel(name = "国籍") private String country;
/** 省籍 */ @Excel(name = "省籍") private String province;
/** 城市 */ @Excel(name = "城市") private String city;
/** 办公地址 */ @Excel(name = "办公地址") private String officeaddress;
/** 办公电话 */ @Excel(name = "办公电话") private String officephone;
/** 办公传真 */ @Excel(name = "办公传真") private String officefax;
/** 家庭电话 */ @Excel(name = "家庭电话") private String homephone;
/** 家庭地址 */ @Excel(name = "家庭地址") private String homeaddress;
/** 头像路径 */ @Excel(name = "头像路径") private String headpicture;
/** 帐号状态:0正常,1禁用 */ @Excel(name = "帐号状态:0正常,1禁用") private String status;
/*** getter&setter ***/}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899pom文件MAVEN引入的Jar包比较多,这里简单列举几个必须的。
https://blog.csdn.net/Xiang_Gong_Ya_/article/details/121991249
-
世界视点!浙里办单点登陆、令牌获取用户信息
原文链接:https: blog csdn net qq_41441896 article details 124636772浙里办开发票据认证单...
来源: 世界视点!浙里办单点登陆、令牌获取用户信息
【全球热闻】iOS开发证书发布证书,推送证书,描述文件的生成总集(一)
世界今热点:AirPods Pro 2立大功!苹果占据31%真无线耳机市场
天天热议:网友吐槽买瓶饮料都要下载APP 网友:是我我扭头就走
全球热点!Chrome更新置顶横幅通知:明确不再支持Win7/8.1平台
环球速看:价格屠夫 小米4K双99%色域专业显示器2399元(首发3499)
天天快播:日本队更衣室留千纸鹤表感谢!国际足联再感谢日本球迷清理看台引热议 高素质
世界快讯:日产回应车机更新显示文案待定:车联网激活才可正常使用
手机端光追将至:Basemark推出首个移动设备光追基准测试
奇瑞汽车站起来了!连续6月销量超10万 破百万辆大关
小太阳取暖忘断电7分钟烧掉整间屋!官方科普冬季电器使用指南
世界焦点!买到运损保时捷女子要求退一赔三!判了:退车4S店再赔20万
焦点快播:吃肉最毁环境、很不环保?国外动物保护主义者抗议肉食让吃素
“不良剧情直播”污人眼球 抖音出手:禁止虚假炒作、已处罚9万多账号
天天热点!醉驾男遇上碰瓷女:给五万要私了嫌贵 结果双双被拘
4比1送走韩国 巴西球员轮流摸罗纳尔多双腿蹭欧气 “小熊”说要继续跳舞直到决赛
环球微动态丨告别半斤机!小米13全系机身数据出炉:陶瓷/玻璃/素皮集齐了
4比1大胜韩国 巴西队赛后集体为球王贝利祈福 女儿称正从肺部感染康复
咖喱味越来越浓!消息称苹果调整产业链 国行iPhone/iPad印度产会变多
小米13系列海报曝光!标准版设计如何 跟Pro差别较大
环球速讯:网飞期待《狩魔猎人》新季新气象
每日焦点!开眼了!丰田为电动车推出“手动挡”结构 雷克萨斯实车跑山演示
【天天新视野】全球首发第二代骁龙8!vivo X90 Pro+开售:12+512GB顶配6999元
”摆烂模式“成牛津词典2022年度词 今天你摆烂了吗?
环球讯息:韩国球迷用7比1嘲讽巴西最后惨败 亚洲一哥孙兴慜称尽力:网友直言自取其辱
天天视点!7399买吗?AMD RX 7900XTX性能首曝光:对比4080/90结果意外
【全球时快讯】比亚迪纯电神车海豚哥伦比亚发布:405km续航、搭刀片电池
全球热文:11月新能源汽车销量再创新高:比亚迪一骑绝尘 甩远特斯拉
世界热头条丨市场仍低迷!预计2022年全球智能手机出货量下降9.1%
【独家】柯洁直播透露斥巨资进军餐饮:光装修花了1800万 品质、价位无敌
世界今热点:日本点球战2-4负克罗地亚、巴西4-1大胜韩国:亚洲球队世界杯全部出局
“侃爷”怀疑马斯克是半个中国人!本人神回应
你每天都在用的餐具 用错等于慢性“投毒”!小心这7类材料
中国人搞锂到底有多狠?美国都开始耍花招了!
天天日报丨当年那些卖伟哥的垃圾邮件:一天就能赚7000美元!
观焦点:100年前的导演拍出“摘头”特效:就问你服不服
快报:网传上海工厂将主动减产20% 特斯拉回应:不实消息
今热点:长沙一SUV高速上失控狂飙500公里引热议 刹车为何同时失灵?专家释疑
小米上一代旗舰12S Pro降至4699元!传小米13也差不多卖这价
世界微动态丨电费飙升 日本最强超算用不上起了:临时关闭30%节点
2022十佳游戏公布:第一名《战神5》
全球要闻:女子头胎生龙凤胎 2胎又生双胞胎:众网友顶礼膜拜
国服花落谁家?暴雪心血大作《暗黑破坏神4》:要正式来了
NVIDIA坐不住了:要用1年时间干掉游戏显卡市场一切乱象
天天微资讯!仅上线不到一年!字节跳动旗下阅读App识区宣布停运
连续泄露小米13真机!百万粉汽车大V公开道歉 愿意接受处罚
【世界报资讯】恒驰汽车累计被执行超1亿元 研究院曾同一天5次成老赖
【天天新视野】日本神嘴鹦鹉冲上微博热搜榜:预测日本晋级
上海一轿车冲下数十米高架:车顶塌陷、摔成铁饼
手机飞行模式将成过去时 欧盟明年允许飞机上开5G
荣耀Magic Vs推出个性化服务:手机铰链处可自定义镌刻
每日速看!小直屏+直边方向对了!小米13预约数领先Pro版:核心配置完全同步
世界信息:加码VR头显!苹果大力招募神经渲染研究人员
米粉建议小米13发布会直接说价格 魏思琪:料还有很多
妈妈带女儿在自家保时捷上作画:网友质疑
讯息:今晚油价“二连降”!92号汽油重回“7元时代”:加满少花17.5元
元旦假期还有三周时间 机票平均价格上涨30%:贵过黄金周
小米在德国推出米家烹饪机器人!看到价格我就放心了
RTX 4080被曝要降价了!可不是惧怕AMD RX 7900
天天资讯:米粉谈小米12S Ultra给他的最大印象:拍照不可思议
爱美不容易!穿错高跟鞋可能会带来身体伤害:弓形腿、骨盆前倾
全球微资讯!氢能源真是未来?丰田海拉克斯氢燃料电池版发布:坐在气罐上开
微星笔记本双12活动来袭:学生再享立减100+三期免息
天天热议:报告:特斯拉美国车主更易遭路怒症找茬 有车主一月被别八次
环球视讯!联想搭建 美国全新高性能计算机成全球史上能效最高产品
车主打开特斯拉“宠物模式” 将牧羊犬留在车内!回来一看崩溃
全球快看点丨内马尔iPhone 14 Pro大力神杯壁纸引热议:明晨或伤愈回归出战韩国队
世界今亮点!仅11kg通勤神器 九号电动滑板车跌破千元:直降600元
天天快看点丨日系车慌不慌?比亚迪进军日本:首车确认为元Plus 23万
每日速递:近10年显卡涨价多恐怖?GTX780到RTX4090/80 售价快翻一倍 NV血赚
焦点观察:合资中型轿车新敌 国产豪华红旗H6实车亮相:罕见双中置排气
焦点关注:10.3英寸大屏加持!联想YOGA Paper墨水平板开启预售:到手2699元
潮州特斯拉“失控”撞人事故进展:车主仍未拿到数据 鉴定机构不一般
世界快资讯:支持更多游戏!新版免费PS4模拟器成了:配置要求亲民
世界速读:Win10快升级!微软又为Win11铺路:用户不愿升级四大原因被指扎心
HTC:明年上半年将发布新一代的VR产品
环球微资讯!23岁姆巴佩一战刷新多项纪录 弯道超车传球:英格兰与法国会师8强
环球播报:办婚礼后发现女友“已婚” 微信发的520红包能要回来吗?法院判了
天天热讯:神舟十四号航天员乘组平安抵京 将进行全面医学检查
焦点热议:《原神》获PS年度大奖 米哈游800原石免费送:有等级限制
环球看热讯:摊上事!马斯克:如果我突然死亡 肯定不是自杀
突破100多年局限!中国科大实现非接触心电图实时监测:不用脱衣佩戴电极
今日视点:大众ID系列被曝大面积车机故障 车主维权 回应来了:已有技术解决方案
当前最新:被环保逼疯的船东们 造的船一个比一个赛博朋克
拼多多变成天猫?我感觉 这业绩多少有点变态了
每日快播:为什么只有饿死的狮子 没有饿死的老虎?晚年有啥不一样?
全球微速讯:00后女大学生做宿舍美甲月入过万:没毕业就开店、买车了
今日快看!神舟十四号返回舱呈水平状态着陆:3名航天员报告感觉良好
播报:神十四回家了!刘洋出舱挥手笑得好甜、陈东第一个在轨超200天航天员
SMS短信技术问世30周年:谷歌再次嘲讽苹果“活在90年代”
【环球新要闻】神舟十四号返回舱成功着陆!太空出差半年回家了
环球看点!玩家买到诡异的GTX Titan X卡皇:五个接口 少了仨
世界热议:三位币圈大佬先后意外去世!29岁溺亡、30岁睡死、53岁坠机
世界播报:抗衰药物有进展:丹麦科学家称人类寿命可被延长至200年
全球速递!库克约马斯克私下见面后:靠个人魅力把他征服了
【播资讯】史上最贵数字旗舰?曝小米13系列将发布:起售价4299元
加宽无勒感:大嘴猴四角裤29元3条
榴莲、山竹便宜了!水果专列开通:543吨一次拉回国
【天天报资讯】球迷看台打哈欠!这届世界杯为何这么让人昏昏欲睡:0比0场次历史第二
世界快看点丨男子喂养山中白狐收到灵芝馈赠:真这么灵性?有人质疑摆拍