- 基础入门:了解微信网页开发的基本概念和环境。
- 网页授权:获取用户信息,实现个性化体验。
- JS-SDK:调用微信原生能力,如分享、拍照、定位等。
- 支付功能:集成微信支付。
- 小程序(区别于网页):简要介绍微信小程序的开发。
- 最佳实践与注意事项:避免踩坑,提升用户体验。
第一部分:基础入门
什么是微信网页开发?
微信网页开发主要指的是在微信内置浏览器(基于 iOS/Android 的 WebView 组件)中运行的网页应用,它不是指微信小程序,而是传统的 HTML5 网页。

为什么要在微信里做网页?
- 巨大的流量入口:微信拥有超过 12 亿的月活跃用户,是触达用户的最佳渠道。
- 社交传播:利用微信的分享、社交关系链,实现裂变式增长。
- 无缝体验:可以调用微信的底层能力(如登录、支付、分享),让网页应用拥有“原生应用”般的体验。
开发环境准备
- 一个代码编辑器:如 VS Code, Sublime Text, WebStorm 等。
- 一个本地服务器:由于微信浏览器对本地文件(
file://协议)有诸多限制,你需要一个本地服务器来运行你的项目,可以使用Live Server(VS Code 插件) 或http-server(Node.js 包)。 - 一个域名:所有需要在微信中使用的网页,都必须通过
https协议访问,并且需要将域名配置到微信公众平台。
第二部分:网页授权 - 获取用户信息
这是微信网页开发最核心、最常用的一步,当你需要获取用户的 OpenID(用户的唯一标识)或基本信息时,就必须使用网页授权。
授权流程概述
微信网页授权流程分为两种作用域(scope):
- snsapi_base:静默授权,只能获取用户的
OpenID,不会弹出授权页面,适用于不需要用户信息,只需要识别用户的场景。 - snsapi_userinfo:弹出授权页面,用户同意后,可以获取用户的
OpenID、昵称、性别、所在地等信息,适用于需要个性化展示的场景。
流程图:
用户访问网页 -> 微信服务器重定向到授权页面 -> 用户同意授权 -> 微信服务器重定向回你的网页,并携带 code -> 你的服务器用 code 换取 access_token -> 用 access_token 换取用户信息
(这是一个简化的流程图,实际更复杂)

实现步骤
配置公众号域名
- 登录 微信公众平台。
- 进入“设置” -> “公众号设置” -> “功能设置”。
- 在“网页授权域名”一栏,填写你的域名(
www.yourdomain.com)。注意: 这里不需要加https://,也不能加端口号,配置后需要等待微信审核。
构建授权链接
在你的网页中,你需要将用户引导到微信的授权地址。
// 假设你的回调地址是 https://www.yourdomain.com/callback.html
const redirectUri = encodeURIComponent('https://www.yourdomain.com/callback.html');
const appId = '你的公众号AppID';
const scope = 'snsapi_userinfo'; // 或者 'snsapi_base'
// 构造授权链接
const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=STATE#wechat_redirect`;
// 将用户重定向到该链接
window.location.href = authUrl;
参数说明:

appid:你的公众号 AppID。redirect_uri:授权成功后,微信会重定向到这个地址,必须进行 URL 编码。response_type:固定为code。scope:授权作用域,snsapi_base或snsapi_userinfo。state:可选参数,用于防止 CSRF 攻击,可以随机生成一个值。
处理回调,获取 Access Token
用户同意授权后,微信会重定向到你的 redirect_uri,并带上 code 和 state 参数。
https://www.yourdomain.com/callback.html?code=071Jxx000sDg5k31AAX00000000&state=123
你的后端服务器需要接收这个 code,并用它去请求微信的服务器,换取 access_token。
后端请求示例 (Node.js):
const axios = require('axios');
const code = '从URL中获取的code'; // e.g., req.query.code
const appId = '你的公众号AppID';
const appSecret = '你的公众号AppSecret';
const tokenUrl = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${appSecret}&code=${code}&grant_type=authorization_code`;
axios.get(tokenUrl)
.then(response => {
const data = response.data;
// data 包含 access_token, openid, scope 等信息
console.log('Access Token:', data.access_token);
console.log('OpenID:', data.openid);
// scope 是 snsapi_userinfo,可以用 access_token 获取用户信息
if (data.scope === 'snsapi_userinfo') {
const userInfoUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${data.access_token}&openid=${data.openid}`;
return axios.get(userInfoUrl);
}
})
.then(userInfoResponse => {
// 获取到用户信息
console.log('User Info:', userInfoResponse.data);
})
.catch(error => {
console.error('Error:', error);
});
至此,你就成功获取到了用户的 OpenID 和基本信息,可以用于后续的业务逻辑。
第三部分:JS-SDK - 调用微信原生能力
当你想在网页中实现“分享到朋友圈”、“使用微信内置的地图”、“拍照上传”等功能时,就需要使用微信 JS-SDK。
JS-SDK 使用步骤
引入 JS-SDK 文件
在 HTML 页面的 <head> 或 <body> 标签内引入 JS-SDK 脚本。
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
通过 config 接口注入权限验证配置
这一步是安全机制,确保你的网页有权限调用 JS-SDK 的功能。
-
后端生成签名:
- 你的后端服务器需要根据 当前页面的 URL、JS-SDK 的
timestamp(时间戳)、noncestr(随机字符串) 和jsapi_ticket来生成一个签名。 jsapi_ticket需要通过你的AppID和AppSecret获取,有缓存机制(建议 7200 秒刷新一次)。
- 你的后端服务器需要根据 当前页面的 URL、JS-SDK 的
-
前端调用
wx.config:- 后端将
appId,timestamp,noncestr,signature等参数返回给前端。 - 前端调用
wx.config方法进行配置。
- 后端将
后端生成签名逻辑(伪代码):
// 1. 获取 access_token
const accessToken = await getAccessToken(appId, appSecret);
// 2. 用 access_token 获取 jsapi_ticket
const jsapiTicket = await getJsapiTicket(accessToken);
// 3. 生成签名
const url = '当前页面的完整URL'; // e.g., https://www.yourdomain.com/current.html
const timestamp = Date.now();
const noncestr = '随机字符串';
// 对参数进行字典序排序
const params = `jsapi_ticket=${jsapiTicket}&noncestr=${noncestr}×tamp=${timestamp}&url=${url}`;
const signature = sha1(params); // 使用 SHA1 算法加密
// 将这些参数返回给前端
return { appId, timestamp, noncestr, signature };
前端调用 wx.config:
<script>
// 假设这些参数是从你的后端 API 获取的
const wxConfig = {
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '你的AppID',
timestamp: 123456789,
nonceStr: 'Wm3WZYTPz0wzccnW',
signature: 'bd821916a7c9c1e6e1b6b8c9c1e6e1b6',
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'chooseImage', 'uploadImage'] // 需要调用的JS接口列表
};
wx.config(wxConfig);
wx.ready(function(){
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后
console.log('JS-SDK 配置成功');
// 在这里调用各种JS API
shareToTimeline();
});
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误可以打开config的debug模式查看
console.error('JS-SDK 配置失败', res);
});
</script>
调用 JS API
在 wx.ready 回调函数中,调用你需要的 JS API,实现分享功能:
function shareToTimeline() {
wx.onMenuShareTimeline({ '这是分享到朋友圈的标题', // 分享标题
link: 'https://www.yourdomain.com/share.html', // 分享链接
imgUrl: 'https://www.yourdomain.com/logo.png', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
alert('分享成功!');
},
cancel: function () {
// 用户取消分享后执行的回调函数
alert('分享已取消');
}
});
}
常用 JS API 列表:
- 分享:
onMenuShareTimeline(朋友圈),onMenuShareAppMessage(好友) - 图像:
chooseImage(拍照或从相册选图),uploadImage(上传图片到微信服务器) - 地理位置:
getLocation(获取地理位置) - 扫一扫:
scanQRCode - 微信支付:
chooseWXPay(但更推荐使用微信支付H5接口)
第四部分:微信支付功能
网页中的支付分为两种方式:
- 微信 JS-SDK 支付:适用于在 JS-SDK 支持的页面内发起支付,调用
chooseWXPayAPI。 - 微信支付H5支付:更常用、更推荐,适用于所有微信浏览器环境,流程更清晰。
H5 支付流程:
- 用户在 H5 页面点击支付。
- 你的后端服务器 向微信支付服务器发起请求,统一下单。
- 微信支付服务器 返回一个
prepay_id。 - 你的后端服务器 用
prepay_id和其他参数(appId,timestamp,noncestr,package,signType)再次生成一个签名。 - 后端将这个签名和参数返回给前端。
- 前端 调用
location.href = 支付URL的方式,拉起微信支付收银台。
前端关键代码:
// 假设后端返回了支付所需参数
const paymentParams = {
appId: 'yourAppId',
timeStamp: '1234567890',
nonceStr: '5K8264ILTKCH16CQ2502SI8ZNMTM67VS',
package: 'prepay_id=wx202510272009395522657a690389285100',
signType: 'MD5',
paySign: '38000E2D8D5A1A38C6527B8457F699E4'
};
// 拉起支付
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId" : paymentParams.appId,
"timeStamp" : paymentParams.timeStamp,
"nonceStr" : paymentParams.nonceStr,
"package" : paymentParams.package,
"signType" : paymentParams.signType,
"paySign" : paymentParams.paySign
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 支付成功
alert('支付成功!');
} else if (res.err_msg == "get_brand_wcpay_request:cancel"){
// 支付取消
alert('支付已取消');
} else {
// 支付失败
alert('支付失败:' + res.err_msg);
}
}
);
}
// 判断当前客户端版本是否支持bridge
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
} else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
} else{
onBridgeReady();
}
第五部分:小程序(区别于网页)
很多人会把“微信网页”和“微信小程序”混淆,它们是两个完全不同的东西。
| 特性 | 微信网页 (H5) | 微信小程序 |
|---|---|---|
| 本质 | 运行在 WebView 里的网页 | 一套独立于 H5 的开发框架和运行环境 |
| 开发语言 | HTML, CSS, JavaScript | WXML (类似HTML), WXSS (类似CSS), JavaScript |
| 获取方式 | 通过公众号、聊天分享等链接打开 | 在微信内搜索、扫码、或他人分享打开 |
| 性能 | 依赖网络,加载较慢,性能较差 | 预加载,启动快,体验接近原生App |
| 能力 | 通过 JS-SDK 调用部分微信能力 | 可以调用更丰富的微信原生API |
| 入口 | 没有固定入口,依赖链接 | 有自己的“桌面”,可被搜索和收藏 |
如果你需要开发一个功能复杂、体验要求高的应用,或者需要离线能力,请选择小程序。 如果你的活动页面、营销推广、内容展示等,对性能要求不高,且需要快速开发和传播,可以选择微信网页。
小程序开发有独立的文档和工具,请参考 微信小程序官方文档。
第六部分:最佳实践与注意事项
- 必须使用 HTTPS:所有微信网页接口(授权、JS-SDK、支付)都要求
https协议,请务必为你的域名配置 SSL 证书。 - 域名配置:所有需要调用的接口域名,都必须在公众号后台“设置” -> “公众号设置” -> “功能设置”中配置好。
- User-Agent:微信浏览器的 User-Agent 包含
MicroMessenger字段,你可以通过 JavaScript 来判断是否在微信环境中。function isWeChatBrowser() { return /MicroMessenger/i.test(navigator.userAgent); } - 分享卡片优化:分享出去的卡片,会自动抓取页面的
<title>和<meta name="description">作为标题和摘要,请务必设置好这两个标签。<meta name="description" content="你的网页描述,用于分享摘要"> - 性能优化:微信网络环境复杂,注意图片压缩、代码压缩、使用 CDN 加速,减少页面加载时间。
- JS-SDK 签名问题:99% 的 JS-SDK 调用失败都是签名问题,请务必检查:
jsapi_ticket是否有效且未过期。url参数是否是完整且不含井号#的当前页面地址。- 所有参数是否参与了签名,且排序正确。
总结与学习资源
- 核心流程:域名配置 -> 网页授权 (获取 OpenID) -> JS-SDK (调用能力) -> H5支付 (完成交易)。
- 官方文档是最好的老师:
这份教程为你构建了一个完整的知识框架,真正的掌握还需要大量的实践,从一个简单的“获取用户 OpenID”开始,逐步尝试 JS-SDK 的各种功能,你很快就能成为一名熟练的微信开发者,祝你成功!
