微信公众平台开发接口_小程序注册好了为什么搜索不到

微信公众平台开发接口_小程序注册好了为什么搜索不到在进行微信公众平台开发之前,需要先接入微信公众平台。具体的步骤在公众平台开发者文档-接入指南已有详细介绍,文档中也提供了验证服务器的PHP示例代码。本文主要提供了Node.js版本的验证代码,同时把步骤细化,让开发者更方便地了解整个接入过程,对初学者更友好。TL;DR在微信公众平台后台的开发者中心/填写服务器配置页面…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在进行微信公众平台开发之前,需要先接入微信公众平台。具体的步骤在 公众平台开发者文档-接入指南 已有详细介绍,文档中也提供了验证服务器的 PHP 示例代码。

本文主要提供了 Node.js 版本的验证代码,同时把步骤细化,让开发者更方便地了解整个接入过程,对初学者更友好。

TL;DR

在微信公众平台后台的 开发者中心/填写服务器配置 页面,配置好 URL 和 Token 后,复制下面的代码,修改 Token,在服务器运行,然后再在页面上点击提交即可进行接入验证。

// checkSignature.js
/**
 * 整个验证步骤分为三步
 *    1. 将token、timestamp、nonce三个参数进行字典序排序
 *    2. 将三个参数字符串拼接成一个字符串进行sha1加密
 *    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
 */


const http = require('http');
const url = require('url');
const crypto = require('crypto');


// Web 服务器端口
const port = 3333;
// 微信公众平台服务器配置中的 Token
const token = 'token';


/**
 *  对字符串进行sha1加密
 * @param  {string} str 需要加密的字符串
 * @return {string}     加密后的字符串
 */
function sha1(str) {
  const md5sum = crypto.createHash('sha1');
  md5sum.update(str);
  const ciphertext = md5sum.digest('hex');
  return ciphertext;
}

/**
 * 验证服务器的有效性
 * @param  {object} req http 请求
 * @param  {object} res http 响应
 * @return {object}     验证结果
 */
function checkSignature(req, res) {
  const query = url.parse(req.url, true).query;
  console.log('Request URL: ', req.url);
  const signature = query.signature;
  const timestamp = query.timestamp;
  const nonce = query.nonce;
  const echostr = query.echostr;
  console.log('timestamp: ', timestamp);
  console.log('nonce: ', nonce);
  console.log('signature: ', signature);
  // 将 token/timestamp/nonce 三个参数进行字典序排序
  const tmpArr = [token, timestamp, nonce];
  const tmpStr = sha1(tmpArr.sort().join(''));
  console.log('Sha1 String: ', tmpStr);
  // 验证排序并加密后的字符串与 signature 是否相等
  if (tmpStr === signature) {
    // 原样返回echostr参数内容
    res.end(echostr);
    console.log('Check Success');
  } else {
    res.end('failed');
    console.log('Check Failed');
  }
}


const server = http.createServer(checkSignature)
server.listen(port, () => {
  console.log(`Server is runnig ar port ${port}`);
  console.log('Start Checking...');
});

填写服务器配置

登录进入微信公众平台后台管理页面

登录

然后进入 基本配置 页面

基本配置

再然后选择 修改配置,进入到 填写服务器配置 子页面

填写服务器配置

  • URL 为已经解析到你的服务器的域名,这里以 http://wechat.nodejh.com 这个二级域名为例

  • Token 随意填写即可

验证服务器地址的有效性

验证服务器地址的有效性,需要在域名对应的服务器上运行一段验证程序。该程序会接收上个步骤中的域名所发送的 HTTP 请求。

官方文档提供了 PHP 的示例程序,下面是 Node.js 版本:

// checkSignature.js
/**
 * 整个验证步骤分为三步
 *    1. 将token、timestamp、nonce三个参数进行字典序排序
 *    2. 将三个参数字符串拼接成一个字符串进行sha1加密
 *    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
 */


const http = require('http');
const url = require('url');
const crypto = require('crypto');


// Web 服务器端口
const port = 3333;
// 微信公众平台服务器配置中的 Token
const token = 'token';


/**
 *  对字符串进行sha1加密
 * @param  {string} str 需要加密的字符串
 * @return {string}     加密后的字符串
 */
function sha1(str) {
  const md5sum = crypto.createHash('sha1');
  md5sum.update(str);
  const ciphertext = md5sum.digest('hex');
  return ciphertext;
}

/**
 * 验证服务器的有效性
 * @param  {object} req http 请求
 * @param  {object} res http 响应
 * @return {object}     验证结果
 */
function checkSignature(req, res) {
  const query = url.parse(req.url, true).query;
  console.log('Request URL: ', req.url);
  const signature = query.signature;
  const timestamp = query.timestamp;
  const nonce = query.nonce;
  const echostr = query.echostr;
  console.log('timestamp: ', timestamp);
  console.log('nonce: ', nonce);
  console.log('signature: ', signature);
  // 将 token/timestamp/nonce 三个参数进行字典序排序
  const tmpArr = [token, timestamp, nonce];
  const tmpStr = sha1(tmpArr.sort().join(''));
  console.log('Sha1 String: ', tmpStr);
  // 验证排序并加密后的字符串与 signature 是否相等
  if (tmpStr === signature) {
    // 原样返回echostr参数内容
    res.end(echostr);
    console.log('Check Success');
  } else {
    res.end('failed');
    console.log('Check Failed');
  }
}


