一、开发相关

1.平台地址

微信开放平台
QQ互联平台SDK

2.文章收集

来自CSDN兄台的QQ登录使用的教程
微信网站应用开发的详细流程和引导

VueJs单页应用实现微信网页授权及微信分享功能
【必看精贴】微信网页分享开发,配置本地调试

微信分享功能实现

3.本地测试

1.关于本地测试OAuth,PC和移动修改hosts
2.whistle修改80代理端口

二、解除80端口占用

控制面板->服务->将下图服务停止即可

上述whistle使用,不过情况不太好,成本太高。
故暂使用80端口配合nginx转发至本机服务器端口3000实现。

三、微信公众号分享jssdk实现

1.注册服务号,认证300元后,即可使用权限API。

2.jssdk下载,以及安全域名配置 + ip白名单设置。
此处先尝试在云服务器上传MP_verify。让申请先通过,

在测试的时候修改本机的HOSTS 让k12-code.com指向本地服务器80端口(没必要使用443配合证书),应该就可以调用接口了。

3、根据 JSSDK文档 完成access_token的生成和ticket票据的获取,生成签名;

// 注:这个签名由客户端传入 当前页面的URL,不带哈希部分 给服务端,再由服务端进行签名生成返回给客户端,客户端最终完成 wx.config 的初始化,然后客户端在微信环境下就能调用微信分享功能了。

微信 JS 接口签名校验工具

4、在微信开发者工具,访问k12-code(映射本机127.0.0.1),进行wx.config的配置打开debug调用接口是否可使用。


可以看到,权限调用成功。(二级域名也可以访问)
为验证之前本机域名映射的正确性,我们换一个未绑定的域名(也通过改HOSTS 本机映射)。

失败,提示域名错误。

到这儿,其实微信接口的本地开发,或者第三方平台接口的本地开发的性质都一样,都可以通过修改HOSTS映射至本机IP。这里涉及DNS解析知识,以后补给。

接下来是开发测试分享接口



其中3.1,3.2无法本机模拟测试,但是3.3和3.4均测试成功。开发到这就告一段落了。


四、微信开放平台登录接口接入

1.企业号注册 (QQ邮箱)
2.网站应用创建 (审核)。
3.开发资质认证 (300元)。
4.开始接入,按照 文档步骤

一样的本地开发,采用HOSTS修改映射。nginx转发请求


这里搭建测试环境的就不论了。直接到用户扫码后,重定向到网页(服务器),服务器接收到的code,如下:

可以拿code获取access_token // 这里我用node https模块发送请求

通过access_token调接口获取用户信息


之后就是涉及服务端数据入库的过程,注:如果希望同平台多应用用户数据共同,需要用到unionid,它代表当前开发平台账号的用户通用标识。

补充:基于cookie(即session标识前后联调),记得将所有请求域名都统一修改,不要使用localhost发请求,也不要请求的host是localhost,因为request cookie只会携带和目标host域名匹配的cookie数据。

来自2012年大佬的点拨:Cookie的Domain的作用域/有效范围


2022微信分享接入&本本地调试

1、微信分享接入

  1. 对于服务端: 配置 【IP白名单】,并获取 access_token 。

  2. 对于客户端: 使用 jssdk 当前客户端的域名,必须是 配置在 公众号里的 【JS接口安全域名】里。

2、关于本地调试:

1、hosts 代理 k12-code.com (js 接口安全域名)

2、nginx 变更

3、服务端 session 注入变更。

4、客户端 API 基址变更

5、微信开发者工具 - 公众号调试模式


微信分享定制

如果上述分享接入,和本地调试都没问题,其实微信分享定制,也就是利用规则的问题:
首先我们知道 微信分享实体化 需要调研JSSDK,且要传入4个参数:

  • title,
  • desc,
  • link,
  • imgUrl

既然参数都是动态化的,那么我们就可以抽象出来,首先建一个页面。

