Home  >  Article  >  Web Front-end  >  How to call WeChat sharing function in nodejs

How to call WeChat sharing function in nodejs

php中世界最好的语言
php中世界最好的语言Original
2018-04-14 11:01:401963browse

This time I will show you how nodejs calls the WeChat sharing function. What are the precautions for nodejs to call the WeChat sharing function. The following is a practical case, let's take a look.

1. Access WeChat JSSDK

You can quote it directly or download it locally

2. JS requests node background signature, random number, timestamp, etc.

function getWxSignature() { 
  $.ajax({ 
    url: "/activityWxShaer", 
    type: 'post', 
    data: { urlhref:location.href }, 
    success: function(jsons) { 
      var data = JSON.parse(jsons); 
      wx.config({ 
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 
        appId: 'xxxxxxxxx', // 必填,公众号的唯一标识 
        timestamp: data.timestamp, // 必填,生成签名的时间戳 
        nonceStr: data.nonceStr, // 必填,生成签名的随机串 
        signature: data.signature, // 必填,签名,见附录1 
        jsApiList: [ 
            'onMenuShareTimeline', 
            'onMenuShareAppMessage', 
            'onMenuShareQQ', 
            'onMenuShareWeibo', 
            'onMenuShareQZone' 
          ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 
      }); 
      shareFunc();// 微信的分享接口 里面为ready 
    } 
  }); 
}

3. nodeJS express routing

/** 
 * 分享 
 */ 
router.post('/activityWxShaer', function(req, res, next) { 
  let hrefURL = req.body.urlhref; 
  wxShare.prototype.accessToken(hrefURL, function(data) { 
    res.json(data); 
  }); 
});

4. NodeJS signature, WeChat key signature, I use sha1, I have seen a lot of them using sha-1, HEX and the like. I don’t know if it is a problem with my environment. I can’t use it and finally have to I wrote it myself

/** 
   * 签名 
   * @param {*} url 
   */ 
  sign(url) { 
    let _this = this; 
    var ret = { 
      jsapi_ticket: configEnd.ticket, 
      nonceStr: configEnd.nonceStr, 
      timestamp: configEnd.timestamp, 
      url: url 
    }; 
    var string = _this.rawString(ret); 
    var shaObjs = sha1(string); 
    return shaObjs; 
  }; 
四、nodeJS后台代码直接上整体代码
[javascript] view plain copy
var url = require('url'); 
var request = require('request'); 
var sha1 = require('sha1'); 
 
let config = { 
    appID: "",// 微信公众号ID 
    appSecret: "" //微信公众号里有 
  }, 
  configEnd = { 
    appID: '', 
    access_token: '', 
    ticket: '', 
    timestamp: '', // 必填,生成签名的时间戳 
    nonceStr: '', // 必填,生成签名的随机串 
    signature: '', // 必填,签名,见附录1 
  }; 
 
/** 
 * 微信分享 
 */ 
class wxShare { 
  /** 
   * 请求获取access_token 方法入口 
   * @param {* URL链接} hrefURL 
   * @param {* 回调请求方法} callback 
   */ 
  accessToken(hrefURL, callback) { // 获取access_token 
    let _this = this; 
    var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + config.appID + '&secret=' + config.appSecret; 
    request(tokenUrl, function(error, response, body) { 
      if (response.statusCode && response.statusCode === 200) { 
        body = JSON.parse(body); 
        configEnd.access_token = body.access_token; 
        _this.upJsapiTicket(hrefURL, body.access_token, callback) 
      } 
    }); 
  }; 
  /** 
   * 获取<span style="font-family:Arial;">Jsapi_Ticket</span> 
   * @param {* URL链接} hrefURL 
   * @param {* token} access_Ttoken 
   * @param {* 回调请求方法} callback 
   */ 
  upJsapiTicket(hrefURL, access_Ttoken, callback) { // Jsapi_ticket 
    let _this = this; 
    var ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + access_Ttoken + '&type=jsapi'; 
    request(ticketUrl, function(err, response, content) { 
      content = JSON.parse(content); 
      if (content.errcode == 0) { 
        configEnd.ticket = content.ticket; // ticket 
        configEnd.timestamp = _this.createTimestamp(); // 时间戳 
        configEnd.nonceStr = _this.createNonceStr(); // 随机数 
        configEnd.signature = _this.sign(hrefURL); // 签名 
        callback && callback(configEnd); // 回调前端JS方法 
      } 
    }) 
  }; 
  /** 
   * 随机字符串 
   */ 
  createNonceStr() { 
    return Math.random().toString(36).substr(2, 15); 
  }; 
  /** 
   * 时间戳 
   */ 
  createTimestamp() { 
    return parseInt(new Date().getTime() / 1000).toString(); 
  }; 
  /** 
   * 拼接字符串 
   * @param {*} args 
   */ 
  rawString(args) { 
    var keys = Object.keys(args); 
    keys = keys.sort() 
    var newArgs = {}; 
    keys.forEach(function(key) { 
      newArgs[key.toLowerCase()] = args[key]; 
    }); 
    var string = ''; 
    for (var k in newArgs) { 
      string += '&' + k + '=' + newArgs[k]; 
    } 
    string = string.substr(1); 
    return string; 
  }; 
  /** 
   * 签名 
   * @param {*} url 
   */ 
  sign(url) { 
    let _this = this; 
    var ret = { 
      jsapi_ticket: configEnd.ticket, 
      nonceStr: configEnd.nonceStr, 
      timestamp: configEnd.timestamp, 
      url: url 
    }; 
    var string = _this.rawString(ret); 
    var shaObjs = sha1(string); 
    return shaObjs; 
  }; 
 
} 
module.exports = wxShare;

Just make an ordinary ajax request to the nodeJS background, and the background returns encapsulated data.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Detailed analysis of Vuejs responsiveness principle

Bootstrap4 and Vue2 implement paging query function (with code)

The above is the detailed content of How to call WeChat sharing function in nodejs. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn