首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java微信公众平台开发(十一)--微信JSSDK中Config配置 (一)在微信公众平台绑定安全域名(二)后端接口实现JS-SDK配置需要的参数 (三)页面实现JS-SDk中con

Java微信公众平台开发(十一)--微信JSSDK中Config配置 (一)在微信公众平台绑定安全域名(二)后端接口实现JS-SDK配置需要的参数 (三)页面实现JS-SDk中con

作者头像
用户2417870
发布于 2019-09-18 03:31:40
发布于 2019-09-18 03:31:40
3.2K00
代码可运行
举报
文章被收录于专栏:g歌德ag歌德a
运行总次数:0
代码可运行

JSSDK曾经引爆前端以及后端的工程师,其魔性的力量毋庸置疑,在我们的技术眼里它的实现原理和根本是不能够被改变的,这篇文章就不对其js的实现做任何评价和解说了(因为我也不是很懂,哈哈),这里要说的是它的config配置实现,参考文档:http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包,通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验;本篇将面向网页开发者介绍微信JS-SDK如何使用及相关注意事项!JSSDK使用步骤:

  • 步骤一:在微信公众平台绑定安全域名
  • 步骤二:后端接口实现JS-SDK配置需要的参数
  • 步骤三:页面实现JS-SDk中config的注入配置,并实现对成功和失败的处理

(一)在微信公众平台绑定安全域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”(如下图),如果需要使用支付类接口,需要确保支付目录在支付的安全域名下,否则将无法完成支付!(注:登录后可在“开发者中心”查看对应的接口权限),因为我用的是测试号,所以登录以后界面就如下图:

(二)后端接口实现JS-SDK配置需要的参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 wx.config({
2     debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
3     appId: '', // 必填,公众号的唯一标识
4     timestamp: , // 必填,生成签名的时间戳
5     nonceStr: '', // 必填,生成签名的随机串
6     signature: '',// 必填,签名,见附录1
7     jsApiList: [] // 必填,需要使用的JS接口列表
8 });

我们查看js-sdk的配置文档和以上的代码可以发现config的配置需要4个必不可少的参数appId、timestamp、nonceStr、signature,这里的signature就是我们生成的签名!

生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket ,所以这里我们将jsapi_ticket的获取放到定时任务中,因为它和token的生命周期是一致的,所以在这里我们将他们放到一起。

①将原有的定时任务WeChatTask中获取token的代码做如下修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.common;
 2 import java.text.SimpleDateFormat;
 3 import java.util.Date;
 4 import java.util.HashMap;
 5 import java.util.Map;
 6 
 7 import com.gede.web.util.GlobalConstants;
 8 import com.gede.wechat.util.HttpUtils;
 9 
10 import net.sf.json.JSONObject;
11 /**
12 * @author gede
13 * @version date:2019年5月26日 下午7:50:38
14 * @description :
15 */
16 public class WeChatTask {
17     /**
18      * @Description: 任务执行体
19      * @param @throws Exception
20      */
21     public void getToken_getTicket() throws Exception {
22          Map<String, String> params = new HashMap<String, String>();
23          //获取token执行体
24          params.put("grant_type", "client_credential");
25          params.put("appid", GlobalConstants.getInterfaceUrl("appid"));
26          params.put("secret", GlobalConstants.getInterfaceUrl("AppSecret"));
27          String jstoken = HttpUtils.sendGet(
28                  GlobalConstants.getInterfaceUrl("tokenUrl"), params);
29      
30          String access_token = JSONObject.fromObject(jstoken).getString(
31                  "access_token"); // 获取到token并赋值保存
32          GlobalConstants.interfaceUrlProperties.put("access_token", access_token);
33    
34          //获取jsticket的执行体
35          params.clear();
36          params.put("access_token", access_token);
37          params.put("type", "jsapi");
38          String jsticket = HttpUtils.sendGet(
39                  GlobalConstants.getInterfaceUrl("ticketUrl"), params);
40          String jsapi_ticket = JSONObject.fromObject(jsticket).getString(
41                  "ticket"); 
42          GlobalConstants.interfaceUrlProperties.put("jsapi_ticket", jsapi_ticket); // 获取到js-SDK的ticket并赋值保存
43           
44          System.out.println("jsapi_ticket================================================" + jsapi_ticket);
45          System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"token为=============================="+access_token);
46     }
47 }

然后我们根据【JS-SDK使用权限签名算法】对参数进行签名得到signature,这里的url必须采用前端传递到后端,因为每次的url会有所变化,

