• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

获取小程序指定页面的小程序码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 小程序二维码生成官方文档链接 https://mp.weixin.qq.com/debug/wxadoc/dev/api/qrcode.html

 如果你有一个页面,比如某个商品详情页: /Page/detail/detail?id=1000000,你希望生成这个页面的一个小程序码;那么你就需要调用小程序的接口来生成这个二维码了;

具体思路:

  1.按照官方文档的指示,首先你要调接口获取你的AccessToken才能使用生成小程序码的接口;

  2.得到AccessToken后就可以开始调用生成小程序码的B接口了,一般来说,要传两个参数:page参数是你的页面链接,scene参数就是你要传给页面的参数,例如上面的id=1000000中的1000000

  3.得到微信返回的小程序码后,将图片保存到你的后台服务器,然后把图片的路径返回到前端;

  4.前端得到了图片的链接后,就可以直接渲染在页面上了;

 

 小程序提供了三个接口可以生成指定的页面的二维码,分别为A接口,B接口,C接口;

 A接口和C接口都有数量限制:10万个;而且C接口只能请求到普通的方形二维码;

 所以我选择了B接口;

获取小程序码的后台代码封装在utils/creatQrCode.js中,代码如下:

  1 var fs = require(\'fs\');
  2 var request = require(\'request\');
  3  
  4 var AccessToken = {
  5   grant_type: \'client_credential\', //这里填这个值就可以了
  6   appid: \'vvvvvvvvvvvvvvvvv\',  //你的小程序appid
  7   secret: \'vvvvvvvvvvvvvvvvv\'  //你的小程序secret
  8 }
  9 
 10 //获取你的AccessToken的链接
 11 var wx_gettoken_url = \'https://api.weixin.qq.com/cgi-bin/token?grant_type=\' + AccessToken.grant_type + \'&appid=\' + AccessToken.appid + \'&secret=\' + AccessToken.secret;
 12  
 13 
 14  
 15 var create_time = 0,
 16   now = 0,
 17   token = \'\';
 18 var createQrcode = {
 19   test:function(){
 20       console.log(\'test\')
 21   },
 22   create: function(config) {
 23     var that = this;
 24     return new Promise(function(resolve, reject) {    
 25         console.log(\'fn:create\');
 26         if (that.isInTwoHours()) {
 27           that.getQrcode(config).then((res)=>{
 28             resolve(res)
 29           });
 30           
 31         } else {
 32           getWxToken().then(res => {
 33               if (res.isSuccess) {
 34               that.getQrcode(config).then((res)=>{
 35                   resolve(res)
 36               });
 37                 
 38               } else {
 39               console.log(\'获取token出错\');
 40               }
 41           })
 42         }
 43     })
 44   },
 45   //判断是否超过两个小时,将token存储起来,减少token请求。
 46   isInTwoHours: function() {
 47     console.log(\'fn:isTwoHours\');
 48     now = new Date().getTime();
 49     var diffHours = (now - create_time) / (60 * 1000);
 50     console.log(\'diffHours:\' + diffHours);
 51     if (diffHours < 2) {
 52       return true;
 53     } else {
 54       return false;
 55     }
 56   },
 57   
 58   getQrcode:function(config){
 59     return new Promise(function(resolve, reject) {
 60                 resolve(
 61                         request({
 62                             method: \'POST\',
 63                             url: \'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=\' + token.access_token,
 64                             body: JSON.stringify({
 65                                 path:config.path,
 66                                 scene:config.scene
 67                             })
 68                         })
 69                 )
 70             }).then(data => {
 71                 data.pipe(fs.createWriteStream(\'../upload/qrcode/\' + config.scene + \'.png\'))
 72                 return new Promise(function(resolve, reject) {
 73                     resolve(\'https://VV.VVVVV.com/images/qrcode/\' + config.scene + \'.png\') //将图片完整的链接返回出去
 74                 })
 75             })
 76   }
 77 
 78 
 79 //获取微信的Access-token
 80 var getWxToken = function() {
 81   console.log(\'fn:getWxToken\');
 82   var that = this;
 83   return new Promise((resolve, reject) => {
 84     request({
 85       method: \'GET\',
 86       url: wx_gettoken_url
 87     }, function(err, res, body) {
 88       if (res) {
 89         create_time = new Date().getTime();
 90         token = JSON.parse(body);
 91         console.log(token,2222222222)
 92         resolve({
 93           isSuccess: true
 94         });
 95       } else {
 96         console.log(err);
 97         resolve({
 98           isSuccess: false
 99         });
100       }
101     }
102 )
103   });
104 }
105 
106 module.exports = createQrcode;
View Code

 

然后在express的路由中调用生成小程序码的方法:

    var creatQrcode = require(\'../utils/creatQrCode\');

router.post("/createQrcode",function(req, res, next){
    let pageSrc = req.body.pageSrc;  //页面链接
    let scene = req.body.scene;    //页面参数
    let config={page:pageSrc,scene:scene}
    creatQrcode.create(config).then((imgUrl)=>{ //请求到小程序码后得到图片链接
        res.json({
            status:0,
            imgUrl:imgUrl  //将图片链接返回给前端
        })
    })
})

 

最后,你要在该小程序页面上做处理,具体思路:

    1.如果用户是扫你的小程序码进这个页面的,那么就会有一个scene;

    2.如果用户是点击其他页面条状进来的,那么链接类似这样的:/Page/detail/detail?id=1000000,你要处理的只是id;

具体代码如下:

........
onLoad:function(options){
      if (options.scene) { //如果是扫码进来这个页面的话
           var scene = decodeURIComponent(options.scene);
           this.setData({
                 id: scene
           }) 
           this.getGoodslist(\'shopId\', scene)  
      } else {    //如果是正常跳转进来的话
           var id = options.id;
           this.setData({
               id: id
           })
           this.getGoodslist(\'shopId\', id)   
      }
      
      
  },
.................

 

最后,如果你的小程序还没发布,那么扫码后是打不开指定页面的,所以在开发阶段,你可以使用微信开发工具提供的模拟扫码进入页面,这样就可以调试了:

       

 

 

 

注:express获取小程序码图片的代码参考自:https://blog.csdn.net/u014477038/article/details/70056171


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信扫描二维码链接打开指定小程序并获取链接参数发布时间:2022-07-18
下一篇:
【第二十六篇】获取微信小程序码发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap