国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Node.js微信公眾號(hào)開(kāi)發(fā)

OnlyLing / 2620人閱讀

摘要:在微信開(kāi)發(fā)者工具中調(diào)試和一定要正確域名一定是備案的綁定域名需要的放在服務(wù)器上的位置一定要正確參考微信公眾號(hào)開(kāi)發(fā)文檔

node微信公眾號(hào)開(kāi)發(fā) 概覽
key value
項(xiàng)目名稱 node微信公眾號(hào)開(kāi)發(fā)
項(xiàng)目描述 使用node編寫(xiě)接口,前后端分離獲取簽名數(shù)據(jù)
開(kāi)發(fā)者 leinov
發(fā)布日期 2018-11-07
倉(cāng)庫(kù) github地址
安裝&使用
下載
git clone git@github.com:leinov/node-weixin-api.git

npm install
開(kāi)發(fā)

在微信公眾號(hào)后臺(tái)配置域名白名單

server/weixin/wx.js里添加自己的appid secret

src/index/index.jswxShare里添加自己的分享內(nèi)容

npm run dev

打開(kāi)微信開(kāi)發(fā)者工具調(diào)試

npm run build

將域名配置時(shí)下載的txt文件放到dist文件夾下

上傳到服務(wù)器

pm2 start www.js啟動(dòng)服務(wù)

在微信里打開(kāi)連接分享給好友測(cè)試

擴(kuò)展:修改/src/component/wxconfig.js中的jsApiList數(shù)組,添加想要使用的微信api

架構(gòu) 技術(shù)使用

webpack-react-multi-page 多頁(yè)面架構(gòu)

webpack4

react16

es6

node

js-sdk

git

目錄結(jié)構(gòu)&功能介紹
|-- node-weixin-api //項(xiàng)目
    |-- dist //編譯生產(chǎn)目錄
        |-- index
            |-- index.css
            |-- index.js
        |-- index.html
        |-- xxx.txt // 微信域名綁定識(shí)別文件
    |-- node_modules
    |-- server // node文件
        |-- sign.js //公眾號(hào)文檔提供簽名算法
        |-- wx.js //獲取簽名數(shù)據(jù)文件
    |-- src //開(kāi)發(fā)目錄
        |-- index
            |-- images/
            |-- js/
                |-- app.js
                |-- b.js
            |-- index.scss
            |-- index.js //頁(yè)面js入口文件
        |-- template.html // webpack html-webpack-plugin 插件生成html模板
        |-- style.sass //公共sass
    |-- webpackConfig //webpack配置
    |-- package.json
    |-- .gitignore
    |-- webpack.config.js //webpack配置文件
    |-- www.js //生產(chǎn)啟動(dòng)程序
WIKI

我們?cè)谖⑿啪W(wǎng)頁(yè)開(kāi)發(fā)的時(shí)候需要通過(guò)后端返回的微信簽名數(shù)據(jù)加以前端的配置才能使用微信提供的分享,圖像,音頻等api接口。這里我們就用前后端分離的思想,拿分享到朋友圈為例,使用node來(lái)完成這一過(guò)程

下圖沒(méi)有使用js-sdk開(kāi)發(fā)的頁(yè)面在微信里分享樣式

接下來(lái)我們一步步來(lái)實(shí)現(xiàn)

步驟一:綁定域名

先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫(xiě)“JS接口安全域名”。

在添加域名時(shí)需要下載一個(gè)txt文件放到服務(wù)器web可訪問(wèn)的根目錄 比如http://www.leinov.com/xxx.txt 可訪問(wèn)的靜態(tài)根目錄,比如node的靜態(tài)文件設(shè)置的是public文件,就放public下

備注:登錄后可在“開(kāi)發(fā)者中心”查看對(duì)應(yīng)的接口權(quán)限,看是否有分享朋友圈等權(quán)限

步驟二: 引入微信JS文件

在需要調(diào)用JS接口的頁(yè)面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/... 也可以直接下載到本地目錄引入

步驟三:通過(guò)config接口注入權(quán)限驗(yàn)證配置(第六步詳解)