这里原本直接定制化即可,不过微信要求 跳转的链接 link,也必须是 JS接口安全域名 列表里的。
这里就需要转一下思路,我们可以跳转合法的JS域名,在页面内再做重定向。
link => 个人页面 -> (重定向)实际页面

这里唯一麻烦的就是 微信会对未转义的参数进行过滤,所以 link 参数,需要 encodeURIComponent 一下;

1、这里我直接贴二维码生成的代码:

// 生成二维码
async function genQRCode(data) {// 将标题 描述 封面 转成拼接参数let { href, origin } = window.location;// href = "https://admin.k12-code.com/setting/wx-share-custom"// origin = "https://admin.k12-code.com"// 这里我们通过 Link 定制化,全部访问 ?redirect=链接 内部逻辑进行跳转即可。const redirectLink = encodeURIComponent(`${origin}/?redirect=${link}`);const hash = `#link=${redirectLink}&title=${title}&desc=${desc}&imgUrl=${imgUrl}&mode=share`;const wholeUrl = href + hash;const qrcodeImage = await text2QRCode(wholeUrl);console.log(wholeUrl);createBasicModal({title: "微信扫描当前二维码",footer: null,children: (<div di-fl=""><img src={qrcodeImage} width="200" /><p co-da="" ml-10="">扫码后,通过右上角按钮进行转发 分享或转发即可。</p></div>),});
}

2、二维码链接地址如下:
https%3A%2F%2Fadmin.k12-code.com%2Fsetting%2Fwx-share-custom%23link%3Dhttps%3A%2F%2Fadmin.k12-code.com%3Fredirect%3Dhttp%3A%2F%2Fwww.baidu.com%26title%3D%E7%99%BE%E5%BA%A6%E4%B8%80%E4%B8%8B%26desc%E6%97%A0%26imgUrl%3Dhttps%3A%2F%2Fimg.com%2F111.png%26mode%3Dshare

这里我们#后面的参数就是4个微信分享参数,然后我们再 useEffect 中进行解析,并更新微信jssdk实体
注: link 包括了跳转页 以及 页内重定向参数。

useEffect(() => {const hashParams = parseHash();let { imgUrl, title, link, desc, mode } = hashParams;imgUrl = decodeURIComponent(imgUrl);title = decodeURIComponent(title);link = decodeURIComponent(link);desc = decodeURIComponent(desc);// 如果是移动端 处于分享状态if (mode === "share") {setShareMode(true);setLink(link);setDesc(desc);setTitle(title);setImgUrl(imgUrl);// 更新微信分享实体updateWXShareEntity({title,desc,link,imgUrl,});}
}, []);

3、上述useEffect 实际是用户扫码后,在微信客户端触发的,然后维信解析出的链接 就是 link 链接
https%3A%2F%2Fadmin.k12-code.com%3Fredirect%3Dhttp%3A%2F%2Fwww.baidu.com

注: 我们需要在 根文件进行 jssdk 初始化wx.config,不然 wx.ready 无法正常触发,也就没办法分享

然后点击右上角分享,就可以分享成功,生产微信卡片。

4、然后手机点击微信卡片后,就会跳转 link。

为了加快跳转,我们再 .html 内直接引入 script redirect.js 标签 并解析;

/*** @description /redirect 检测并跳转(目前用于微信分享定制的网页转发)*//*** 解析 search 参数*/
function parseSearch() {// 需兼容 hash模式const { href } = window.locationconst searchIndex = href.indexOf('?')let search = href.slice(searchIndex)if (!search.includes("?")) {return {};}search = search.slice(1);const map = {};const searchArr = search.split("&");searchArr.forEach((i, index) => {const [k, v] = i.split("=");map[k] = v;});return map;
}// 自执行检测并跳转
!function () {const { href } = window.location// 解析 redirectconst keyList = href.split('?redirect=')console.log({ ...window.location })if (keyList.length > 1) {const redirectUrl = decodeURIComponent(keyList.pop())window.location.href = redirectUrl}
}()

5、重定向跳转完成!

