小程序短链接必须通过微信官方接口生成,PHP无法自行生成合法短链;需调用https://api.weixin.qq.com/wxa/generateshortlink,传入有效access_token、真实已发布page路径等参数,返回short_link供分享。

小程序短链接必须用微信官方接口生成
PHP 无法自行生成合法的小程序短链接,所有 wx.shortlink.generate 类型的短链必须调用微信开放平台提供的 HTTPS 接口,且需使用有效的 access_token(公众号或第三方平台令牌)。自行拼接或用通用短链服务(如 t.cn、dwz.cn)生成的链接,在微信内无法跳转到小程序,会直接被拦截或降权。
调用 wx.shortlink.generate 的关键参数和 PHP 实现
接口地址为 https://api.weixin.qq.com/wxa/generateshortlink,POST JSON 数据,需注意以下几点:
-
access_token必须是公众号或小程序绑定的第三方平台获取的,普通 token 不可用 -
page字段必须是已发布的小程序中真实存在的路径,带完整 query 参数(如pages/index/index?scene=123),不支持未上线版本路径 -
is_persistent设为true表示永久有效,false则 30 天过期(默认) - 返回字段含
short_link(可直接分享)和expire_time(仅当is_persistent=false时存在)
简单 PHP 示例(使用 cURL):
$data = [
'page' => 'pages/detail/detail?id=456',
'is_persistent' => true
];
$json = json_encode($data);
$token = 'YOUR_ACCESS_TOKEN'; // 来自 getAccessToken() 逻辑
$url = "https://api.weixin.qq.com/wxa/generateshortlink?access_token={$token}";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result, true);
if (isset($response['short_link'])) {
echo $response['short_link']; // 如:https://wxsurl.cn/abc123
}
常见报错及对应原因
调用失败时,微信返回的 errcode 很关键,典型错误有:
立即学习“PHP免费学习笔记(深入)”;
-
errcode: 40001:access_token无效或过期,需检查刷新逻辑和存储时效 -
errcode: 47001:JSON 格式错误,常见于 PHPjson_encode含中文未加JSON_UNESCAPED_UNICODE -
errcode: 85079:page路径不存在或未在小程序后台「开发管理 > 开发版本」中配置业务域名(但短链本身不校验域名) -
errcode: 85080:该小程序未开通“短链接”能力,需在【小程序后台 > 开发管理 > 接口能力】中确认已开通
短链生成后不能直接用于扫码,需配合场景码
生成的 short_link 是纯跳转链接,若要通过微信扫码打开,必须将它嵌入微信官方的「小程序码」或「二维码」中(即调用 wxa.getwxacodeunlimit 等接口,把短链作为 scene 参数传入)。直接把短链截图给别人扫码,微信会识别为普通 URL,无法触发小程序启动。
另外,短链本身不携带用户身份信息,如需关联 openid 或 unionid,必须在原始 page 路径的 query 中透传参数,并由小程序端自行处理。