②所以我们自定义一个权限签名算法JSSDK_Config类,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.common;
 2 
 3 import java.security.MessageDigest;
 4 import java.util.Formatter;
 5 import java.util.HashMap;
 6 import java.util.UUID;
 7 import com.gede.web.util.GlobalConstants;
 8 
 9 /**
10 * @author gede
11 * @version date:2019年5月30日 下午2:52:57
12 * @description :
13 */
14 public class JSSDK_Config {
15      
16     /**
17      * @Description: 前端jssdk页面配置需要用到的配置参数
18      * @param @return hashmap {appid,timestamp,nonceStr,signature}
19      * @param @throws Exception   
20      * @author gede
21      */
22     public static HashMap<String, String> jsSDK_Sign(String url) throws Exception {
23         String nonce_str = create_nonce_str();
24         String timestamp=GlobalConstants.getInterfaceUrl("timestamp");
25         String jsapi_ticket=GlobalConstants.getInterfaceUrl("jsapi_ticket");
26         // 注意这里参数名必须全部小写,且必须有序
27         String  string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str
28                 + "&timestamp=" + timestamp  + "&url=" + url;
29         MessageDigest crypt = MessageDigest.getInstance("SHA-1");
30         crypt.reset();
31         crypt.update(string1.getBytes("UTF-8"));
32         String signature = byteToHex(crypt.digest());
33         HashMap<String, String> jssdk=new HashMap<String, String>();
34         jssdk.put("appId", GlobalConstants.getInterfaceUrl("appid"));
35         jssdk.put("timestamp", timestamp);
36         jssdk.put("nonceStr", nonce_str);
37         jssdk.put("signature", signature);
38         return jssdk;
39  
40     }
41      
42     private static String byteToHex(final byte[] hash) {
43         Formatter formatter = new Formatter();
44         for (byte b : hash) {
45             formatter.format("%02x", b);
46         }
47         String result = formatter.toString();
48         formatter.close();
49         return result;
50     }
51      
52     private static String create_nonce_str() {
53         return UUID.randomUUID().toString();
54     }
55  
56 }

③编写使用JSSDK的controller类。新增JssdkController,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede.wechat.controller;
 2 
 3 import java.util.Map;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RequestMethod;
 7 import org.springframework.web.bind.annotation.RequestParam;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9 
10 
11 /**
12 * @author gede
13 * @version date:2019年5月30日 下午3:03:31
14 * @description :
15 */
16 @Controller
17 @RequestMapping("/jssdk")
18 public class JssdkController {
19     /**
20      * @Description: 前端获取微信JSSDK的配置参数
21      * @param @param response
22      * @param @param request
23      * @param @param url
24      * @param @throws Exception
25      */
26     @RequestMapping(value="config",method=RequestMethod.POST)
27     @ResponseBody
28     public Message JSSDK_config(
29             @RequestParam(value = "url", required = true) String url) {
30         try {
31             System.out.println(url);
32             Map<String, String> configMap = JSSDK_Config.jsSDK_Sign(url);
33             return Message.success(configMap);
34         } catch (Exception e) {
35             System.out.println("error happened!!!");
36             return Message.error();
37         }
38  
39     }
40 }

