摘要:接口安全域名主要是在調(diào)用微信時(shí)用到。到這里為止測(cè)試號(hào)配置就完成了二微信網(wǎng)頁(yè)授權(quán)篇接口地址為這里你可以使用此地址上的接口進(jìn)行自己編寫(xiě),也可以使用別人封裝好的。
說(shuō)明:由于最近開(kāi)發(fā)公眾號(hào),特寫(xiě)篇文章來(lái)記錄下開(kāi)發(fā)流程和開(kāi)發(fā)中的坑。
開(kāi)發(fā)用的技術(shù)為 react + express , nodejs作為中間層。
首先申請(qǐng)接口測(cè)試號(hào)
地址:https://mp.weixin.qq.com/wiki...
上面為測(cè)試號(hào)配置頁(yè)面
這里的接口配置信息 需要和 微信進(jìn)行一次通信,才能夠填寫(xiě)。
這一層通信是在nodejs層里進(jìn)行的。
在項(xiàng)目里創(chuàng)建一個(gè)路由,通信代碼如下:
const sha1 = require("sha1"); router.get("/wx", function(req, res) { const { signature, timestamp, nonce, echostr } = req.query; const token = config.token; let str = [token, timestamp, nonce].sort().join(""); const sha = sha1(str); if( sha === signature) { console.log("驗(yàn)證成功") res.send(echostr); } else { console.log("驗(yàn)證失敗") res.send("驗(yàn)證失敗"); } });
這里的URL就是填寫(xiě)你通信路由的地址,Token要和 通信代碼中的 token保持一致。
然后點(diǎn)擊 提交 按鈕,微信就會(huì)向你填寫(xiě)的URL發(fā)起請(qǐng)求。URL和Token無(wú)誤,即可提交成功。
主要是在調(diào)用微信JS-SDK時(shí)用到。
這里我們有做一個(gè)朋友圈分享功能,要調(diào)用SDK的頁(yè)面和分享的鏈接,要填寫(xiě)在安全域名下,才能成功
(在下面的微信JS-SDK使用會(huì)講到)
這里的域名填寫(xiě)你項(xiàng)目的域名(例如): xxx.com 即可,不需要加http/https。
到這里為止測(cè)試號(hào)配置就完成了!!!
接口地址為:https://mp.weixin.qq.com/wiki...
這里你可以使用此地址上的接口進(jìn)行自己編寫(xiě),也可以使用別人封裝好的SDK。
這里我使用的別人封裝好的SDK
https://github.com/node-webot...
這里也是在node層進(jìn)行處理
$ npm install wechat-oauth var OAuth = require("wechat-oauth"); var client = new OAuth("your appid", "your secret’);
生成引導(dǎo)用戶點(diǎn)擊的URL。
var url = client.getAuthorizeURL("redirectUrl", "state", "scope");
如果是PC上的網(wǎng)頁(yè),請(qǐng)使用以下方式生成
var url = client.getAuthorizeURLForWebsite("redirectUrl");
獲取Openid和AccessToken
用戶點(diǎn)擊上步生成的URL后會(huì)被重定向到上步設(shè)置的 redirectUrl,并且會(huì)帶有code參數(shù),我們可以使用這個(gè)code換取access_token和用戶的openid
client.getAccessToken("code", function (err, result) { var accessToken = result.data.access_token; var openid = result.data.openid; });
復(fù)制代碼獲取用戶信息
如果我們生成引導(dǎo)用戶點(diǎn)擊的URL中scope參數(shù)值為snsapi_userinfo,接下來(lái)我們就可以使用openid換取用戶詳細(xì)信息(必須在getAccessToken方法執(zhí)行完成之后)
client.getUser(openid, function (err, result) { var userInfo = result; });
通過(guò)以上這幾個(gè)步驟,就可以拿到用戶的信息!!!
三. 微信JS-SDK使用篇(這里以朋友圈分享為例子)微信JS-SDK說(shuō)明文檔
地址:https://mp.weixin.qq.com/wiki...
sdk使用:(這里搬用下官網(wǎng)的文檔,這里可詳細(xì)參考文檔,這里唯一麻煩一點(diǎn)的地方就是 簽名算法)
步驟一:綁定域名
先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫(xiě)“JS接口安全域名”。
步驟二:引入JS文件
在需要調(diào)用JS接口的頁(yè)面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/...
步驟三:通過(guò)config接口注入權(quán)限驗(yàn)證配置
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接口列表 });
這里的timestamp,nonceStr,signature需要通過(guò)接口獲取,接下來(lái)我們就來(lái)獲取 timestamp,nonceStr,signature(在node層處理)
這里第一步就需要獲取access_token,
要調(diào)取微信的SDK,必須要獲取access_token,access_token是公眾號(hào)的全局唯一接口調(diào)用憑據(jù),公眾號(hào)調(diào)用各接口時(shí)都需使用access_token,access_token有效期為2個(gè)小時(shí),而調(diào)取access_token接口的次數(shù)限制為2000,所以需要存儲(chǔ)下來(lái)(存的方式看你自己)
獲取access_token接口:
https://mp.weixin.qq.com/wiki...
獲取access_token 和timestamp,nonceStr,signature代碼如下:
const rp = require("request-promise’); const {sign} = require(‘./sign"); rp(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${config.appID}&secret=${config.appsecret}`) .then(function (response) { const access_token = JSON.parse(response).access_token; setCookie(res, "at", access_token); rp(`https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=${access_token}&type=jsapi`) .then(function (response2) { let ticket = JSON.parse(response2).ticket; let signObj = sign(ticket, config.originUrl + req.originalUrl); setCookie(res, "timestamp", signObj.timestamp); setCookie(res, "nonceStr", signObj.nonceStr); setCookie(res, "signature", signObj.signature); /*...*/ }).catch(function () { /*...*/ }); }).catch(function () { /*...*/ });
這里setCookie是我自己寫(xiě)的存cookie的方法,
這里的sign是微信的簽名算法:
sign.js
"use strict"; const jsSHA = require("jssha"); var createNonceStr = function () { return Math.random().toString(36).substr(2, 15); }; var createTimestamp = function () { return parseInt(new Date().getTime() / 1000) + ""; }; var raw = function (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; }; /** * @synopsis 簽名算法 * * @param jsapi_ticket 用于簽名的 jsapi_ticket * @param url 用于簽名的 url ,注意必須動(dòng)態(tài)獲取,不能 hardcode * * @returns */ exports.sign = function (jsapi_ticket, url) { var ret = { jsapi_ticket: jsapi_ticket, nonceStr: createNonceStr(), timestamp: createTimestamp(), url: url }; var string = raw(ret); let shaObj = new jsSHA(string, "TEXT"); ret.signature = shaObj.getHash("SHA-1", "HEX"); return ret; };
此時(shí)我們已經(jīng)把timestamp,nonceStr,signature存了起來(lái),然后我們來(lái)到前臺(tái)頁(yè)面獲取(我這里使用的react)
componentDidMount () { 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: appID, // 必填,公眾號(hào)的唯一標(biāo)識(shí) timestamp: Cookies.get("timestamp"), // 必填,生成簽名的時(shí)間戳 nonceStr: Cookies.get("nonceStr"), // 必填,生成簽名的隨機(jī)串 signature: Cookies.get("signature"), // 必填,簽名 jsApiList: [ "onMenuShareTimeline", "onMenuShareAppMessage" ] // 必填,需要使用的JS接口列表 }); }
步驟四:在需要的地方調(diào)用接口,
代碼如下:
wx.ready(function() { //分享給朋友 wx.onMenuShareTimeline({ title: "", // 分享標(biāo)題 link: href, // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁(yè)面對(duì)應(yīng)的公眾號(hào)JS安全域名一致 imgUrl: imgUrl, // 分享圖標(biāo) }); wx.onMenuShareAppMessage({ title: "", // 分享標(biāo)題 link: href, // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁(yè)面對(duì)應(yīng)的公眾號(hào)JS安全域名一致 imgUrl: imgUrl, // 分享圖標(biāo) }); });
這里就完成了對(duì)微信JS-SDK的調(diào)用!!!
第一次寫(xiě)文章,很多地方有漏洞,不完善,希望各位指出。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/98310.html
摘要:本文是淺析微信支付系列文章的第三篇,主要會(huì)講一下在開(kāi)發(fā)前的一些注意事項(xiàng)。淺析微信支付系列已經(jīng)更新兩篇了喲,沒(méi)有看過(guò)的朋友們可以看一下。開(kāi)通微信支付需要注冊(cè)登陸微信商戶平臺(tái),微信支付相關(guān)的信息都需要在這個(gè)平臺(tái)上進(jìn)行操作。 本文是【淺析微信支付】系列文章的第三篇,主要會(huì)講一下在開(kāi)發(fā)前的一些注意事項(xiàng)。 淺析微信支付系列已經(jīng)更新兩篇了喲~,沒(méi)有看過(guò)的朋友們可以看一下。 淺析微信支付:前篇大綱...
摘要:微信年月日發(fā)公告稱,個(gè)人主體注冊(cè)公眾號(hào)數(shù)量上限由個(gè)調(diào)整為個(gè)。大家都知道每個(gè)微信公眾號(hào)在進(jìn)行開(kāi)發(fā)時(shí),授權(quán)回調(diào)的域名只能設(shè)置一個(gè),正常的開(kāi)發(fā)一般一套環(huán)境就對(duì)應(yīng)一個(gè)域名。 微信2018年11月16日發(fā)公告稱,個(gè)人主體注冊(cè)公眾號(hào)數(shù)量上限由2個(gè)調(diào)整為1個(gè)。企業(yè)類主體注冊(cè)公眾號(hào)數(shù)量上限由5個(gè)調(diào)整為2個(gè)。這個(gè)對(duì)馬上要注冊(cè)公眾號(hào)的企業(yè)來(lái)說(shuō)頓時(shí)心情不好了。 大家都知道每個(gè)微信公眾號(hào)在進(jìn)行開(kāi)發(fā)時(shí),授權(quán)回調(diào)...
摘要:描述由于馬上要做一波公眾號(hào)開(kāi)發(fā),今天先調(diào)研,把基本的服務(wù)器接起來(lái)。手腳架地址文檔微信公眾號(hào)公眾號(hào)開(kāi)發(fā)首先你要有個(gè)公眾號(hào),這里就不說(shuō)了按照流程申請(qǐng)。腳手架的說(shuō)明微信公眾號(hào)接入的時(shí)候要做很多事情,為了簡(jiǎn)化開(kāi)發(fā),提供一個(gè)版本的服務(wù)器。 描述 由于馬上要做一波公眾號(hào)開(kāi)發(fā),今天先調(diào)研,把基本的服務(wù)器接起來(lái)。微信公眾號(hào)服務(wù)器在接入的時(shí)候要做一些煩躁的事情,改配置的時(shí)候要進(jìn)行握手,api調(diào)用要做一些...
摘要:時(shí)間年月日星期五說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。本套課程介紹微信公眾號(hào)開(kāi)發(fā),主要涉及公眾號(hào)介紹編輯模式介紹開(kāi)發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費(fèi)學(xué)習(xí)網(wǎng)站。 時(shí)間:2017年08月11日星期五說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github...
摘要:本文是淺析微信支付系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。淺析微信支付前篇大綱微信支付是集成在微信客戶端的支付功能,用戶可以通過(guò)手機(jī)完成快速的支付流程。目前微信支付支持手機(jī)系統(tǒng)有蘋(píng)果安卓和。 本文是【淺析微信支付】系列文章的第二篇,主要講解一下普通商戶接入的支付方式以及其中的不同之處。 上篇文章講了本系列的大綱,沒(méi)有看過(guò)的朋友們可以看一下。 淺析微信支...
摘要:本篇是該系列的第一篇,本地開(kāi)發(fā)環(huán)境搭建以及接入微信。若確認(rèn)此次請(qǐng)求來(lái)自微信服務(wù)器,原樣返回參數(shù)內(nèi)容,則接入生效,成為開(kāi)發(fā)者成功,否則接入失敗。 一、簡(jiǎn)介 關(guān)于微信公眾號(hào)的介紹就省略了,自行搜索。注冊(cè)過(guò)程也不說(shuō)了。我們會(huì)直接注冊(cè)測(cè)試號(hào)來(lái)實(shí)現(xiàn)代碼。這將會(huì)是個(gè)全面講解微信公眾號(hào)開(kāi)發(fā)的系列教程。本篇是該系列的第一篇,本地開(kāi)發(fā)環(huán)境搭建以及接入微信。在開(kāi)始之前最好去看看開(kāi)發(fā)者文檔微信公眾平臺(tái)技術(shù)文...
閱讀 3582·2021-11-24 09:38
閱讀 3277·2021-11-22 09:34
閱讀 2172·2021-09-22 16:03
閱讀 2468·2019-08-29 18:37
閱讀 447·2019-08-29 16:15
閱讀 1834·2019-08-26 13:56
閱讀 934·2019-08-26 12:21
閱讀 2274·2019-08-26 12:15