const server = http.createServer(checkSignature)
server.listen(port, () => {
  console.log(`Server is runnig ar port ${port}`);
  console.log('Start Checking...');
});

因为验证要使用 80(HTTP) 端口或 443(HTTPS) 端口,而 Node.js 一般不直接监听 80 端口,所以需要使用 Nginx 或其他程序将来自 http://wechat.nodejh.com 的请求转发到 Node.js 程序端口如上面的 3333。关于 Nginx 的配置,可以看我之前写的《使用 Ngnix 给 Node.js 应用做反向代理》。

这里也顺便给出该程序的 Nginx 配置

upstream nodejs {
    server 127.0.0.1:3333;
    keepalive 64;
}

server {
    listen 80;
    server_name wechat.nodejh.com;
    # 日志
    access_log /var/log/nginx/wechat.nodejh.com.log;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass http://nodejs;
    }
}

配置就绪之后,启动验证程序

$ node checkSignature.js
Server is runnig ar port 3333
Start Checking...

这样,checkSignature.js 就会创建一个 3333 端口的服务。访问 http://wechat.nodejh.com 这个域名的时候,Nginx 就会将请求转发到 3333 端口。

在微信公众平台后台管理的服务器配置页面,点击提交按钮,就会填写的 URL (这里是 http://wechat.nodejh.com)发送一个 HTTP 请求,并带上 signature,timestamp,nonce,echostr 这四个参数。

启动 checkSignature.js 后,在服务器配置页面,点击提交按钮,就会开启验证。

服务器端出现下面的结果,就说明验证成功。验证成功后,微信公众平台后台会自动跳转到 基本配置 页面。

# 服务端响应...
signature:  8fffb8f011d64819ec61105415114694bb03d392
Sha1 String:  8fffb8f011d64819ec61105415114694bb03d392
Check Success

然后就可以依据接口文档实现业务逻辑了。

后续我也还会更新一些关于微信公众平台开发的文章,欢迎关注。


Github Issue: https://github.com/nodejh/nodejh.github.io/issues/24

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171568.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql锁的面试题「建议收藏」

    mysql锁的面试题「建议收藏」1.Mysql中有哪几种锁?1.表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2.行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。3.页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。2.锁的优化策略1.读写分离2.分段加锁3.减少锁持有…

    2022年5月20日
  • pycharm如何配置anaconda环境_2022年冬奥会在哪举行

    pycharm如何配置anaconda环境_2022年冬奥会在哪举行这是2022年我自己记录的Pycharm+Anaconda配置教程,还有一些安装时遇到的疑惑浅析。

    2022年8月29日
  • 高斯函数和正态分布的关系_高斯函数半高宽

    高斯函数和正态分布的关系_高斯函数半高宽高斯函数与正态分布高斯函数或者说正态分布函数在很多场合都得到广泛应用,其是概率论和统计学的核心,在最大似然估计、贝叶斯估计中必不可少。其也是稀疏贝叶斯估计的重要基础。下面对高斯函数的一些基本知识点进

    2022年8月4日
  • Delphi教程推荐

    Delphi教程推荐
    非常适宜Delphi初学者。选择Delphi开发同学的眼光是不错的,由于使用Delphi开发应用软件可以提高编译的效率,前提是你要好好学习Delphi教程,对你以后的开展肯定有很大帮助的。  Delphi(Delphi培训)是Borland公司研制的新一代可视化开发工具,它应用范围非常广,无论是Windows系统还是LINUX系统上都能完美运行。  书名:《Delphi2005程序设计教程》  作/译者:刘瑞新  出版社:机械工业出版社  出版日期:2005年07月  内容提要 

    2022年6月30日
  • 项目部署、配置、查错常用到的Linux命令

    项目部署、配置、查错常用到的Linux命令

    2020年11月12日
  • 玩转电源设计,8个优选逆变电源参考方案大合辑

    玩转电源设计,8个优选逆变电源参考方案大合辑利用晶闸管电路把直流电转变成交流电,这种对应于整流的逆向过程,定义为逆变。例如:应用晶闸管的电力机车,当下坡时使直流电动机作为发电机制动运行,机车的位能转变成电能,反送到交流电网中去。又如运转着的直流电动机,要使它迅速制动,也可让电动机作发电机运行,把电动机的动能转变为电能,反送到电网中去。1、基于STM32单片机SPWM逆变电源设计功能描述:单片机采用:STM32单片机(型号:STM32F030F4P6)输出:正弦波频率:可调;幅值:可调;SPWM逆变原理:单片机SPWM驱动H桥+后级滤

    2022年6月6日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号