到这里我们后端对jssdk的签名参数的封装就基本完成了,其中用到了我们自己写的Message类,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 package com.gede;
  2 
  3 import com.gede.Code;
  4 
  5 /**
  6 * @author gede
  7 * @version date:2019年5月30日 下午3:09:35
  8 * @description :用于消息回复
  9 */
 10 public class Message {
 11     private int code;
 12     private String msg;
 13     private Object data;
 14     public Message() {
 15         
 16     }
 17     
 18     public int getCode() {
 19         return code;
 20     }
 21 
 22     public void setCode(int code) {
 23         this.code = code;
 24     }
 25 
 26     public String getMsg() {
 27         return msg;
 28     }
 29 
 30     public void setMsg(String msg) {
 31         this.msg = msg;
 32     }
 33 
 34     public Object getData() {
 35         return data;
 36     }
 37 
 38     public void setData(Object data) {
 39         this.data = data;
 40     }
 41     
 42     public Message(int code,String msg) {
 43         this.code=code;
 44         this.msg=msg;
 45     }
 46 
 47     public Message(int code,String msg,Object data) {
 48         this.code=code;
 49         this.msg=msg;
 50         this.data=data;
 51     }
 52     /**
 53      * 返回成功消息
 54      * @param content 内容
 55      * @return 成功消息
 56      */
 57     public static Message success(String content, Object data) {
 58         return new Message(Code.SUCCESS, content, data);
 59     }
 60     /**
 61      * 返回成功消息
 62      * @param content 内容
 63      * @return 成功消息
 64      */
 65     public static Message success(String content) {
 66         return new Message(Code.SUCCESS, content);
 67     }
 68     /**
 69      * 返回成功消息
 70      * @param content 内容
 71      * @return 成功消息
 72      */
 73     public static Message success(Object data) {
 74         System.out.println(Code.SUCCESS);
 75         return new Message(Code.SUCCESS, "操作成功",data);
 76     }
 77     /**
 78      * 返回成功消息
 79      * @param content 内容
 80      * @return 成功消息
 81      */
 82     public static Message success() {
 83         return new Message(Code.SUCCESS, "操作成功");
 84     }
 85     /**
 86      * 返回失败消息
 87      * @param content 内容
 88      * @return 成功消息
 89      */
 90     public static Message error(int code,String content, Object data) {
 91         return new Message(code, content, data);
 92     }
 93     /**
 94      * 返回失败消息
 95      * @param content 内容
 96      * @return 成功消息
 97      */
 98     public static Message error(String content, Object data) {
 99         return new Message(Code.FAIL, content, data);
100     }
101     
102     /**
103      * 返回失败消息
104      * @param content 内容
105      * @return 成功消息
106      */
107     public static Message error(String content) {
108         return new Message(Code.FAIL, content);
109     }
110     /**
111      * 返回失败消息
112      * @param content 内容
113      * @return 成功消息
114      */
115     public static Message error() {
116         return new Message(Code.FAIL, "操作失败");
117     }
118 
119 }

code类代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.gede;
 2 /**
 3 * @author gede
 4 * @version date:2019年5月30日 下午3:10:34
 5 * @description :状态码
 6 */
 7 public class Code {
 8     public static final int SUCCESS = 200; //成功
 9     public static final int PARAMATER = 400; //参数错误
10     public static final int FAIL =500; //系统异常
11 }

到这里我们就开始写前端界面,来响应我们的方法。

(三)页面实现JS-SDk中config的注入配置,并实现对成功和失败的处理

这里在web目录下新建jssdkconfig.jsp,在jsp页面用ajax方式获取并进行配置,并开启debug模式,打开之后就可以看到配置是否成功的提示,简单代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html >
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <meta name="viewport" content="width=device-width" />
 8 <title>JSSDk配置</title>
 9 <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
10 <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
11 <script type="text/javascript">
12     function jssdk() {
13         $.ajax({
14             url : "http://zqfbk.iok.la/wechat/wechatconfig/jssdk",
15             type : 'post',
16             dataType : 'json',
17             contentType : "http://zqfbk.iok.la/mychat/jssdk/config",
18             data : {
19                 'url' : kk.split('#')[0]
20             },
21             success : function(data) {
22                 wx.config({
23                     debug : true,
24                     appId : data.data.appId,
25                     timestamp : data.data.timestamp,
26                     nonceStr : data.data.nonceStr,
27                     signature : data.data.signature,
28                     jsApiList : [ 'checkJsApi', 'onMenuShareTimeline',
29                             'onMenuShareAppMessage', 'onMenuShareQQ',
30                             'onMenuShareWeibo', 'hideMenuItems',
31                             'showMenuItems', 'hideAllNonBaseMenuItem',
32                             'showAllNonBaseMenuItem', 'translateVoice',
33                             'startRecord', 'stopRecord', 'onRecordEnd',
34                             'playVoice', 'pauseVoice', 'stopVoice',
35                             'uploadVoice', 'downloadVoice', 'chooseImage',
36                             'previewImage', 'uploadImage', 'downloadImage',
37                             'getNetworkType', 'openLocation', 'getLocation',
38                             'hideOptionMenu', 'showOptionMenu', 'closeWindow',
39                             'scanQRCode', 'chooseWXPay',
40                             'openProductSpecificView', 'addCard', 'chooseCard',
41                             'openCard' ]
42                 });
43             }
44         });
45     }
46  
47     function isWeiXin5() {
48         var ua = window.navigator.userAgent.toLowerCase();
49         var reg = /MicroMessenger\/[5-9]/i;
50         return reg.test(ua);
51     }
52  
53     window.onload = function() {
54         //     if (isWeiXin5() == false) {
55         //           alert("您的微信版本低于5.0,无法使用微信支付功能,请先升级!");
56         //         }
57         jssdk();
58     };
59 </script>
60 </head>
61 <body>
62     <h1>nihao</h1>
63 </body>
64 </html>

