Spring Boot+Vue前后端分离微信公众号网页授权解决方案
一、引言
全网最全的前后端分离微信网页授权解决方案。如果有更好的优化方案,欢迎多多交流
二、网页授权的步骤
1 第一步:用户同意授权,获取code
2 第二步:通过code换取网页授权access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
5 附:检验授权凭证(access_token)是否有效
注意:这里的access_token属于网页授权access_token,而非普通授权的access_token,官方给出的解释如下:
关于网页授权access_token和普通access_token的区别 1、微信网页授权是通过OAuth2.0机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息; 2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。
但是没有讲得很明白。其实两者的区别就是:
第一,网页授权access_token只要用户允许后就可以获取用户信息,可以不关注公众号,而普通access_token没有关注公众号,获取用户信息为空;
第二,两者的每日限制调用频次不同,普通access_token每日2000次,获取网页授权access_token不限次数,获取用户信息每日5万次。
三、后端接入
后端采用开源工具weixin-java-tools
3.1 pom.xml引入jar包
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>3.8.0</version></dependency>
3.2 application.yml添加配置
这里换成自己的appid和appsecret
# 微信公众号wechat: mpAppId: appid mpAppSecret: appsecret
3.3 新建读取配置文件WechatMpProperties.java
package com.hsc.power.dm.wechat.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;/** * 微信公众号配置文件 * * @author liupan * @date 2020-05-26 */@Data@Component@ConfigurationProperties(prefix = "wechat")public class WechatMpProperties { private String mpAppId; private String mpAppSecret;}
3.4 新建自定义微信配置WechatMpConfig.java
package com.hsc.power.dm.wechat.config;import me.chanjar.weixin.mp.api.WxMpService;import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;import me.chanjar.weixin.mp.config.WxMpConfigStorage;import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;/** * 微信公众号配置 * * @author liupan * @date 2020-05-26 */@Componentpublic class WechatMpConfig { @Autowired private WechatMpProperties wechatMpProperties; /** * 配置WxMpService所需信息 * * @return */ @Bean // 此注解指定在Spring容器启动时,就执行该方法并将该方法返回的对象交由Spring容器管理 public WxMpService wxMpService() { WxMpService wxMpService = new WxMpServiceImpl(); // 设置配置信息的存储位置 wxMpService.setWxMpConfigStorage(wxMpConfigStorage()); return wxMpService; } /** * 配置appID和appsecret * * @return */ @Bean public WxMpConfigStorage wxMpConfigStorage() { // 使用这个实现类则表示将配置信息存储在内存中 WxMpDefaultConfigImpl wxMpDefaultConfig = new WxMpDefaultConfigImpl(); wxMpDefaultConfig.setAppId(wechatMpProperties.getMpAppId()); wxMpDefaultConfig.setSecret(wechatMpProperties.getMpAppSecret()); return wxMpDefaultConfig; }}
3.5 新建微信用户Bean
package com.hsc.power.dm.wechat.vo;import lombok.Data;import me.chanjar.weixin.mp.bean.result.WxMpUser;@Datapublic class WechatUser { public WechatUser(WxMpUser wxMpUser, String accessToken) { this.setAccessToken(accessToken); this.setOpenid(wxMpUser.getOpenId()); this.setUnionId(wxMpUser.getUnionId()); this.setNickname(wxMpUser.getNickname()); this.setLanguage(wxMpUser.getLanguage()); this.setCountry(wxMpUser.getCountry()); this.setProvince(wxMpUser.getCity()); this.setCity(wxMpUser.getCity()); this.setSex(wxMpUser.getSex()); this.setSexDesc(wxMpUser.getSexDesc()); this.setHeadImgUrl(wxMpUser.getHeadImgUrl()); } private String openid; private String accessToken; private String unionId; private String nickname; private String language; private String country; private String province; private String city; private Integer sex; private String sexDesc; private String headImgUrl;}
3.6 授权接口WechatController.java
/auth:获取授权跳转地址
/auth/user/info:初次授权获取用户信息
/token/user/info:静默授权获取用户信息
package com.hsc.power.dm.wechat.web;import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;import com.hsc.power.core.base.ret.Rb;import com.hsc.power.dm.wechat.vo.WechatUser;import lombok.extern.slf4j.Slf4j;import me.chanjar.weixin.common.api.WxConsts;import me.chanjar.weixin.common.error.WxErrorException;import me.chanjar.weixin.mp.api.WxMpService;import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;import me.chanjar.weixin.mp.bean.result.WxMpUser;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.net.URLEncoder;/** * 微信公众号接口 * * @author liupan * @date 2020-05-26 */@Slf4j@RestController@RequestMapping("/wechat")public class WechatController { @Autowired private WxMpService wxMpService; /** * 获取code参数 * * @param returnUrl 需要跳转的url * @return */ @GetMapping("/auth") public Rb<String> authorize(@RequestParam String authCallbackUrl, @RequestParam String returnUrl) { // 暂时将我们的回调地址硬编码在这里,方便一会调试 // 获取微信返回的重定向url String redirectUrl = wxMpService.oauth2buildAuthorizationUrl(authCallbackUrl, WxConsts.OAuth2Scope.SNSAPI_USERINFO, URLEncoder.encode(returnUrl)); log.info("【微信网页授权】获取code,redirectUrl = {}", redirectUrl); return Rb.ok(redirectUrl); } /** * 初次授权获取用户信息 * * @param code * @param returnUrl * @return */ @GetMapping("/auth/user/info") public Rb<WechatUser> userInfo(@RequestParam("code") String code, @RequestParam("state") String returnUrl) { WxMpOAuth2AccessToken wxMpOAuth2AccessToken; WxMpUser wxMpUser; try { // 使用code换取access_token信息 wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code); wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null); } catch (WxErrorException e) { log.error("【微信网页授权】异常,{}", e); throw ExceptionUtils.mpe(e.getError().getErrorMsg()); } // 从access_token信息中获取到用户的openid String openId = wxMpOAuth2AccessToken.getOpenId(); log.info("【微信网页授权】获取openId,openId = {}", openId); WechatUser wechatUser = new WechatUser(wxMpUser, wxMpOAuth2AccessToken.getAccessToken()); return Rb.ok(wechatUser); } /** * 静默授权获取用户信息,判断accessToken是否失效,失效即刷新accecssToken * @param openid * @param token * @return */ @GetMapping("/token/user/info") public Rb<WechatUser> getUserInfo(@RequestParam String openid, @RequestParam String token) { WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken(); wxMpOAuth2AccessToken.setOpenId(openid); wxMpOAuth2AccessToken.setAccessToken(token); boolean ret = wxMpService.oauth2validateAccessToken(wxMpOAuth2AccessToken); if (!ret) { // 已经失效 try { // 刷新accessToken wxMpOAuth2AccessToken = wxMpService.oauth2refreshAccessToken(wxMpOAuth2AccessToken.getRefreshToken()); } catch (WxErrorException e) { log.error("【微信网页授权】刷新token失败,{}", e.getError().getErrorMsg()); throw ExceptionUtils.mpe(e.getError().getErrorMsg()); } } // 获取用户信息 try { WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null); WechatUser wechatUser = new WechatUser(wxMpUser, wxMpOAuth2AccessToken.getAccessToken()); return Rb.ok(wechatUser); } catch (WxErrorException e) { log.error("【微信网页授权】获取用户信息失败,{}", e.getError().getErrorMsg()); throw ExceptionUtils.mpe(e.getError().getErrorMsg()); } }}
四、前端接入
4.1 路由拦截
noAuth配置是否需要授权页面
router.beforeEach((to, from, next) => { // 微信公众号授权 if (!to.meta.noAuth) { // 路由需要授权 if (_.isEmpty(store.getters.wechatUserInfo)) { // 获取用户信息 if ( !_.isEmpty(store.getters.openid) && !_.isEmpty(store.getters.accessToken) ) { // 存在openid和accessToken,已经授过权 // 判断accessToken是否过期,过期刷新token,获取用户信息 store.dispatch('getUserInfo') next() } else { // todo 跳转网页授权 // 记录当前页面url localStorage.setItem('currentUrl', to.fullPath) next({name: 'auth'}) } } else { // todo 已经存在用户信息,需要定期更新 next() } } else { // 路由不需要授权 next() }})
4.2 授权页面
{ path: '/auth', name: 'auth', component: resolve => { require(['@/views/auth/index.vue'], resolve) }, meta: { noAuth: true }},
<template></template><script>import config from '@/config'import WechatService from '@/api/wechat'export default { mounted() { WechatService.auth(config.WechatAuthCallbackUrl).then(res => { if (res.ok()) { // 获取授权页面后直接进行跳转 window.location.href = res.data } }) }}</script>
4.3 授权store
在vuex中进行授权和存储用户信息
import _ from 'lodash'import WechatService from '@/api/wechat'import localStorageUtil from '@/utils/LocalStorageUtil'export default { state: { unionId: '', openid: '', accessToken: '', wechatUserInfo: {} }, getters: { unionId: state => { return state.unionId || localStorageUtil.get('unionId') }, openid: state => { return state.openid || localStorageUtil.get('openid') }, accessToken: state => { return state.accessToken || localStorageUtil.get('accessToken') }, wechatUserInfo: state => { return state.wechatUserInfo || localStorageUtil.get('wechatUserInfo') } }, mutations: { saveWechatUserInfo: (state, res) => { state.wechatUserInfo = res // todo 保存到storage,设置一定日期,定期更新 state.unionId = res.unionId state.openid = res.openid state.accessToken = res.accessToken localStorageUtil.set('unionId', res.unionId) localStorageUtil.set('openid', res.openid) localStorageUtil.set('accessToken', res.accessToken) // 保存userInfo,设置有效时间,默认30天 localStorageUtil.set('wechatUserInfo', res, 30) } }, actions: { // 静默授权获取用户信息 async getUserInfo({ commit, getters }) { const openid = getters.openid const token = getters.accessToken if (!_.isEmpty(openid) && !_.isEmpty(token)) { // 存在openid和accessToken,已经授过权 // 判断accessToken是否过期,过期刷新token,获取用户信息 const res = await WechatService.getUserInfo(openid, token) if (res.ok()) { // todo 判断res.data是否有误 commit('saveWechatUserInfo', res.data) } } }, // 初次授权获取用户信息 async getAuthUserInfo({ commit }, { code, state }) { if (!_.isEmpty(code) && !_.isEmpty(state)) { const res = await WechatService.getAuthUserInfo(code, state) if (res.ok()) { commit('saveWechatUserInfo', res.data) } } } }}
4.4 自定义存储工具localStorageUtil.js
localStorageUtil.js:用于设置保存有效期
在这里,用户信息设置保存30天,根据前面4.1路由拦截判断,用户信息过期,需要重新进行授权认证。感觉这种方式不太好,但是获取用户信息每月限制5万次,不想每次都去调用接口获取用户信息,这里有更好的方案吗?
import _ from 'lodash'import moment from 'moment'export default { /** * 获取session-storage 中的值 * @param {*} key * @param {*} defaultValue */ get(key, defaultValue) { return this.parse(key, defaultValue) }, /** * 放入 session-storage 中,自动字符串化 obj * @param {*} key * @param {*} obj * @param {Integer} expires 过期时间:天 */ set(key, obj, expires) { if (expires) { const tmpTime = moment() .add(expires, 'days') .format('YYYY-MM-DD') const handleObj = { expires: tmpTime, value: obj } localStorage.setItem(key, JSON.stringify(handleObj)) } else { if (_.isObject(obj)) { localStorage.setItem(key, JSON.stringify(obj)) } else { localStorage.setItem(key, obj) } } }, /** * 从 session-storage 中移除key * @param {*} key */ remove(key) { localStorage.removeItem(key) }, /** * 从 session-storage 取出key并将值对象化 * @param {*} key * @param {*} defaultValue */ parse(key, defaultValue) { let value = localStorage.getItem(key) if (_.isObject(value)) { const valueObj = JSON.parse(value) if (valueObj.expires) { // 有过期时间,判断是否过期:在现在时间之前,过期 if (moment(valueObj.expires).isBefore(moment(), 'day')) { // 删除 this.remove(key) // 直接返回 return null } return valueObj.value } // 没有过期时间直接返回对象 return valueObj } // 不是对象,返回值 return value || defaultValue }}
至此大功告成,在微信开发者工具中即可获取用户信息,亲测有效。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 在命令窗口如何退出命令窗口的文本输入回到命令行
退出文本编辑 第一种情况(不普遍)使用cd 等命令进入命令窗口下的文本输入情况如图1所示: 图1在这种情况下则按Ctrl+C则可退出!!第二种情况(普遍)使用vi命令进入文本编辑器时退出先在键盘按Esc按键:再输入一下命令不保存退出::q 不保存文件并退出vi 编辑 :q!不保存文件…...
2024/4/21 17:10:21 - 单自由度线性系统的自由振动(一)
...
2024/4/17 13:29:32 - WPF数据绑定2
数据绑定数据绑定连接源数据(Source)和目标数据(Target)当数据变化的时候,通知绑定的目标,需要实现额外的接口。比如INotifyPropertyChanged。BindingOperations.SetBinding()的三个参数,第一个目标Traget,第二个是目标属性,这是一个依赖属性。Static readonly dependenc…...
2024/4/28 2:00:19 - 软件构造设计模式及图解
软件构造设计模式及图解 结构型模式 1.1 适配器模式 适配器模式中的有以下的四种角色: **目标(target):**定义客户端使用的与特定领域相关的接口。 **被适配者(adaptee):**定义了一个已经存在的接口,这个接口需要匹配。 **适配者(adapter)😗*对Adaptee的接口与target的接…...
2024/4/28 2:56:38 - 智能指针auto_ptr、unique_ptr、scoped_ptr、shared_ptr、weak_ptr
智能指针auto_ptr、unique_ptr、scoped_ptr、shared_ptr、weak_ptr1. auto_ptr1.1 作用1.2 缺陷2. unique_ptr3. scoped_ptr4. shared_ptr5. weak_ptr 我们在写代码的时候经常会发生内存泄露情况,如忘记释放堆上指针、在释放前抛出了异常、多线程情况下的问题,这些都是我们不…...
2024/4/14 13:48:38 - UDP组播通信(解决端口复用的问题)
最近在写一个组播通信的功能,结果发现接受同一台电脑上只能运行一个接收端,如果运行两个时,第二个运行的程序不能收到数据。查找原因是因为没有设置端口数据复用的功能(setsockpot),setsockpot的调用见代码。//发送端 // Send.cpp : 此文件包含 "main" 函数。程…...
2024/4/14 13:49:45 - YOLOv2训练DOTA数据集
YOLOv2训练DOTA数据集 环境准备安装darknet darknet是小众的深度学习框架,它易于安装,没有任何依赖项,源代码结构清晰,便于修改,可移植性强。 developmert kit cuda-10.0 and cudnn-7.6.4 on Ubuntu 16.04.1 LTS 下载预训练卷积层权重 下载数据集DOTA-v1.5或DOTA-v1.0数据…...
2024/4/17 3:03:57 - css动画基础
文章阅读大概需要五分钟,从动画基础原理,常用的动画制作,以及动画优化方面进行讲解 推荐一款动画设计工具https://www.w3cways.com/css3-animation-tool矩阵变换 在css中矩阵变换主要包括 transfrom: matrix3d(a00, a10, a20, a30, a01, a11, a21, a31, a02, a12, a22, a32,…...
2024/4/28 3:51:37 - Android--内存优化
1.定义 优化处理 应用程序的内存使用、空间占用2.作用 避免因不正确使用内存 & 缺乏管理,从而出现 内存泄露(ML)、内存溢出(OOM)、内存空间占用过大 等问题,最终导致应用程序崩溃(Crash)3.Android 内存管理机制针对进程的内存策略 内存分配策略 由 ActivityManager…...
2024/4/14 13:50:10 - SpringBoot学习01——SpringBoot入门
简介 Spring Boot简化Spring应用开发,约定大于配置,去繁从简,是整个Spring技术栈的大整合、是J2EE的一站式解决方案。让开发者从一个十分微小的入口,就可以打开J2EE的大门。 优点快速创建独立运行的Spring项目以及与主流框架集成 使用嵌入式的Servlet容器,应用无需打成WAR…...
2024/4/16 14:32:19 - 手把手教你把网页转为.exe文件.
你是否想过把网页变成一个电脑软件,但可是上某度一搜映入眼帘的全是网页转app,网页转apk的软件:What?全是封装手机的!于是,经过了我一番疯狂的DFS与BFS终于找到了Node.js这款软件.是不是已经迫不及待啦!下面就是上Hyperlink的时间了!⛓想下载快戳我⛓安装时有可能会弹出PowerS…...
2024/4/28 0:34:32 - 检测是否存在u盘盘符
如果你嫌看代码麻烦,可以直接下载Demo程序可以下载 u盘的拔插容量卷标盘符判断检测.zip 主要的功能函数如下:uses uSelectDriveRemovable; {$R *.dfm}procedure TForm20.FormCreate(Sender: TObject); beginbtn_toSD.Enabled := ChkDriveRemovable; end;//u盘的 插入和删除wi…...
2024/4/20 5:49:27 - JAVA常用类 Math、Arrays、System
JAVA常用类 Math、Arrays、System1.Math2.Arrays3.System 1.Math java.lang.Math: double Math.random(): 返回0.0~1.0 之间的随机数 double Math.pow(double a, double b): 返回 a 的 b 次幂 2.Arrays java.util.Arrays: String Arrays.toString(数组): 以[元素1, 元素2]格式打…...
2024/4/17 0:59:46 - leetcode每日一题训练7.12
题目要求 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。…...
2024/4/14 14:11:17 - T131分割回文串
错误示范: 先按len=1,进行拆分,再按len=2… 但是如果s中剩下的字串无法构成长度为curLen的回文串时,这时候这种思路就出问题了,剩下的串是否为回文串,不是回文串的话,它们是否能拆成回文串如;剩下的串为aab时,明显不是回文,但它能拆成两个回文aa,b所以。这种思路不行 …...
2024/4/14 13:50:20 - leetcode-174-地下城游戏
动态规划 注意一个最重要的条件,如果勇士的血量小于1,那么英雄就挂了,所以转移方程 dp[i][j]=max(min(dp[i+1][j],dp[i][j+1])−dungeon(i,j),1) 。也就是说勇士的血量最小都要是1,保证勇士能够活着见到公主。 // @lc code=start /*** @param {number[][]} dungeon* @retur…...
2024/4/25 6:00:56 - 自动化编译运行MASM/TASM代码
利用终端自动化编译运行MASM/TASM代码 如果需要配置方法,请参考notepad++配置自动化编译运行TASM的方法 notepad++配置自动化编译运行MASM的方法 VSCode配置自动化编译运行的简单方法 VSCode配置自动化运行较完备方法,推荐如何与dosbox交互要自动化编译运行,肯定需要使用dos…...
2024/4/14 13:50:15 - win7卸载avast杀毒软件的步骤--win10专业版
有很多win7系统用户都喜欢在电脑中安装这款avast杀毒软件,但是使用一段时间之后,想要将其卸载,却不知道要从何下手,那么win7系统怎么彻底卸载avast杀毒软件呢?针对此疑问,小编和大家说说卸载方法。第一种方法:1.安全模式启动Windows;2.打开(执行)卸载工具;3.如果你把…...
2024/4/14 13:49:34 - 最近用阿里云服务器常用命令
查看启用的端口:netstat -nptlnginx查看nginx配置是否正确nginx -t重启nginxnginx -s reload...
2024/4/1 3:53:22 - 了秋
远山灵石沐暖阳, 延季佳景已迢迢。 落叶扫尽把秋了, 谁人遥遥采风景。 新客轻风吻额头, 藤蔓裸枝红满株。 2019,11,28日...
2024/4/4 19:54:10
最新文章
- 用fgets()替换fscanf()解决文件读取在小熊猫C++失败问题
fscanf()遇到空格就结束读取,导致文件读取数据没完就退出读取以至于不能导入游戏地图工程。 看看到右侧小方块轨迹知晓采样区移动情况 也已经实现摄像机追随玩家效果 // 程序:2D RPG 地图编辑器与摄像机追随 // 作者࿱…...
2024/4/28 6:46:16 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - java的gradle,maven工程中使用selenium
一、下载selenium库 (1)gradle工程 工程中会有一个build.gradle.kts的文件,这个文件可以定制 Gradle 的行为 在文件中添加下面代码,然后sync // implementation ("org.seleniumhq.selenium:selenium-java:4.19.1") …...
2024/4/24 9:20:47 - N5171B是德科技N5171B信号发生器
181/2461/8938产品概述: N5171B EXG 射频模拟信号发生器具有最佳的 EXG,旨在满足您对组件参数测试和接收器校准的信号需求。其出色的硬件性能可提供更快的吞吐量、更长的正常运行时间以及极好的准确性和可重复性。 Agilent / HP N5171B EXG 射频模拟信…...
2024/4/27 10:27:08 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/28 3:28:32 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/28 1:22:35 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57