写在开头

我们项目是使用Vue 和 Node.js的组合,所以文中的所以代码均是Js代码。
本文介绍的是验证服务器,以及获取网页授权的初步过程遇到的代理问题,其他接口大同小异,就不过多介绍了。


验证域名服务器

这是做公众号开发必备的第一部,它要求开发者准备好自己的服务器和域名,并且有一个指定的接口可以返回指定信息:


下面我来介绍一下这个功能点的实现,其实就是Nginx中配置好路径,比如/my_path跳转到我们的服务上,后台服务中已经实现我我们的 /api/validateAccessToken 接口,具体如下:

const { WECHAT_TOKEN, WECHAT_CONFIG } = require('../config');
const crypto = require('crypto');
const request = require('request');
const { getLog } = require("../utils/log");
const logger = getLog('wechat_service');/***  参数        描述*  signature   微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。*  timestamp   时间戳*  nonce       随机数*  echostr     随机字符串* @param {*} signature * @param {*} timestamp * @param {*} nonce * @param {*} echostr */async createAccessToken(signature, timestamp, nonce, echostr) {try {//1.将token、timestamp、nonce三个参数进行字典序排序let array = [WECHAT_TOKEN, timestamp, nonce];array.sort();//2.将三个参数字符串拼接成一个字符串进行sha1加密let tempStr = array.join('');const hashCode = crypto.createHash('sha1');  let resultCode = hashCode.update(tempStr, 'utf8').digest('hex'); logger.info(`resultcode is : ${resultCode}`);//3.开发者获得加密后的字符串可与signature对比,确认该请求来源于微信if (resultCode === signature) {logger.info(`createAccessToken resultCode is equql to signature`);return echostr;} else {logger.info(`createAccessToken resultCode is not equql to signature`);return 'mismatch';}} catch (err) {logger.error(`createAccessToken error is : ${err && err.message || ''}`);return 'mismatch_error';}}

这里需要注意的是字典序排序,其实在Js里就是Sort一下就行了。如果相等就返回echostr, 不相等就返回mismatch


获取code

配置好服务器之后 ,在测试号上配置好我们自己 的菜单,直接通过链接跳转回调获取 Code,具体参考如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

这里的REDIRECT_URI就是直接配置到你的服务器前端路径,这样拿到Code就会直接带到你的项目上去了。
测试号配置菜单可以参考: 微信公众平台接口调试工具-配置菜单


获取Access_token

好了,拿到Code 就可以开发下面的接口了,第一步没有什么问题。但是,在开发下面这个接口的时候,由于公司网络的原因,必须要加代理才能调用,下面不多说,直接上代码:

const { WECHAT_TOKEN, WECHAT_CONFIG } = require('../config');
const crypto = require('crypto');
const request = require('request');
const { getLog } = require("../utils/log");
const logger = getLog('wechat_service');/*** 根据Code获取 OpenId和网页授权Access_token, * 这里的Access_token与基础支持中的Access_token不一样* @param {*} code */async getNetAccessToken(code) {try {logger.info(`come into getAccessToken Code is : ${code}`);return new Promise((resolve, reject) => {let pr = request.defaults({ 'proxy': WECHAT_CONFIG.proxy, rejectUnauthorized: false }); pr.get(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${WECHAT_CONFIG.appid}&secret=${WECHAT_CONFIG.appsecret}&code=${code}&grant_type=authorization_code`,(error, response, body) => {if (response && response.statusCode == 200) {var data = JSON.parse(body);var access_token = data.access_token;var openid = data.openid;logger.info(`access_token ${access_token}, openid ${openid}`);return resolve(access_token);} else {logger.info(`callback error ${error}`);return reject('callback error');}})})} catch (err) {logger.error(`getAccessToken error is : ${err && err.message || ''}`);return;}}

这个方法,就是根据页面上拿到的Code去获取网页授权的Access_tokenOpenid 主要是下面这一句

let pr = request.defaults({ 'proxy': WECHAT_CONFIG.proxy, rejectUnauthorized: false });

这里的WECHAT_CONFIG.proxy具体为: http://xx.xx.xx.xx:port

也就是说,必须带上http://否则这个request的包不会识为它是个正确的代理地址。还有一点就是,rejectUnauthorized: false因为微信的Api接口是https的,所以这里还要把证书校验去掉。

至此,接口可以正常调通。

最后

希望本文可以帮助到那些同样在公司内网开发的同学们。

解决:微信公众号开发公司内网代理问题相关推荐

  1. 微信公众号开发,内网穿透,内网映射到公网

    使用工具有路由侠.花生壳等. 本人使用的路由侠内网穿透工具,下载地址:http://www.luyouxia.com/#home-hero 使用步骤: 1.下载安装路由侠 2.注册登录 3.添加 主机 ...

  2. 利用NATAPP隧道解决微信公众号开发之本地调试难题

    文章目录 公众号的分类 微信公众平台: 编辑模式 开发模式 开发模式配置流程 1.登录测试号页面,可以看到该测试号相关的信息 2.配置参数介绍 3.搭建本地应用(java/python/php等语言均 ...

  3. 如何解决微信公众号开发转发接口,分享出去是链接不是卡片

    微信公众号已配置完域名且已完成微信认证.appid也准确无误,转发接口也是没有任何问题,但是分享出去后是链接不是卡片 原因 因为这是微信开放全域名访问后出现的限制 解决方案 1.将链接添加至公众号的自 ...

  4. 【网络工程】如何本地调试微信公众号开发教程(Nginx代理方法)

    目录 前言 目的 通过Nginx代理实现本地调试微信公众号 实现工具 实现步骤 1.启动本地前端项目 2.首先配置Nginx 3.填写app.conf内容,把本地前端项目与域名形成映射. 4.把app ...

  5. 微信公众号开发本地调试【内网穿透】

    在做微信公众号开发的时候,必须接入外网已经备案的URL地址,不然本地没法进行调试,比较简单的方法可以做内网穿透,映射生成一个外网URL地址来进行回调测试. 这里推荐一个内网穿透工具--cpolar,可 ...

  6. 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)

    由于图片图床问题,文章部分图片无法预览,暂时把该文章迁移至简书,给大家带来麻烦,抱歉了. 感兴趣的小伙伴可参考:https://www.jianshu.com/p/cc1b1050b5b4 Autho ...

  7. 微信公众号开发整理(一)所有微信资料整理参考慕课网学习而得

    1.www.baidu.com搜索:微信公众平台登录,输入账号密码进行登录 2.登录之后找到左边最后一个菜单:开发==>基本配置,如下,获取开发者ID(AppID)及开发者密码(AppSecre ...

  8. “errcode“:40164,“errmsg“:“invalid ip ...微信公众号开发调用失败的解决办法

    问题概述 关于这个问题,博主是在进行微信公众号平台开发的过程中遇到的, 微信公众号平台的前后端代码开发完成后,在联调接口调用: " https://api.weixin.qq.com/cgi ...

  9. 微信公众号开发redirect_uri 参数错误 的解决办法,Oauth2授权重定向域名参数错误解决办法

    问题概述 关于这个问题,博主是在进行微信公众号开发过程中获取微信公众号CODE用于下一步验证获取openid和access_token时遇到的, 回调地址: " https://open.w ...

最新文章

  1. linux下各种颜色的文件表示的文件类型
  2. 程序员生存定律--编程的起点与可能的失足
  3. 是什么优化让 .NET Core 性能飙升?
  4. android 权限
  5. 图解欧洲足球五大联赛 | R爬虫可视化第五季
  6. ExtJS TreeGrid的使用方法
  7. java变量练习_Java变量与运算符练习
  8. Silverlight实用窍门系列:43.Silverlight从ListBox拖拽图标到另一ListBox
  9. 使用redis保存验证码
  10. kali下制作破解密码的字典
  11. codeproject
  12. linux长ping然后保存,Linux下长时间ping网络加时间戳并记录到文本
  13. matlab解洛伦兹方程,用MATLAB和Simulink解决微分方程的问题:Lorenz吸引子案例研究【含Matlab代码】...
  14. 考研日记2021年9月16日
  15. UIGestureRecognizer触控手势
  16. Matplotlib-基础知识
  17. ubuntu20.04安装搜狗sogou输入法
  18. 网易云安装以及玄学打开问题
  19. 自动控制原理——线性系统的根轨迹分析法
  20. Ubuntu16.04安装与彻底卸载docker(亲测有效)

热门文章

  1. 搬砖方法论:命令查询分离原则(Command-Query Separation,CQS原则)
  2. 一个无驱型USB加密锁的HID通信分析
  3. 微信小程序连接展示MQTT数据信息
  4. 武威世纪计算机英语作文,我的家乡武威 英语作文
  5. Java中的Map【二】SortedMap接口
  6. Web渗透_扫描工具Httrack
  7. 服务器注册表修复,服务器出现-由注册表引起的I/O操作发生了不可恢复的错误 的解决方法...
  8. vue3时间格式转换为yyyy/mm/dd,yyyy-MM-dd,yyyy-MM-dd hh:mm:ss,hh:mm,yyyy-MM-ddThh:mm:ss+08:00
  9. linux ntp 无法同步时间,ntpdate和ntpd无法在Linux上同步时钟
  10. 1386: 十转换转R进制