所有需要使用JS-SDK的頁(yè)面必須先注入配置信息,否則將無(wú)法調(diào)用(同一個(gè)url僅需調(diào)用一次,對(duì)于變化url的SPA的web app可在每次url變化時(shí)進(jìn)行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來(lái)實(shí)現(xiàn)web

wx.config({
    debug: true, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。
    appId: "", // 必填,公眾號(hào)的唯一標(biāo)識(shí)
    timestamp: , // 必填,生成簽名的時(shí)間戳
    nonceStr: "", // 必填,生成簽名的隨機(jī)串
    signature: "",// 必填,簽名
    jsApiList: [] // 必填,需要使用的JS接口列表
});

我們使用微信的所有接口都需要有在引入wx js-sdk和配置config的前提下
下面我們主要講解如何通過(guò)node來(lái)獲取微信簽名的config的數(shù)據(jù)。

步驟四:生成簽名config數(shù)據(jù)

步驟三所需要的數(shù)據(jù)需要通過(guò)簽名算來(lái)生成,下面是生成簽名數(shù)據(jù)的步驟

1,通過(guò)公眾號(hào)的appid和secret獲取access_token

2.根據(jù)access_token獲取ticket票據(jù)

3.根據(jù)微信提供node生成簽名算法(需要ticket,url參數(shù)來(lái)返回config數(shù)據(jù)

這里要強(qiáng)調(diào)是secret一定要寫(xiě)在后端,決不能暴露在前端,這也是為什么需要用接口返回?cái)?shù)據(jù)的原因。

獲取簽名config數(shù)據(jù)完整代碼 server/wx.js
/*********************************************************************************
 * @file: 返回微信開(kāi)發(fā)需要的config數(shù)據(jù)
 * @desc:
 *         1,通過(guò)appid和secret獲取access_token
 *      2.根據(jù)access_token獲取ticket
 *      3.根據(jù)ticket和url(訪問(wèn)的頁(yè)面地址由接口傳過(guò)來(lái) )通過(guò)sgin加密返回前度需要用到的config數(shù)據(jù)
 * @ahthor: leinov
 * @usedate:2018-11-07
**********************************************************************************/

const request = require("request");
const Base64 = require("js-base64").Base64;
const sign = require("./sign.js"); //微信提供在開(kāi)發(fā)文檔可以找到下載到本地
const base={
    appid:"****",//公眾號(hào)appid
    secret:"****", // 公眾號(hào)secret (重要不要暴露在前端)
    wxapi:"https://api.weixin.qq.com/cgi-bin"
};
/**
 * 根據(jù)appid,secret獲取access_token
 */
function  getAccessToken(){
    return new Promise((resolve, reject)=>{
        request.get(`${base.wxapi}/token?grant_type=client_credential&appid=${base.appid}&secret=${base.secret}`, function (error, response, body) {
            if(error!==null){
                reject("獲取access_token失敗 檢查getAccessToken函數(shù)");
            }
            resolve(JSON.parse(body));
        });
    });
}

/**
 * 根據(jù)access_token獲取api_ticket
 *
 * @param  {String} access_token
 * @return {Promise}
 */
function getTicket(access_token){
    return new Promise((resolve,reject)=>{
        request.get(`${base.wxapi}/ticket/getticket?access_token=${access_token}&type=jsapi`, function (error, response, body) {
            if(error!==null){
                reject("獲取api_ticket失敗 檢查getTicket函數(shù)");
            }
            resolve(JSON.parse(body));
        });
    });
}

/**
 * 根據(jù)api_ticket和url通過(guò)加密返回所有config數(shù)據(jù)
 *
 * @param  {String} href
 * @return {Object} configdata
 */
async function getConfigData(href){
    let configData;
    try{
        const accessTokenData = await getAccessToken();
        const ticketData = await getTicket(accessTokenData.access_token);
        const decodeHref = Base64.decode(href);
        configData = sign(ticketData.ticket,decodeHref);
        configData.appid = base.appid;
    }catch(err){
        //打印錯(cuò)誤日志
        console.log(err);
        configData = {};
    }
    return configData;
}

module.exports = getConfigData;

這里使用到了request來(lái)請(qǐng)求微信接口,sign.js是微信提供的node簽名算法,自己可以下載,通過(guò)微信接口請(qǐng)求以及node簽名算法就可以獲取到如下簽名數(shù)據(jù)。

  timestamp: ,  // 生成簽名的時(shí)間戳
  nonceStr: "", // 生成簽名的隨機(jī)串
  signature: "",// 簽名
第五步:編寫(xiě)接口返回config數(shù)據(jù)

上面wx.js已經(jīng)獲得數(shù)據(jù), 接下來(lái)我們用node編寫(xiě)接口返回?cái)?shù)據(jù)。注意下面的href,href是前端傳回的用來(lái)生成簽名的,而且這個(gè)網(wǎng)頁(yè)地址的域名一定是在設(shè)置里加入白名單了的。

var express = require("express");
var app = express();
var getConfigData = require("./server/wx.js");
var port = "3000";

//獲取微信配置數(shù)據(jù)接口
app.get("/wxconfigdata", function(req, res){ //獲取配置
    let href = req.query.href;//get獲取前端傳來(lái)的base64網(wǎng)頁(yè)地址
    getConfigData(href).then((data)=>{
        res.send(JSON.stringify(data));
    });
});

var server = http.createServer(app);
server.listen(port);
server.on("listening", onListening);

