index.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <link rel="stylesheet" href="./css/bootstrap.min.css">
  8. <title>公众号管理</title>
  9. <style>
  10. body {
  11. padding: 10px;
  12. width: 90%;
  13. margin: 0 auto;
  14. }
  15. #add-domain {
  16. cursor: pointer;
  17. }
  18. .mt20 {
  19. margin: 20px 0;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <table class="table table-bordered table-hover" id="data-all">
  25. <thead>
  26. <tr>
  27. <th>公众号</th>
  28. <th>可调域名</th>
  29. <th>AppID</th>
  30. <th>AppSecret</th>
  31. <th>操作</th>
  32. </tr>
  33. </thead>
  34. <tbody></tbody>
  35. </table>
  36. <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">添加</button>
  37. <div class="panel panel-default mt20">
  38. <div class="panel-heading">如何使用</div>
  39. <div class="panel-body">
  40. <p>1.将新申请的公众号AppID,AppSecret添加入列表中,并编写公众号名称(不能重复)</p>
  41. <p>2.将本网站的IP <strong>120.24.64.23</strong> 加入公众号白名单内</p>
  42. <p>3.将要使用微信SDK的网站的域名设置为公众号安全域名</p>
  43. <p>4.使用接口 <strong>https://www.4dage.com/wechat/jssdk/share/</strong> 或 <strong>http://www.4dage.com/wechat/jssdk/share/</strong> 即可获取签名参数</p>
  44. <p>例如:</p>
  45. <pre>
  46. $.ajax({
  47. url: 'https://www.4dage.com/wechat/jssdk/share/',
  48. type: "post",
  49. data: {
  50. 'uri': location.href.split('#')[0], //当前页面地址
  51. 'name': "四维测试服务号" //哪个公众号,对应上方的名称
  52. },
  53. dataType: "jsonp",
  54. jsonpCallback: "success_jsonp",
  55. success: function (data, textStatus) {
  56. wx.config({
  57. debug: false,
  58. appId: data.appId,
  59. timestamp: data.timestamp,
  60. nonceStr: data.nonceStr,
  61. signature: data.signature,
  62. jsApiList: ['checkJsApi', 'onMenuShareTimeline',
  63. 'onMenuShareAppMessage', 'onMenuShareQQ',
  64. 'onMenuShareWeibo', 'hideMenuItems',
  65. 'showMenuItems', 'hideAllNonBaseMenuItem',
  66. 'showAllNonBaseMenuItem', 'translateVoice',
  67. 'startRecord', 'stopRecord', 'onRecordEnd',
  68. 'playVoice', 'pauseVoice', 'stopVoice',
  69. 'uploadVoice', 'downloadVoice', 'chooseImage',
  70. 'previewImage', 'uploadImage', 'downloadImage',
  71. 'getNetworkType', 'openLocation', 'getLocation',
  72. 'hideOptionMenu', 'showOptionMenu', 'closeWindow',
  73. 'scanQRCode', 'chooseWXPay',
  74. 'openProductSpecificView', 'addCard', 'chooseCard',
  75. 'openCard']
  76. });
  77. },
  78. error: function (XMLHttpRequest, textStatus, errorThrown) {
  79. console.log("jsonp.error:" + textStatus);
  80. }
  81. });
  82. </pre>
  83. </div>
  84. </div>
  85. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  86. <div class="modal-dialog" role="document">
  87. <div class="modal-content">
  88. <div class="modal-header">
  89. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  90. <h4 class="modal-title" id="myModalLabel">公众号信息修改</h4>
  91. </div>
  92. <div class="modal-body">
  93. <form>
  94. <div class="form-group">
  95. <label for="exampleInputEmail1">公众号</label>
  96. <input type="input" class="form-control" placeholder="公众号名称" id="name">
  97. </div>
  98. <div class="form-group">
  99. <label for="exampleInputPassword1">可调域名 <a id="add-domain">+</a></label>
  100. <input type="input" class="form-control domains" placeholder="可调域名">
  101. <input type="input" class="form-control domains" placeholder="可调域名">
  102. </div>
  103. <div class="form-group">
  104. <label for="exampleInputPassword1">AppID</label>
  105. <input type="input" class="form-control" id="appid" placeholder="AppID">
  106. </div>
  107. <div class="form-group">
  108. <label for="exampleInputPassword1">AppSecret</label>
  109. <input type="input" class="form-control" id="appsecret" placeholder="AppSecret">
  110. </div>
  111. </form>
  112. </div>
  113. <div class="modal-footer">
  114. <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
  115. <button type="button" class="btn btn-primary" id="submit">确定</button>
  116. </div>
  117. </div>
  118. </div>
  119. </div>
  120. <script src="./js/jquery-3.3.1.min.js"></script>
  121. <script src="./js/bootstrap.min.js"></script>
  122. <script>
  123. function getData() {
  124. $.ajax({
  125. url: '/wechat/jssdk/wechats.json',
  126. method: 'get',
  127. dataType: 'JSON',
  128. success: function (data) {
  129. window.wechats = data
  130. let items = data.map((item, index) => {
  131. let domains = item.domains.map(i => `<p>${i}</p>`).join('')
  132. return `
  133. <tr>
  134. <td>${item.name}</td>
  135. <td>${domains}</td>
  136. <td>${item.AppID}</td>
  137. <td>${item.AppSecret}</td>
  138. <td>
  139. <div class="btn-group" index="${index}">
  140. <a class="btn btn-danger" oper="delete">删除</a>
  141. <a class="btn btn-warning" data-toggle="modal" data-target="#myModal">修改</a>
  142. </div>
  143. </td>
  144. </tr>
  145. `
  146. })
  147. $('#data-all tbody').html(items.join(''))
  148. }
  149. })
  150. }
  151. function updateData() {
  152. $.ajax({
  153. url: '/wechat/jssdk/share/repect',
  154. method: 'post',
  155. dataType: 'JSON',
  156. data: {
  157. data: wechats
  158. },
  159. success: getData
  160. })
  161. $('#myModal').modal('hide')
  162. }
  163. $('#add-domain').on('click', function() {
  164. $(this).parent().parent().append('<input type="input" class="form-control domains" placeholder="可调域名">')
  165. })
  166. $('#myModal').on('show.bs.modal', function (event) {
  167. let that = event.relatedTarget.parentNode
  168. let index = that.getAttribute('index')
  169. if (index === null) {
  170. $('#myModalLabel').html('公众号信息添加')
  171. $('#name').val('')
  172. $('#appid').val('')
  173. $('#appsecret').val('')
  174. Array.from($('.domains')).forEach((item, i) => {
  175. i ? $(item).remove() : $(item).val('')
  176. })
  177. $('#submit').removeAttr('index')
  178. } else if (wechats[index]) {
  179. let wechat = wechats[index]
  180. let $domainParent = $('.domains').parent()
  181. let domains = wechat.domains.map(i => `<input type="input" class="form-control domains" value="${i}" placeholder="可调域名">`).join('')
  182. $('#myModalLabel').html('公众号信息修改')
  183. $('#name').val(wechat.name)
  184. $('#appid').val(wechat.AppID)
  185. $('#appsecret').val(wechat.AppSecret)
  186. $('.domains').remove()
  187. $domainParent.append(domains)
  188. $('#submit').attr('index', index)
  189. }
  190. })
  191. $('#submit').on('click', function () {
  192. let index = this.getAttribute('index')
  193. let data = {
  194. name: $('#name').val(),
  195. AppID: $('#appid').val(),
  196. AppSecret: $('#appsecret').val(),
  197. domains: []
  198. }
  199. Array.from($('.domains')).forEach(item => {
  200. let ip = $(item).val()
  201. if (ip) {
  202. data.domains.push(ip)
  203. }
  204. })
  205. if (index !== null) {
  206. wechats[index] = data
  207. } else {
  208. wechats.push(data)
  209. }
  210. updateData();
  211. })
  212. $('#data-all tbody').on('click', ev => {
  213. let $that = $(ev.target)
  214. if ($that.attr('oper') !== 'delete' || !confirm('删除后无法恢复你确定要删除吗?')) return;
  215. let index = $that.parent().attr('index')
  216. if (index !== null) {
  217. wechats.splice(Number(index), 1)
  218. updateData();
  219. }
  220. })
  221. getData()
  222. </script>
  223. </body>
  224. </html>