(四)pc端进行测试

我的浏览器是火狐developer版的,其他的也都差不多,打开浏览器按F12,找到一个叫网络的窗口,也有的浏览器叫network像我的就是network。

①运行项目后,打开浏览器输入访问地址http://zqfbk.iok.la/mychat/;点击Jssdk这里需要设置一下超链接,因为懒得从视图控制器返回了,超链接代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <h1>Welcome to Mychat</h1>
    <a href="<c:url value="/userinfo" />">UserInfo</a>
    <a href="<c:url value="/jssdkconfig.jsp" />">Jssdk</a>

②在我么点击Jssdk的时候,先按f12 打开network视图窗口。,然后再点击,效果图如下:

③如果你看到你的状态码中没有404,那你多半成功了,我们找对对应的文件名为config的那一行点击一下,进行查看,此时后台也会做出成功提示,上图:

如果提示是这样,那么标识我们的配置是成功的,那么到这里微信jssdk的配置就基本完成了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
推特阻止马斯克收购:有人超15%股权就折价发股票
机器之心报道 编辑:泽南 430 亿美元看来仍不足以收购推特。 伊隆 · 马斯克收购推特的大戏终于还是演到了这一集。 当地时间 4 月 15 日,推特宣布采取一项保护性措施以防御恶意收购要约,阻止亿万富翁伊隆 · 马斯克 (Elon Musk) 将公司私有化并试图使其成为言论自由平台的提议。 其中,推特董事会制定了股东权益计划,如果一方未经事先批准收购 15% 的股份即可行使,有效期仅为一年。根据周五的一份声明,该计划旨在确保「任何通过公开市场积累社交媒体公司控制权的人,均需要向所有股东支付适当的控制权溢
机器之心
2022/04/18
2510
推特阻止马斯克收购:有人超15%股权就折价发股票
主动出击!马斯克欲投 430 亿美元拿下 Twitter
上周,马斯克刚成为 Twitter 的第一大股东。没过几天,不仅董事会没去几天,还声称要把 Twitter 总部改成流浪汉收容所。然而「语不惊人死不休」的马斯克在向美国证券交易委员会提交的更新版 13D 文件中直接提出了收购 Twitter 100% 股份。
AI科技大本营
2022/05/19
2790
主动出击!马斯克欲投 430 亿美元拿下 Twitter
万科股东大会速递!王石回应千万薪酬质疑,郁亮回应被“逼宫”(撕逼实录&amp;网友神评论)
作者:互联网分析师;来源:互联网分析师(公众号ID:InternetFenXiShi)。
IT阅读排行榜
2018/08/15
3770
万科股东大会速递!王石回应千万薪酬质疑,郁亮回应被“逼宫”(撕逼实录&amp;网友神评论)
【正经说】私募股权投资基金流程
项目投资经理在接到商业计划书(BP)或者项目介绍后,对项目进行初步调查,提交初步调查报告,项目概况表,并对项目企业的投资价值提出初审意见。
辉哥
2018/08/10
6170
马斯克再出手,出价430亿美元收购Twitter全部股份,还有B计划
机器之心报道 编辑:陈萍 马斯克计划有变,现在他想要买下整个 Twitter。 成为全球首富后,特斯拉 CEO、SpaceX 创始人埃隆 · 马斯克(Elon Musk)又盯上了社交媒体 Twitter。这一次,他想要私有化 Twitter。 马斯克以 430 亿美元的价格收购 Twitter 4 月 14 日,马斯克提出以每股 54.20 美元、合计 430 亿美元的价格收购 Twitter,声称这家社交媒体公司需要转型、变成私营公司。马斯克表示该报价是他最好的、也是最后的报价。该报价较 4 月 1 日
机器之心
2022/04/18
3590
马斯克再出手,出价430亿美元收购Twitter全部股份,还有B计划
回购触发被动收购,集团确保创维数字上市地位
创维集团创始人黄宏生对资本市场一直雄心勃勃,2021年3月,他曾提出:“创维计划利用资本市场的开放性寻求发展,未来可能分拆出10家上市公司,每家公司目标百亿规模。”
华尔街科技眼
2023/07/05
2840
改变人类?马斯克怒砸440亿美元买下推特
---- 新智元报道   编辑:时光 好困 【新智元导读】上火星还不够,马院士还要管理地球! 亿万富翁、火箭爱好者、院士...... 全球首富马斯克的身份又增加了——媒体大亨! 就在昨晚,他花440亿美元把推特买了! 不知道是不是还能省下一笔特斯拉、SpaceX、Neuralink……的广告费? 高举「自由」大旗 有趣的是,马斯克在这次的「推特私有化运动」中,一直都高举着「言论自由」这面大旗。 按照美国宪法第一修正案的规定,言论自由是一项基本人权,禁止剥夺言论自由。 收购之后,马斯克立即发推文
新智元
2022/04/26
3720
改变人类?马斯克怒砸440亿美元买下推特
2022年借壳上市研究报告
借壳上市指一家母公司(集团公司)通过把资产注入一家市值较低的已上市公司(壳),得到该公司一定程度的控股权,利用其上市公司地位,使母公司的资产得以上市,通常该壳公司会被改名。直白地说,借壳上市就是未上市的公司通过收购、资产置换等方式取得已上市公司的控股权,这家公司就可以以上市公司增发股票的方式进行融资,从而实现上市的目的。
资产信息网
2022/04/13
1.2K0
2022年借壳上市研究报告
“中国合伙人”生存最真实法则:创业七年后为何你会选择离开?
T客汇官网:tikehui.com 撰文 | 杨丽 “创业七年,合伙人被逼走”事件如同一块飞过湖面的乱石,瞬间在互联网圈砸开了花。 近日,一篇名为《就算老公一毛钱股份都没拿到,在我心里,他依然是最牛逼
人称T客
2018/03/23
8220
440亿美元,马斯克成功收购推特
机器之心报道 编辑:泽南、蛋酱 推特上最大的网红收购了推特。 人们一直在说「马斯克的收购提案具有不确定性」,但事情就这么谈成了。一口价,全资收购。 本周一,推特董事会宣布接受收购要约,伊隆・马斯克以约 440 亿美元现金达成收购社交网络公司推特(Twitter Inc)的交易。该交易将把这家拥有 2.17 亿用户和全球影响力的社交媒体平台的控制权完全转移给全球首富。 对于推特这家拥有 16 年历史的科技公司来说,这是一个发生重大转折的时刻,它已成为世界上最具影响力的公共广场之一,现在也面临着一系列挑战。
机器之心
2022/04/27
3360
440亿美元,马斯克成功收购推特
世纪大战!马斯克砸430亿美元「强买」,推特拼死吃「毒丸」反抗
---- 新智元报道   编辑:编辑部 【新智元导读】浑身都是戏的世界首富马斯克院士,现在又做出了极具戏剧性的决定。在成为推特大股东后仍受束缚的境况中,他表示干脆要把推特整个买下来。 上周,马斯克刚成为推特的第一大股东。 没过两天,不仅董事会不去了,甚至还声称要把推特总部改成流浪汉收容所。 现在,马斯克又宣布:哥要把推特全买下来!不为赚钱,就为人类文明的未来! 等下,怎么前几天还是「买股票」,突然变成「买公司」了呢? 推特「民调」:我买断推特,好不好啊? 别看马斯克已经拿下了推特9.2%的股票,但这
新智元
2022/04/15
3790
世纪大战!马斯克砸430亿美元「强买」,推特拼死吃「毒丸」反抗
【正经说】详解新三板定向增发的制度,流程和周期过长解决方案
《业务规则(试行)》4.3.5:“申请挂牌公司申请股票在全国股份转让系统挂牌的同时定向发行的,应在公开转让说明书中披露”,该条明确了企业在新三板挂牌的同时可以进行定向融资。
辉哥
2018/08/10
5K0
【正经说】详解新三板定向增发的制度,流程和周期过长解决方案
融资
听起来令人困惑?基本上,一轮融资就是您从一个或多个投资者筹集资金的任何时候。它们被标记为,因为它们接连发生,并且每一轮融资的含义都略有不同。一轮融资的类型还取决于该轮出售的股票类型(普通股,优先股)以及A,B,C等投资者如何收回资金。
天地一小儒
2022/12/28
5070
马斯克突然放话收购推特,出价2700亿让它退市,推特特斯拉股价齐下跌
明敏 发自 凹非寺 量子位 | 公众号 QbitAI 前脚刚说不进推特董事会,后面就来记反杀说要全盘收购—— 马斯克最新骚操作,真是把人看懵了。 但手法上还是一如既往地狂。 以每股54.2美元价格,收购推特100%股份,交易金额将达到430亿美元(折合人民币超过2700亿元)。 (不愧是你啊) 要知道,这一收购价格,比4月1日马斯克正式投资时的股价,高出38%;比他开始投资推特前一天的股价,高出54%。 马斯克直言不讳地说: 我给出的报价是最好的,同时也是最终报价。 但是,有人欢喜有人忧。 收购计划曝光
量子位
2022/04/15
4080
马斯克突然放话收购推特,出价2700亿让它退市,推特特斯拉股价齐下跌
马斯克面临竞争对手:Thoma Bravo 考虑竞购 Twitter
一位知情人士告诉《纽约邮报》,私募股权巨头Thoma Bravo正忙着可能竞购Twitter的事宜,出价收购这家社交巨头的Elon Musk面临劲敌。 这位知情人士提到这家私募公司时说:“他们正在为之努力。”Thoma Bravo旗下已拥有包括迈克菲和蓝代斯克在内的多家科技公司。 目前尚不清楚Thoma Bravo可能会报出多高的价格,或者何时会向Twitter董事会报价。这位知情人士告诉《纽约邮报》,该公司有一个内部团队正致力于这笔潜在的交易。 另一位知情人士被《纽约邮报》问及Thoma Bravo是
云头条
2022/04/18
2470
马斯克面临竞争对手:Thoma Bravo 考虑竞购 Twitter
「特斯拉退市」涉嫌操纵股价:美国证监会介入调查,股票跌回原点
马斯克本周二在推特上表示,希望将特斯拉私有化。如果成行,这将是史上规模最大的私有化交易之一。
机器之心
2018/08/21
5010
「特斯拉退市」涉嫌操纵股价:美国证监会介入调查,股票跌回原点
原来Otto从创办到被Uber天价收购,都是卡兰尼克自导自演
允中 李根 卧底发自 the Jam Pad 量子位 报道 | 公众号 QbitAI △ Uber创始人卡兰尼克和Otto创始人莱万 2016年8月,Uber以6.8亿美元收购了创立不足一年的自动驾驶
量子位
2018/03/27
6220
原来Otto从创办到被Uber天价收购,都是卡兰尼克自导自演
【每日要闻】余承东谈“天价”汽车芯片;张朝阳否认搜狐退市
点击图片立刻参与! 1、余承东谈“天价”汽车芯片:2500元一枚太贵,自己无法接受 2、字节跳动切入大屏,原锤子科技团队与康佳合作开发新智慧屏系统 3、宁德时代EVOGO换电服务在厦门正式启动 4、消息称特斯拉或在今年实现完全自动驾驶 5、马斯克:如果收购推特成功,推特董事会的薪水将变为0美元 6、微软收购动视暴雪被曝存内幕交易 7、张朝阳:搜狐没有要退市,唱衰搜狐、讥讽直播物理课实无必要 8、外媒称三星3nm工艺良品率仍远不及预期,仅10%-20% 9、台积电拟补贴员工买自家股票,细节待定 10、招聘显
镁客网
2022/04/21
4520
【每日要闻】余承东谈“天价”汽车芯片;张朝阳否认搜狐退市
“一致行动”对马云究竟有多重要
京东集团创始人刘强东在一次公开采访中曾说过:“如果失去京东的控制权,我会立刻把京东卖了!”主持人追问,为什么不能学阿里马云做甩手掌柜。实际上,和刘强东不掩饰控制欲相比,马云退居二线、云淡风轻的背后,是其早已精心设计好的“永不失权”的控制方案。
华尔街科技眼
2023/01/10
4480
“一致行动”对马云究竟有多重要
《港囧》火爆,徐峥收益多少?体验一下“业务思维×资本思维”的分析方法
作者:丁建英 摘自:微信公号 “九万里晴空” 这篇文章是根据前段时间和一些互联网创业者们的交流内容完善而成。过去几年,我讲了很多关于上市公司资本运作和并购成长的方法论,提出上市公司可以通过并购+核爆业务实现千亿市值的成长。 最近的几次交流中,我将关注点从上市公司的资本运作前移到非上市公司的资本化、证券化,或者更前移到创业公司该如何建立资本思维实现企业跨越式成长。资本思维不是上市公司专利,创业公司更需要资本思维。 我认为:新三板是创业企业和资本市场门槛最低的连接,是中国资本市场给创业企业一次难
大数据文摘
2018/05/21
6110
推荐阅读
相关推荐
推特阻止马斯克收购:有人超15%股权就折价发股票
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档