(第三方平台)开发相关,解除80端口占用,微信公众号分享jssdk实现,微信开放平台登录接口接入,2022微信分享接入本地调试,微信分享定制相关推荐

  1. 微信公众号,JS-SDK获取位置信息,并调起第三方地图App导航

    微信公众号关联网页获取位置信息,可以参照<微信公众平台技术文档>-> 微信JS-SDK说明文档,官方链接地址:https://mp.weixin.qq.com/wiki?t=reso ...

  2. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  3. 微信公众号,微信开发平台,openid问题

    小程序的openid和公众号的openid是否一致 早期的产品只用了公众号,没有注册开放平台(没有unionid).然后现在需要上线小程序,这种情况下,企业是同一个企业的,但是公众号的openid和小 ...

  4. 微信公众号开发实战 | 01:环境配置

    文章目录 前言 配置Node开发环境 安装Node.js 安装TypeScript 安装localtunnel 安装IDE 实现一个简单的自动回复功能 前言 在本系列的博客中我们将从零开始搭建一个基于 ...

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

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

  6. 微信公众号开发步骤(一)

    微信公众号主要有以下几个步骤 微信公众号的通讯机制 微信公众号简介 1.注册微信公众号 2.注册测试公众号 3.搭建微信本地调试环境 1)下载客户端natapp: 2)安装natapp: 4.微信公众 ...

  7. Python+Tornado开发微信公众号

    本教程针对的是已掌握Python语言基本用法并且掌握其任一Web框架的用户. 本教程使用的Python版本为3.5.0, Web框架为Tornado, IDE开发工具为PyCharm,整个开发过程是在 ...

  8. java开发微信公众号:微信公众号对接

    一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击"修改配置"按钮,填写服务器地址(URL).Tok ...

  9. python公众号教学_Python微信公众号后台开发教程

    本篇文章开启Python开发微信公众号后台 准备: 云服务平台:(我用的是京东云的) 公众号:自己注册一个就行 Git:代码管理平台 了解平台 进入公众号后台,查看开发相关项 基本配置(服务器配置等) ...

最新文章

  1. 采用Huffman编码进行数据压缩
  2. 使用vs2015开发linux:Ubuntu程序
  3. 迁移学习简介(tranfer learning)
  4. 快手基于RocketMQ的在线消息系统建设实践
  5. java 读取txt文件指定行_在Java中读取txt文件中的特定行
  6. (1)散列表(哈希表)的定义
  7. 求两个数之间的水仙花数.c语言,求水仙花数(C语言/Java)
  8. Linux上Oracle自动启停方案
  9. opencv 头文件 包含 include 的问题
  10. 面试官:说说什么是 Java 内存模型(JMM)?
  11. Python获取实时的时间
  12. 日志管理工具 journalctl用法
  13. c语言 获取硬盘序列号,获取硬盘序列号的C++代码
  14. 金碟财务软找不到服务器怎么办,金蝶财务软件KIS标准版客户端连接不上服务器解决办法.pdf...
  15. 企业微信第三方服务商应用开发及上架教程
  16. 商务网站建设与维护【16】
  17. 【巴马火麻茶】调节三高、治疗失眠、排毒减肥,轻松get长寿的秘密!
  18. 2022年博士招生 | 华南理工大学-鹏城实验室 联培博士 专项计划
  19. 文墨绘学:教育培训微信营销方案
  20. java重启tomcat

热门文章

  1. PL/SQL连接Oracle出现的ORA-01034的解决办法
  2. Error (10029): Constant driver at beep_control.v(56)解决.Can't resolve multiple constant drivers
  3. 男人的收入、女人的年龄
  4. Linux /etc下用户和用户组配置文件详解
  5. android实现桌面icon未读信息图标(类似与iPhone的badge)
  6. 报错 | Templates should only be responsible for mapping the state to the UI. Avoid placing tags with s
  7. 2022级浙大MEM上岸学长的复试经验分享——知己知彼百战不殆
  8. TFTP协议分析与实现
  9. 斐波那契算法详解(logn)
  10. 蓝星星新浪微博客户端的开发记录