微信のウェブページの開発の検証とインタフェースの経験の共有を呼び出します
6647 ワード
微信共有のタイトル、アイコンなどをカスタマイズするには、微信対応のインタフェースを呼び出す必要があります.本稿では、主に微信インタフェース権限の検証とその後のインタフェースの呼び出しの過程について説明します.
全体的な考え方.
まず、微信公衆バックグラウンドでjsインタフェースセキュリティドメイン名を構成し、次に、フロントエンドのWebページにjsファイルを導入する必要がある:
その後、微信ドキュメントは、権限検証のための
ただし、上記の内容は、サーバ側で微信提供の特定のアルゴリズムを実行して生成し、フロントエンドのWebページに戻る必要があります.
コード全体論理部
次に、サーバ側とフロントエンドを含む検証ロジック全体について説明します.公衆番号のappIdとappSecretに従って、まずマイクロ通信サーバからaccessを取得する.tokenは、7200秒ごとに再取得するグローバルキャッシュが必要です. access_によるtokenは微信サーバからjsapiを取得するticketは、プログラム変数にグローバルにキャッシュし、7200秒ごとに再取得する必要があります. jsapi_によるとticketや他のランダム文字列、タイムスタンプ、urlアドレスなどは、微信が提供するアルゴリズムを実行し、signatureを生成します. このとき、タイムスタンプ、ランダム文字列、署名などの情報を上のフロントエンドのjsに書き込み、フロントエンドのWebページを参照すればよい. フロントエンドのWebページが微信のブラウザで開くと、微信は私たちが与えた署名、ランダム文字列、タイムスタンプなどの情報を通じてアルゴリズムを実行するに違いありません.結果が一致すれば、 の検証に成功すると、微信が持参した各種インタフェース、例えば共有、スキャンなどを呼び出すことができる.
コード詳細共有-node
私のバックエンドはnodeで実現されているので、nodeのコードを紹介します.
ステップ1、アクセスの取得token
注意appIdとappSecretは、自分の公衆番号の対応する文字に置き換える必要があります.
私は直接新しいオブジェクトを作成しました.オブジェクトの中で微信をキャッシュできるaccessです.tokenは、呼び出し時にこのオブジェクトの
ステップ2、jsapiを取得するticket
最初のステップでアクセスを取得tokenロジックは完全に同じであり、以下のコードでは署名を生成する関数
ステップ3、署名アルゴリズムセクション
この部分の微信公式にはphp、java、nodejs、pythonのコードを含むインスタンスコードが提供されており、ドキュメントに直接アクセスしてダウンロードすればよい.私は直接引用した微信公式の関数です.
ステップ4、Webリクエスト時に
まず、関数
次に、ルーティング関数で特定のjsファイルをフロントエンドに直接返すとよい.次の
ステップ5およびステップ6、フロントエンド検証セクション
前の4つのセクションはサーバ側で行われ、5番目のステップと6番目のステップはフロントエンドのWebページに戻ります.
リファレンス
WeChatドキュメント
全体的な考え方.
まず、微信公衆バックグラウンドでjsインタフェースセキュリティドメイン名を構成し、次に、フロントエンドのWebページにjsファイルを導入する必要がある:
http://res.wx.qq.com/open/js/jweixin-1.2.0.js
.その後、微信ドキュメントは、権限検証のための
config
インタフェースを提供し、その後、フロントエンドのWebページで参照する必要があります.wx.config({
debug: true, // , api alert , , pc , log , pc 。
appId: '', // ,
timestamp: , // ,
nonceStr: '', // ,
signature: '',// , , 1
jsApiList: [] // , JS , JS 2
});
ただし、上記の内容は、サーバ側で微信提供の特定のアルゴリズムを実行して生成し、フロントエンドのWebページに戻る必要があります.
コード全体論理部
次に、サーバ側とフロントエンドを含む検証ロジック全体について説明します.
wx.ready
インタフェースで処理した後、論理的になります.結果が一致しない場合は、wx.error
インタフェースが呼び出されます.コード詳細共有-node
私のバックエンドはnodeで実現されているので、nodeのコードを紹介します.
ステップ1、アクセスの取得token
注意appIdとappSecretは、自分の公衆番号の対応する文字に置き換える必要があります.
var wxAssToken = {
appId: appId,
appSecret: appSecret,
assToken: '',
timeStamp: Date.now(),
getAssToken: function(cb){
if (this.assToken && (Date.now() - this.timeStamp < 7000000)) {
console.log(' assToken');
cb(this.assToken);
} else {
console.log(' assToken');
var link = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + this.appId + '&secret=' + this.appSecret;
var that = this;
https.get(link, function(res){
var body = [];
res.on('data', function(chunk){
body.push(chunk);
});
res.on('end', function(){
body = Buffer.concat(body).toString();
that.assToken = JSON.parse(body).access_token;
that.timeStamp = Date.now();
cb(that.assToken);
});
});
}
}
};
私は直接新しいオブジェクトを作成しました.オブジェクトの中で微信をキャッシュできるaccessです.tokenは、呼び出し時にこのオブジェクトの
getAssToken
メソッドを直接使用し、コールバック関数の最初のパラメータがaccess_である.token.7000秒間隔ごとに、微信サーバから再要求されます.ステップ2、jsapiを取得するticket
最初のステップでアクセスを取得tokenロジックは完全に同じであり、以下のコードでは署名を生成する関数
sign
を参照して後述する.var wxJsTic = {
jsTic: '',
timeStamp: Date.now(),
sign: {},
getJsTic: function(assToken, cb){
if (this.jsTic && (Date.now() - this.timeStamp < 7000000)) {
console.log(' sign');
cb(this.sign);
} else {
console.log(' sign');
var link = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + assToken + '&type=jsapi';
var that = this;
https.get(link, function(res){
var body = [];
res.on('data', function(chunk){
body.push(chunk);
});
res.on('end', function(){
body = Buffer.concat(body).toString();
that.jsTic = JSON.parse(body).ticket;
that.timeStamp = Date.now();
that.sign = sign(that.jsTic, 'https://www.84games.com/jike/');
cb(that.sign);
});
});
}
}
};
ステップ3、署名アルゴリズムセクション
この部分の微信公式にはphp、java、nodejs、pythonのコードを含むインスタンスコードが提供されており、ドキュメントに直接アクセスしてダウンロードすればよい.私は直接引用した微信公式の関数です.
var sign = require('./sign.js');
ステップ4、Webリクエスト時に
sign
オブジェクトのパラメータをフロントエンドに戻せばよいまず、関数
getSign
を定義します.この関数では、最初のステップと2番目のステップの関数が呼び出され、コールバック関数の最初のパラメータであるアルゴリズムによって生成されたsign
オブジェクトが呼び出されます.function getSign(cb){
wxAssToken.getAssToken(function(assToken){
wxJsTic.getJsTic(assToken, function(sign){
cb(sign);
});
});
}
module.exports = getSign;
次に、ルーティング関数で特定のjsファイルをフロントエンドに直接返すとよい.次の
getWeixinKey
関数は、上記のコードから導出されたgetSign
メソッドであり、以下はexpressを用いてサーバ側プログラムを行い、main.js
ファイルを要求する場合、上記のアルゴリズムで生成された部分を先にこのファイルに置き換えてからデータを返すことを示す.var getWeixinKey = require('./getWeixinKey');
router.get('/main.js', function(req, res){
getWeixinKey(function(sign){
fs.readFile(path.join(__dirname, './main.js.txt'), function(err, data){
if (err) throw err;
data = data.toString().replace('{{noncestr}}', sign.nonceStr).replace('{{timestamp}}', sign.timestamp).replace('{{signature}}', sign.signature);
res.send(data);
});
});
});
ステップ5およびステップ6、フロントエンド検証セクション
前の4つのセクションはサーバ側で行われ、5番目のステップと6番目のステップはフロントエンドのWebページに戻ります.
// ,
wx.config({
debug: true,
appId: 'wx175e7902f419b624',
timestamp: '{{timestamp}}',
nonceStr: '{{noncestr}}',
signature: '{{signature}}',
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
});
// , ,
wx.ready(function(){
console.log('ready');
wx.onMenuShareTimeline({
title: ' ',
link: ' url ',
imgUrl: ' ',
success: function(){ //
console.log('share success');
},
cancel: function(){ //
console.log('share cancel');
}
});
wx.onMenuShareAppMessage({
title: ' ',
desc: ' ',
link: ' url ',
imgUrl: ' '
});
});
// ,
wx.error(function(res){
console.log('error');
console.log(res);
});
リファレンス
WeChatドキュメント