在微信公众号场景中处理欧盟用户的地理位置数据,不能简单依靠自动上报接口完成合规。GDPR把能够直接或间接识别自然人的位置记录列为个人数据,哪怕只是城市级别的粗略定位,只要与 openid 关联就受条例约束。运营者必须在收集前以清晰语言告知用户,并且取得自由给予、具体、知情且明确的同意。这意味着后台悄悄调用微信 JS-SDK 的获取位置接口,或者把授权埋在长达数千字的用户协议里,都无法满足执法要求。

GDPR对位置信息声明的核心要件
声明文本首先要写清收集位置信息的具体目的,例如「为了向您推荐附近线下门店优惠」比「提升服务体验」更合格。模糊表述会被监管机构认定为告知不充分。同时需要区分精确位置与粗略位置,因为二者风险等级不同,用户应知道自身被采集的是哪一类数据。
处理的法律依据必须显式列出。对位置信息而言,绝大多数公众号只能依赖「用户同意」这一条,而不能套用「合法利益」。因此声明中要提供独立的同意区块,不能把位置授权与账号注册捆绑为单一按钮。保存期限也需明确,例如「位置缓存最长保留三十天,到期自动删除」,不可写「保留至业务必要期限」这类开放式表述。
撤回同意的机制要在声明中直接给出入口,比如「在公众号回复退订位置即可关闭」。GDPR规定撤回应与给予同意同样容易,如果当初是弹窗点击,撤回却要发邮件等三天,就构成违规。此外若数据会传回中国服务器,必须说明跨境传输及接收方身份,这是很多出海公众号容易遗漏的点。
微信公众号前端授权代码与声明联动
技术实现上,应先展示自定义声明浮层,用户点击确认后再调用微信接口。下方示例演示了如何在网页中先做声明再请求位置,避免静默收集。注意微信 JS-SDK 需要提前配置权限,这里省略签名部分,只保留授权逻辑。
// 展示GDPR位置收集声明浮层
function showLocationNotice() {
var notice = document.createElement('div');
notice.innerHTML = '<p>我们需要获取您的位置以推荐附近门店,数据仅保留30天。</p>' +
'<button id="agreeBtn">同意并获取位置</button>' +
'<button id="refuseBtn">不同意</button>';
document.body.appendChild(notice);
document.getElementById('agreeBtn').onclick = function() {
wx.getLocation({
type: 'gcj02',
success: function(res) {
// 此处上传经纬度到后端,并打上同意时间戳
uploadLocation(res.latitude, res.longitude);
}
});
document.body.removeChild(notice);
};
document.getElementById('refuseBtn').onclick = function() {
document.body.removeChild(notice);
};
}
function uploadLocation(lat, lng) {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://ipipp.com/api/location');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify({ lat: lat, lng: lng, agreed: true, time: Date.now() }));
}
上述代码把声明与接口调用严格绑定,未点击同意前不触发 wx.getLocation。相比默认开启位置权限再弹窗告知的做法,这种顺序能证明同意先于处理,更符合 GDPR 的举证责任分配。后端收到数据时应同时存储同意记录,方便后续审计。
另一个常见错误是在微信小程序或公众号网页里使用 getLocation 的 fail 回调悄悄降级到 IP 定位。GDPR 下粗略位置同样算个人数据,如果声明只讲了 GPS 而未提 IP 定位,该降级路径就超出告知范围。建议声明补充「若拒绝精确位置,我们将使用网络 IP 推算城市级位置」,并把对应开关交给用户。
声明文档结构与违规风险对比
一份完整的公众号位置声明建议采用分层结构:首屏用自然语言讲目的与期限,详情页放法律依据与跨境说明。下表对比两种常见方案在监管视角下的差异。
| 方案 | 告知方式 | 同意形式 | 典型风险 |
|---|---|---|---|
| 默认开启+长协议 | 折叠在用户协议第8章 | 注册即视为同意 | 被认为无有效同意,罚款可达全球营业额4% |
| 前置弹窗+独立撤回 | 浮层直述目的与期限 | 按钮明确确认 | 风险低,需维护撤回接口 |
从架构思考角度看,公众号运营者常把合规当成法务文档工作,实际上技术流程才是证据源头。当监管机构索要同意证明时,后端留存的「agreed: true 加时间戳」比前台截图更有力。因此声明文案、前端交互与后端日志三者必须一致,任何一侧缺失都会让整体合规出现裂缝。
最后要注意,微信公众号的主体若在中国而用户含欧盟居民,需指定欧盟代表并在声明中公开联系方式。不少团队忽略该义务,仅在隐私政策写公司地址。正确做法是单独段落写明「我们在欧盟的代理为 XXX,邮箱 gdpr@ipipp.com」,并确保该邮箱可接收撤回请求。只有把声明、代码与组织安排串起来,位置信息收集才真正站得住脚。