index.html 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <meta name="description" content="">
  8. <meta name="author" content="">
  9. <title>授权与分享演示</title>
  10. <!-- Bootstrap Core CSS -->
  11. <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  12. <link href="__CDN__/assets/css/index.css" rel="stylesheet">
  13. <!-- Plugin CSS -->
  14. <link href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  15. <link href="https://cdn.staticfile.org/simple-line-icons/2.4.1/css/simple-line-icons.min.css" rel="stylesheet">
  16. <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
  17. <!--[if lt IE 9]>
  18. <script src="https://cdn.staticfile.org/html5shiv/3.7.3/html5shiv.min.js"></script>
  19. <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
  20. <![endif]-->
  21. </head>
  22. <body id="page-top">
  23. <nav id="mainNav" class="navbar navbar-default navbar-fixed-top">
  24. <div class="container">
  25. <div class="navbar-header">
  26. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse-menu">
  27. <span class="sr-only">Toggle navigation</span><i class="fa fa-bars"></i>
  28. </button>
  29. <a class="navbar-brand page-scroll" href="#page-top">授权与分享演示</a>
  30. </div>
  31. <div class="collapse navbar-collapse" id="navbar-collapse-menu">
  32. <ul class="nav navbar-nav navbar-right">
  33. <li><a href="{:url('/')}" target="_blank">{:__('Home')}</a></li>
  34. <li><a href="{:url('index/user/index')}" target="_blank">{:__('会员中心')}</a></li>
  35. </ul>
  36. </div>
  37. <!-- /.navbar-collapse -->
  38. </div>
  39. <!-- /.container-fluid -->
  40. </nav>
  41. <header>
  42. <div class="container">
  43. <div class="row">
  44. <div class="col-sm-12">
  45. <div class="header-content">
  46. <div class="header-content-inner">
  47. 当你看见这个页面则表示当前以及授权登录成功
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </header>
  54. <!-- jQuery -->
  55. <script src=https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js></script>
  56. <!-- Bootstrap Core JavaScript -->
  57. <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
  58. <!-- 微信JSSDK授权 -->
  59. <script src="//res.wx.qq.com/open/js/jweixin-1.4.0.js" charset="utf-8" async="async"></script>
  60. <script>
  61. window.onload = function () {
  62. if (isWeixin()) {
  63. var wxConfig;
  64. var currentUrl = window.location.href.split('#')[0];//这里需要注意最好是通过后端渲染,避免出现失败
  65. $.ajax({
  66. data: {'url': encodeURIComponent(currentUrl)}, //encodeURIComponent解决2次分享签名失败的问题,后端要urldecode
  67. type: "POST",
  68. dataType : "json",
  69. url: "weixin/index/config",
  70. success: function (json) {
  71. if (json.code == 1) {
  72. wxConfig = json.data;
  73. //通过config接口注入权限验证配置,所需资料在后台通过签名算法获取
  74. wx.config({
  75. debug: wxConfig.debug,
  76. appId: wxConfig.appId,
  77. timestamp: wxConfig.timestamp,
  78. nonceStr: wxConfig.nonceStr,
  79. signature: wxConfig.signature,
  80. jsApiList: wxConfig.jsApiList
  81. });
  82. wechatShare.options.isSignature = true;
  83. callback && callback(opts, wx);
  84. }
  85. }
  86. });
  87. // 成功
  88. wx.ready(function(){
  89. // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
  90. //分享给朋友
  91. wx.onMenuShareAppMessage({
  92. title: wxConfig.share_title, // 分享标题
  93. desc: wxConfig.share_synopsis, // 分享描述
  94. link: currentUrl, // 分享链接
  95. imgUrl: 'http://{$_SERVER["HTTP_HOST"]}/' + wxConfig.share_img, // 分享图标
  96. type: '', // 分享类型,music、video或link,不填默认为link
  97. dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
  98. success: function () {
  99. // 用户确认分享后执行的回调函数
  100. },
  101. cancel: function () {
  102. // 用户取消分享后执行的回调函数
  103. }
  104. });
  105. //分享到朋友圈
  106. wx.onMenuShareTimeline({
  107. title: wxConfig.share_title, // 分享标题
  108. link: currentUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  109. imgUrl: 'http://{$_SERVER["HTTP_HOST"]}/' + wxConfig.share_img, // 分享图标
  110. success: function () {
  111. // 用户确认分享后执行的回调函数
  112. },
  113. cancel: function () {
  114. // 用户取消分享后执行的回调函数
  115. }
  116. });
  117. });
  118. // 失败
  119. wx.error(function(res){
  120. // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
  121. alert(JSON.stringify(res));
  122. });
  123. }
  124. };
  125. //判断是否在微信中打开
  126. function isWeixin() {
  127. var ua = navigator.userAgent.toLowerCase();
  128. if (ua.match(/MicroMessenger/i) == "micromessenger") {
  129. return true;
  130. } else {
  131. return false;
  132. }
  133. }
  134. </script>
  135. </body>
  136. </html>