H5引入微信SDK

1、引入JS文件

perl 复制代码
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js

如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。

备注:支持使用 AMD/CMD 标准模块加载方法加载

2、通过微信接口获取accessToken

javascript 复制代码
const getAccessToken = () => {
  return new Promise((resolve, reject) => {
    $.ajax({
      url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的APPID&secret=你的APPSECRET',
      type: 'GET',
      success: function(res) {
        res.errcode === 0 ? resolve(res.access_token) : reject(res.errmsg);
      },
      error: function(err) {
        reject(err);
      }
    });
  });
}

3、通过accessToken获取 jsapi_ticket(临时凭证)

javascript 复制代码
const getJsApiTicket = (accessToken) => {
  return new Promise((resolve, reject) => {
    $.ajax({
      url: 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=' + accessToken,
      type: 'GET',
      success: function(res) {
        res.errcode === 0 ? resolve(res.ticket) : reject(res.errmsg);
      },
      error: function(err) {
        reject(err);
      }
    });
  });
}

4、生成签名

typescript 复制代码
const sha1 = (str) => {
  // 这里使用CryptoJS库来计算SHA1
  return CryptoJS.SHA1(str).toString();
}
 
const getSignature = (noncestr, timestamp, url) => {
  // 你的应用的appsecret
  const appSecret = '你的应用的appsecret';
  // 需要使用应用的appId、appSecret、时间戳、随机字符串进行加密
  const string = `jsapi_ticket=${jsapiTicket}&noncestr=${noncestr}&timestamp=${timestamp}&url=${url}`;
  return sha1(string);
}

5、配置 SDK

javascript 复制代码
// 获取token
const accessToken = await getAccessToken();
// 获取临时凭证
const jsapiTicket = await getJsApiTicket(accessToken);
// 生成随机字符串
const nonceStr = Math.random().toString(36).substr(2, 15);
// 生成时间戳,转为36进制并补足4位(毫秒)
const timestamp = new Date().getTime().toString(36) + '000';
// 获取当前页面的 URL,不包含 hash 部分
const url = window.location.href.split('#')[0];
// 生成 signature
const signature = getSignature(nonceStr, timestamp, url, jsapiTicket);
// 使用 signature 和其他参数配置 SDK
wx.config({
  appId: '你的APPID', // 必填,公众号的唯一标识
  timestamp: timestamp, // 必填,生成签名的时间戳
  nonceStr: nonceStr, // 必填,生成签名的随机串
  signature: signature, // 必填,签名,见附录1
  jsApiList: ['chooseImage', 'uploadImage', 'onMenuShareTimeline'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
注意:如果使用的是小程序云开发静态网站托管的域名的网页,可以免鉴权直接跳任意合法合规小程序,调用 wx.config 时 appId 需填入非个人主体的已认证小程序,不需计算签名,timestamp、nonceStr、signature 填入非空任意值即可
相关推荐
lpfasd1237 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse45610 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai10 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记11 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁11 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu11 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!12 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格12 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人12 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid12 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet