资讯专栏INFORMATION COLUMN

微信公众号开发

nifhlheimr / 2720人阅读

摘要:接口安全域名主要是在调用微信时用到。到这里为止测试号配置就完成了二微信网页授权篇接口地址为这里你可以使用此地址上的接口进行自己编写,也可以使用别人封装好的。

说明:由于最近开发公众号,特写篇文章来记录下开发流程和开发中的坑。
开发用的技术为 react + express , nodejs作为中间层。

一.配置篇

首先申请接口测试号
地址:https://mp.weixin.qq.com/wiki...

上面为测试号配置页面

1.接口配置信息 修改

这里的接口配置信息 需要和 微信进行一次通信,才能够填写。
这一层通信是在nodejs层里进行的。
在项目里创建一个路由,通信代码如下:

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("验证成功")
        res.send(echostr);
    } else {
        console.log("验证失败")
        res.send("验证失败");
    }
});


这里的URL就是填写你通信路由的地址,Token要和 通信代码中的 token保持一致。
然后点击 提交 按钮,微信就会向你填写的URL发起请求。URL和Token无误,即可提交成功。

2.JS接口安全域名

主要是在调用微信JS-SDK时用到。
这里我们有做一个朋友圈分享功能,要调用SDK的页面和分享的链接,要填写在安全域名下,才能成功
(在下面的微信JS-SDK使用会讲到)

3.授权回调页面


这里的域名填写你项目的域名(例如): xxx.com 即可,不需要加http/https。
到这里为止测试号配置就完成了!!!

二.微信网页授权篇

接口地址为:https://mp.weixin.qq.com/wiki...
这里你可以使用此地址上的接口进行自己编写,也可以使用别人封装好的SDK。
这里我使用的别人封装好的SDK
https://github.com/node-webot...
这里也是在node层进行处理

$ npm install wechat-oauth

var OAuth = require("wechat-oauth");
var client = new OAuth("your appid", "your secret’);

生成引导用户点击的URL。

var url = client.getAuthorizeURL("redirectUrl", "state", "scope");

如果是PC上的网页,请使用以下方式生成

var url = client.getAuthorizeURLForWebsite("redirectUrl");

获取Openid和AccessToken
用户点击上步生成的URL后会被重定向到上步设置的 redirectUrl,并且会带有code参数,我们可以使用这个code换取access_token和用户的openid

client.getAccessToken("code", function (err, result) {
  var accessToken = result.data.access_token;
  var openid = result.data.openid;
});

复制代码获取用户信息
如果我们生成引导用户点击的URL中scope参数值为snsapi_userinfo,接下来我们就可以使用openid换取用户详细信息(必须在getAccessToken方法执行完成之后)

client.getUser(openid, function (err, result) {
  var userInfo = result;
});

通过以上这几个步骤,就可以拿到用户的信息!!!

三. 微信JS-SDK使用篇(这里以朋友圈分享为例子)

微信JS-SDK说明文档
地址:https://mp.weixin.qq.com/wiki...
sdk使用:(这里搬用下官网的文档,这里可详细参考文档,这里唯一麻烦一点的地方就是 签名算法)

步骤一:绑定域名
先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

步骤二:引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/...

步骤三:通过config接口注入权限验证配置

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: "", // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: "", // 必填,生成签名的随机串
    signature: "",// 必填,签名
    jsApiList: [] // 必填,需要使用的JS接口列表
});

这里的timestamp,nonceStr,signature需要通过接口获取,接下来我们就来获取 timestamp,nonceStr,signature(在node层处理)
这里第一步就需要获取access_token,
要调取微信的SDK,必须要获取access_token,access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token,access_token有效期为2个小时,而调取access_token接口的次数限制为2000,所以需要存储下来(存的方式看你自己)
获取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是我自己写的存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 ,注意必须动态获取,不能 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;
};

此时我们已经把timestamp,nonceStr,signature存了起来,然后我们来到前台页面获取(我这里使用的react)

componentDidMount () {
    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: appID, // 必填,公众号的唯一标识
        timestamp: Cookies.get("timestamp"), // 必填,生成签名的时间戳
        nonceStr: Cookies.get("nonceStr"),   // 必填,生成签名的随机串
        signature: Cookies.get("signature"), // 必填,签名
        jsApiList: [
            "onMenuShareTimeline",
            "onMenuShareAppMessage"
        ] // 必填,需要使用的JS接口列表
    });
}

步骤四:在需要的地方调用接口,
代码如下:

wx.ready(function() {
//分享给朋友
    wx.onMenuShareTimeline({
        title: "", // 分享标题
        link: href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: imgUrl, // 分享图标
    });
    wx.onMenuShareAppMessage({
        title: "", // 分享标题
        link: href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
        imgUrl: imgUrl, // 分享图标
    });
});

这里就完成了对微信JS-SDK的调用!!!
第一次写文章,很多地方有漏洞,不完善,希望各位指出。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98310.html

相关文章

  • 浅析微信支付:开发前的准备

    摘要:本文是浅析微信支付系列文章的第三篇,主要会讲一下在开发前的一些注意事项。浅析微信支付系列已经更新两篇了哟,没有看过的朋友们可以看一下。开通微信支付需要注册登陆微信商户平台,微信支付相关的信息都需要在这个平台上进行操作。 本文是【浅析微信支付】系列文章的第三篇,主要会讲一下在开发前的一些注意事项。 浅析微信支付系列已经更新两篇了哟~,没有看过的朋友们可以看一下。 浅析微信支付:前篇大纲...

    yanest 评论0 收藏0
  • 企业只能申请两个微信公众微信开发不够用?不,一个公众就够了!

    摘要:微信年月日发公告称,个人主体注册公众号数量上限由个调整为个。大家都知道每个微信公众号在进行开发时,授权回调的域名只能设置一个,正常的开发一般一套环境就对应一个域名。 微信2018年11月16日发公告称,个人主体注册公众号数量上限由2个调整为1个。企业类主体注册公众号数量上限由5个调整为2个。这个对马上要注册公众号的企业来说顿时心情不好了。 大家都知道每个微信公众号在进行开发时,授权回调...

    wthee 评论0 收藏0
  • 微信公众开发小记——1.接入微信服务器

    摘要:描述由于马上要做一波公众号开发,今天先调研,把基本的服务器接起来。手脚架地址文档微信公众号公众号开发首先你要有个公众号,这里就不说了按照流程申请。脚手架的说明微信公众号接入的时候要做很多事情,为了简化开发,提供一个版本的服务器。 描述 由于马上要做一波公众号开发,今天先调研,把基本的服务器接起来。微信公众号服务器在接入的时候要做一些烦躁的事情,改配置的时候要进行握手,api调用要做一些...

    sshe 评论0 收藏0
  • 慕课网_《初识Java微信公众开发》学习总结

    摘要:时间年月日星期五说明本文部分内容均来自慕课网。本套课程介绍微信公众号开发,主要涉及公众号介绍编辑模式介绍开发模式介绍等。慕课网是垂直的互联网技能免费学习网站。 时间:2017年08月11日星期五说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github...

    PrototypeZ 评论0 收藏0
  • 浅析微信支付:微信支付简单介绍(小程序、公众、App、H5)

    摘要:本文是浅析微信支付系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处。浅析微信支付前篇大纲微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程。目前微信支付支持手机系统有苹果安卓和。 本文是【浅析微信支付】系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处。 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下。 浅析微信支...

    shadowbook 评论0 收藏0
  • Koa2微信公众开发(一) 本地开发调试环境搭建

    摘要:本篇是该系列的第一篇,本地开发环境搭建以及接入微信。若确认此次请求来自微信服务器,原样返回参数内容,则接入生效,成为开发者成功,否则接入失败。 一、简介 关于微信公众号的介绍就省略了,自行搜索。注册过程也不说了。我们会直接注册测试号来实现代码。这将会是个全面讲解微信公众号开发的系列教程。本篇是该系列的第一篇,本地开发环境搭建以及接入微信。在开始之前最好去看看开发者文档微信公众平台技术文...

    snifes 评论0 收藏0

发表评论

0条评论

nifhlheimr

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<