• 微信公众号2


    一、运行环境。(微信类的开发,测试最好是放在开发者工具上,在浏览器上微信的网页是受到限制的)

      公众号是基于传统H5 开发与运行,传统H5 运行环境是浏览器。因为公众号网页是在微信这个容器中运行的,所以使用微信的SDK,可以调用微信原生的一些功能。

    二、微信JS-SDK :  https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

       (个人)微信SDK应该的是给微信公众号网页所有的,可以使网页调用微信开放的一些接口,如拍照。

    三、微信公众号 授权登录:https://www.cnblogs.com/sunshq/p/5132811.html(推荐,亲测有效) 或  https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842(官方文档)

      步骤:1、配置回调函数

         2、组装授权Url.

                            https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

                            把参数替换成自己的参数, appid填入测试号的appid, REDIRECT_URI填入 经过encodeURIComponent()的参数,SCOPE填入snsapi_userinfo, state=#wechat_redirect即可

                            eg:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxef450dbeb79f6c72&redirect_uri=http://5ed286c2.ngrok.io/wx/mp&response_type=code&scope=snsapi_userinfo&state=#wechat_redirect

           3、把组装后的url填入微信开发者工具地址栏中就可以发起授权弹窗了。授权后直接进入页面。

           注意:这里直接在微信中扫码,授权后,域名必须是备案的才可以直接打开。(微信中,必须是备案的域名才能打开网页。微信开发者可以打开没有备案的域名)

    微信公众号:后台生成的二维码(一般是域名 open.weixin.qq.com/),在微信中打开会重定向 URL 的。使用 微信开发者工具就可以 调试。 


     express做后端服务器  开发  微信公众号网页  https://segmentfault.com/a/1190000016445803  或  https://www.cnblogs.com/wuyuchang/p/7170949.html推荐,亲测有效,注意里面有几个单词字母有错别字,程序会报错。如,timestamp 有的地方变成了 timpstamp)

    1、修改接口配置信息(同时也是一个经验加密签名的算法是否正确)

    router.get('/wxJssdk', function(req, res, next) {
      
      // var token = config.wechat.token
      var token = "wxexpress"
      var signature = req.query.signature
      var nonce = req.query.nonce
      var timestamp = req.query.timestamp
      var echostr = req.query.echostr
    
      console.log("req", req);
      console.log("signature", signature);
      console.log("nonce", nonce);
      console.log("timestamp", timestamp);
      console.log("echostr", echostr);
    
      var str = [token, timestamp, nonce].sort().join('')
      var sha = sha1(str)
      console.log("sha", sha);
      res.send(echostr);
      if (sha === signature) {  // 这里就可以校验自己的加密算法和微信要求的加密算法是不是一致
          res.send(echostr);
      } else {
          res.send(wong);
      }
    });

    2、填写安全域名

    3、生成signature

    /* 前端传入参数: url*/
    router.post('/getJssdk', (req, res) => {
      const request = require('request')
    
      const grant_type = 'client_credential'
      const appid = 'wx1**********e'     // 微信公众号的appid
      const secret = 'f1********************a'   // 微信公众号的secret
    
      request('https://api.weixin.qq.com/cgi-bin/token?grant_type=' + grant_type + '&appid=' + appid + '&secret=' + secret, (err, response, body) => {
        let access_token = JSON.parse(body).access_token
    
        request('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + access_token + '&type=jsapi', (err, response, body) => {
          let jsapi_ticket = JSON.parse(body).ticket
          let nonce_str = '123456'    // 密钥,字符串任意,可以随机生成
          let timestamp = new Date().getTime()  // 时间戳
          let url = req.body.url   // 使用接口的url链接,不包含#后的内容
          console.log('jsapi_ticket', jsapi_ticket);
          console.log('nonce_str', nonce_str);
          console.log('timestamp', timestamp);
          console.log('url', url);
          
          // 将请求以上字符串,先按字典排序,再以'&'拼接,如下:其中j > n > t > u,此处直接手动排序
          let str = 'jsapi_ticket=' + jsapi_ticket + '&noncestr=' + nonce_str + '&timestamp=' + timestamp + '&url=' + url
          console.log('str', str);
          // 用sha1加密
          let signature = sha1(str)
          console.log('signature', signature);
          res.send({
            appId: appid,
            timestamp: timestamp,
            nonceStr: nonce_str,
            signature: signature,
          })
        })
      })
    })

    4、前端 调用  getJssdk 方法,获取需要的参数

           axios.post('/getAccessToken/getJssdk', {url: location.href}).then((response) => {
                var data = response.data
    
                wx.config({
                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: data.appId, // 必填,公众号的唯一标识
                timestamp: data.timestamp, // 必填,生成签名的时间戳
                nonceStr: data.nonceStr, // 必填,生成签名的随机串
                signature: data.signature,// 必填,签名,见附录1
                jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
    
            })

    5、前端  在 wx.ready( )方法中,执行微信 JS-SDK的方法;或在  wx.error( ) 中告诉用户,微信接口不可用

            wx.ready(function(){
                // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
                wx.checkJsApi({
                    jsApiList: ['onMenuShareAppMessage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
                    success: function(res) {
                    // 以键值对的形式返回,可用的api值true,不可用为false
                    // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
                    }
                });
            });
    
            wx.error(function(res){
                // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
                console.log('微信config失败');
                
            });
  • 相关阅读:
    数据库从别的数据库查询一张表在插入到新的数据库里面
    html5 学习随笔 1
    .net MVC 学习笔记 (一)
    Html5 本地存储
    .net MVC 学习笔记 (二)
    蝙蝠侠解救罗宾的问题
    求职的第一面Harman
    求职第七面——烽火通讯
    求职的第二面—Samsung
    求职第六面——瑞星微电子
  • 原文地址:https://www.cnblogs.com/wfblog/p/9059560.html
Copyright © 2020-2023  润新知