這樣就啟動(dòng)了一個(gè)3000端口的服務(wù)
我們通過(guò)訪問(wèn) "http://localhost:3000/wxconfigdata" 就可以拿到數(shù)據(jù),但這個(gè)數(shù)據(jù)是不正確的,因?yàn)閘ocahost跟在設(shè)置里的白名單域名不匹配,所以在開(kāi)發(fā)時(shí)我們要放到測(cè)試服務(wù)器里測(cè)試。

步驟六:前端請(qǐng)求獲取簽名數(shù)據(jù)
/*********************************************************************************
 * @file: src/wxconfig.js 通過(guò)接口獲取微信config數(shù)據(jù)
 * @ahthor: leinov
 * @usedate:2018-11-07
**********************************************************************************/

import { Base64 } from "js-base64";
const axios = require("axios");

/**
 * 頁(yè)面調(diào)用微信分享方法
 *
 * @param  {Object} obj      分享的標(biāo)題,描述,圖片等
 * @param  {type} callback
 * @return {type}
 */
function wxShare(obj,callback){
    const href = Base64.encode(location.href);
    //base64當(dāng)前頁(yè)面地址傳給后端生成簽名
    axios.get(`${location.origin}/wxconfigdata?href=${href}`).then((res)=>{
        wx.config({
            debug: false, // 開(kāi)啟調(diào)試模式,調(diào)用的所有api的返回值會(huì)在客戶端alert出來(lái),若要查看傳入的參數(shù),可以在pc端打開(kāi),參數(shù)信息會(huì)通過(guò)log打出,僅在pc端時(shí)才會(huì)打印。
            appId: res.data.appid, // 必填,公眾號(hào)的唯一標(biāo)識(shí)
            timestamp: res.data.timestamp, // 必填,生成簽名的時(shí)間戳
            nonceStr: res.data.nonceStr, // 必填,生成簽名的隨機(jī)串
            signature: res.data.signature,// 必填,簽名,見(jiàn)附錄1
            jsApiList: ["onMenuShareTimeline","onMenuShareAppMessage"] // 必填,需要使用的JS接口列表,所有JS接口列表見(jiàn)文檔
        });
        shareConfig(obj,callback);
    }).catch((err)=>{
        shareConfig({},callback);
    });
}

function shareConfig(obj,callback){
    wx.ready(function(){
        //分享到朋友圈
        wx.onMenuShareTimeline({
            title:  obj.timelinetitle ? obj.timelinetitle : obj.title , // 分享標(biāo)題
            link: obj.link, // 分享鏈接
            imgUrl: obj.imgUrl ? obj.imgUrl :"" , // 分享圖標(biāo)
            success: function () {
                if (typeof callback === "function"){
                    callback();
                }
            },
            cancel: function () {
                // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
            }
        });

        // 分享給微信好友
        wx.onMenuShareAppMessage({
            title: obj.title, // 分享標(biāo)題
            desc: obj.desc, // 分享描述
            link: obj.link, // 分享鏈接
            imgUrl: obj.imgUrl ? obj.imgUrl:"",
            success: function () {
                if (typeof callback === "function"){
                    callback();
                }
            },
            cancel: function () {
                // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
            }
        });
    });
}

export default wxShare;
步驟七:頁(yè)面使用

假設(shè)我們使用的是react 在react 打包入口js文件里調(diào)用配置即可

import wxShare from "../component/wxconfig.js";
wxShare({
    title: "駕多多-小程序時(shí)代的駕校管理系統(tǒng)", // 分享標(biāo)題
    desc:"駕多多駕校管理系統(tǒng)。幫助駕校在互聯(lián)網(wǎng)時(shí)代,零門(mén)檻使用小程序工具,提升招生量、提升服務(wù)能力、降低運(yùn)營(yíng)成本,是為駕校提供人、財(cái)、物及業(yè)務(wù)辦理的綜合管理系統(tǒng)。", // 分享描述
    link: location.href, // 分享鏈接
    imgUrl:"https://***/jiaddwxicon.png" , // 分享圖標(biāo)
});
在配置正確的情況下就可以實(shí)現(xiàn)配置分享標(biāo)題描述和圖片了,并且微信提供的可用接口都可以實(shí)現(xiàn)。

tips

在微信開(kāi)發(fā)者工具中調(diào)試

appid和secret一定要正確

域名一定是備案的

綁定域名需要的放在服務(wù)器上的txt位置一定要正確

參考

微信公眾號(hào)開(kāi)發(fā)文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/99214.html

