NodeJs開発微信記録(3)--Webライセンス

2781 ワード

微信の公衆番号はユーザーとインタラクティブな機能が限られており、ほとんどの業務シーンはユーザーがウェブページにジャンプして実現する必要がある.同時に、私たちは微信ユーザーの情報を取得する必要があります.このとき、私たちが避けられない重要な点は、微信ページの開発です.公式ドキュメントによると、Webページの開発にはいくつかのステップがあります.
手順1-ドメイン名の設定
コールバックドメイン名を設定し、公衆番号にログインした後、「開発-インタフェース権限」に入り、ドロップダウンして「Web権限」を見つけ、ドメイン名の設定を変更します(純粋なドメイン名で、httpやhttpなどのプロトコルヘッダはありません).ドメイン名はICP登録が必要で、記入後に検証ファイルをダウンロードする必要があります.ファイルをプロジェクトルートディレクトリに配置し、ルートは静的ファイルに設定します.私が使っているルーティングルールは'/:file'で、txtファイル名が直接ファイルに戻ると判断しました.同じディレクトリの下に他の露出したくないファイルがある場合は、より細かく判断する必要があります.
ステップ2-論理実装
Webライセンスには2つの形式がありますsnsapi_ベース--基本情報を取得し、ユーザーを識別するだけで、これによってユーザーのopenidを取得できます.オープンプラットフォームをバインドすると、unionIdも返されます.このライセンスは、ユーザーの同意を必要としません(信頼コストを節約します)snsapi_userinfo--ユーザーの性別、ニックネーム、地域、性別、微信のアイコンなど、ユーザーの詳細を取得します.必要ならこれを選び、ユーザーがログインを確認する必要があります.関連コード長はこうです(koa 2フレームワークの書き方):
'use strict'
const rp = require('request-promise')
let scopePage = async (ctx, next)=>{
  if(!ctx.query.code && !ctx.query.state) {
    //    ,     scopeurl     code
    let curUrl = ctx.href
    let scopeUrl = generatorScopeUrl(curUrl, 'info')
    ctx.status = 302;
    ctx.redirect(scopeUrl)
  } else if(ctx.query.code && ctx.query.state) {
    //      
    let code = ctx.query.code; 
    let appid = 'yourappid'; //   appid
    let fetchWechatUserInfo = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=SECRET&code=${code}&grant_type=authorization_code `;
    let options = {
      method: 'GET',
      uri: fetchWechatUserInfo,
      json: true
    }
    let userInfo = await rp(options);
    if(userInfo.errcode){
      throw new Error('fetch userInfo failure, please check the params')
    }
    let {openid, access_token, refresh_token} = userInfo
  
    let fetchWechatUserDetailInfoUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN `;
    let userDetailInfo = await rp({method:'GET', uri: fetchWechatUserDetailInfoUrl, json:true })
    userInfo = Object.assign({}, userInfo, userDetailInfo)
    ... //dosomething
  }
}
function generatorScopeUrl(url, type) {
  if(!url) return false;
  let scopeType = 'snsapi_base';
  if(type == 'info){
    scopeType = 'snsapi_userinfo';
  }
  let state = 'userstate'; //      
  let appid = 'yourappid'; //    appid
  return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${url}&response_type=code&scope=${scopeType}&state=${state}#wechat_redirect `
}

一般的にユーザ情報を取得した後、関連情報をテンプレートにレンダリングします.これにより,ユーザごとに異なるコンテンツを返すことができる.ユーザの後続の操作では,ユーザ情報(例えばユーザに携帯電話番号のバインドを要求する)をさらに改善することができ,後でユーザに通知をプッシュする必要があれば実現できる.WeChat WebページはJSDKでより強力な機能を開発し、後で記録します.