相關(guān)文章

  • Node.js 微信公眾號(hào)實(shí)戰(zhàn)】4.Node.js 微信消息管理

    摘要:消息推送也是微信公眾號(hào)開(kāi)發(fā)更為有趣的功能,涉及到文本消息圖片消息語(yǔ)音消息視頻消息音樂(lè)消息以及圖文消息。在文件中創(chuàng)建文件用于消息的管理。 一、寫(xiě)在前面的話 ??當(dāng)用戶發(fā)送消息給公眾號(hào)時(shí)(或某些特定的用戶操作引發(fā)的事件推送時(shí)),會(huì)產(chǎn)生一個(gè)POST請(qǐng)求,開(kāi)發(fā)者可以在響應(yīng)包(Get)中返回特定XML結(jié)構(gòu),來(lái)對(duì)該消息進(jìn)行響應(yīng)。 ??消息推送也是微信公眾號(hào)開(kāi)發(fā)更為有趣的功能,涉及到文本消息、圖片消...

    lewinlee 評(píng)論0 收藏0
  • Node.js 微信公眾號(hào)實(shí)戰(zhàn)】1.Node.js 接入微信公眾平臺(tái)開(kāi)發(fā)

    摘要:打開(kāi)中文網(wǎng)文檔打開(kāi)微信開(kāi)發(fā)者文檔三接入微信公眾平臺(tái)創(chuàng)建項(xiàng)目首先我們?cè)陔娔X的任意磁盤(pán)上創(chuàng)建文件夾,命名隨意,我這命名為隨后在文件夾中創(chuàng)建兩個(gè)文件一個(gè)是,另一個(gè)為。接入驗(yàn)證再次進(jìn)入微信公眾平臺(tái)在左側(cè)菜單點(diǎn)擊基本配置,如圖點(diǎn)擊修改配置。 一、寫(xiě)在前面的話 ??Node.js是一個(gè)開(kāi)放源代碼、跨平臺(tái)的JavaScript語(yǔ)言運(yùn)行環(huán)境,采用Google開(kāi)發(fā)的V8運(yùn)行代碼,使用事件驅(qū)動(dòng)、非阻塞和異...

    winterdawn 評(píng)論0 收藏0
  • Node.js 微信公眾號(hào)實(shí)戰(zhàn)】3.Node.js 自定義微信菜單

    摘要:一寫(xiě)在前面的話上一篇文章中,我們使用成功的實(shí)現(xiàn)了的獲取存儲(chǔ)以及更新,這篇文章我們來(lái)實(shí)現(xiàn)微信的自定義菜單功能。二自定義微信菜單微信文檔步驟在開(kāi)始碼代碼之前,我們依然是先理清實(shí)現(xiàn)的思路,再開(kāi)始編寫(xiě)實(shí)現(xiàn)代碼。 一、寫(xiě)在前面的話 ??上一篇文章中,我們使用 Node.js 成功的實(shí)現(xiàn)了access_token 的獲取、存儲(chǔ)以及更新,這篇文章我們來(lái)實(shí)現(xiàn)微信的自定義菜單功能。showImg(htt...

    Barry_Ng 評(píng)論0 收藏0
  • Node.js 微信公眾號(hào)實(shí)戰(zhàn)】2.Node.js access_token的獲取、存儲(chǔ)及更新

    摘要:主要用于封裝開(kāi)發(fā)微信公眾平臺(tái)的所有方法。剩下的就是去微信公眾平臺(tái)接入驗(yàn)證了,在上一篇文章中有詳細(xì)的教程,這里我就不再演示了三的獲取存儲(chǔ)及更新微信文檔步驟在開(kāi)始碼代碼之前,我們依然是先理清實(shí)現(xiàn)的思路,在開(kāi)始編寫(xiě)實(shí)現(xiàn)代碼。 一、寫(xiě)在前面的話 ??上一篇文章中,我們使用 Node.js 成功的實(shí)現(xiàn)了接入微信公眾平臺(tái)功能。在這篇文章中,我們將實(shí)現(xiàn)微信公眾平臺(tái)一個(gè)非常重要的參數(shù) access_t...

    adam1q84 評(píng)論0 收藏0
  • 微信開(kāi)發(fā)-自定義分享卡片-node.js實(shí)現(xiàn)

    摘要:本篇主要講述,如何在微信中打開(kāi)自家的頁(yè)面,在然后在用戶分享的時(shí)候,能由我們自定義分享出去后,展示的頁(yè)面卡片中的頁(yè)面標(biāo)題頁(yè)面描述頁(yè)面圖片和分享鏈接。 本篇主要講述,如何在微信中打開(kāi)自家的頁(yè)面,在然后在用戶分享的時(shí)候,能由我們自定義分享出去后,展示的頁(yè)面卡片中的頁(yè)面標(biāo)題、頁(yè)面描述、頁(yè)面圖片和分享鏈接。 此功能,具體的來(lái)說(shuō),是: 在微信打開(kāi)自家的頁(yè)面 點(diǎn)擊右上角微信的功能按鈕,出現(xiàn)功能菜單...

    Object 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<