微信小程序登录服务使用文档
概述
WechatMiniProgramFacade 是微信小程序登录服务的静态门面类,提供了通过code获取用户openid和session_key的功能。使用静态代理模式调用,简单便捷。
配置参数
1. $params - 登录参数
$params = [
'code' => '小程序登录code',
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
];
2. $config - 配置参数
$config = [
'appsecret' => 'your_appsecret',
];
使用示例
基本用法 - 获取用户信息
use YouHuJun\Tool\App\Facades\V1\Wechat\MiniProgram\WechatMiniProgramFacade;
$params = [
'code' => '0e3q2k0004L9O90g0000000000',
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
];
$config = [
'appsecret' => 'YOUR_WECHAT_MINI_PROGRAM_SECRET',
];
$result = WechatMiniProgramFacade::getOpenIdByCode($params, $config);
$openid = $result['response']['openid'];
$sessionKey = $result['response']['session_key'];
echo "用户OpenID: " . $openid . "\n";
echo "Session Key: " . $sessionKey . "\n";
使用集合对象格式返回
use YouHuJun\Tool\App\Facades\V1\Wechat\MiniProgram\WechatMiniProgramFacade;
$params = [
'code' => '0e3q2k0004L9O90g0000000000',
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
];
$config = [
'appsecret' => 'YOUR_WECHAT_MINI_PROGRAM_SECRET',
];
$result = WechatMiniProgramFacade::getOpenIdByCodeWithCollection($params, $config);
echo "OpenID: " . $result->response->openid . "\n";
echo "AppID: " . $result->appid . "\n";
完整的登录流程
use YouHuJun\Tool\App\Facades\V1\Wechat\MiniProgram\WechatMiniProgramFacade;
use YouHuJun\Tool\App\Exceptions\CommonException;
$code = $_POST['code'] ?? '';
try {
$result = WechatMiniProgramFacade::getOpenIdByCode([
'code' => $code,
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
], [
'appsecret' => 'YOUR_WECHAT_MINI_PROGRAM_SECRET',
]);
$openid = $result['response']['openid'];
$sessionKey = $result['response']['session_key'];
$unionid = $result['response']['unionid'] ?? null;
echo json_encode([
'code' => 0,
'message' => '登录成功',
'data' => [
'openid' => $openid,
'token' => 'generated_token_here',
],
]);
} catch (CommonException $e) {
echo json_encode([
'code' => $e->getCode(),
'message' => $e->getMessage(),
]);
}
使用匿名code
$config = [
'appsecret' => 'your_appsecret_here',
];
$params = [
'anonymousCode' => 'anonymous_code_here',
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
];
$result = WechatMiniProgramFacade::getOpenIdByCode($params, $config);
返回值
getOpenIdByCode() 返回数组格式:
[
'response' => [
'openid' => 'ok-X068nPIY-emwpdlYAmoaef2h8',
'session_key' => 'CJsCJOkD3mFX8weh1ijyBQ==',
'unionid' => 'o7hrD6aYhmgFFy_qb238EOfKCS8I',
],
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
]
getOpenIdByCodeWithCollection() 返回对象格式:
(object)[
'response' => (object)[
'openid' => 'ok-X068nPIY-emwpdlYAmoaef2h8',
'session_key' => 'CJsCJOkD3mFX8weh1ijyBQ==',
'unionid' => 'o7hrD6aYhmgFFy_qb238EOfKCS8I',
],
'appid' => 'YOUR_WECHAT_MINI_PROGRAM_APPID',
]
错误处理
服务会抛出 CommonException,包含以下错误码:
| 错误码 |
Code |
说明 |
| ParamsIsNullError |
10020 |
参数为空(缺少code或anonymousCode) |
| AppidIsNullError |
10020 |
AppId为空 |
| WechatMiniProgramSecretRequired |
52000 |
微信小程序AppSecret未设置 |
| WechatMiniProgramLoginError |
52010 |
微信小程序登录失败(微信接口返回错误) |
错误处理示例
use YouHuJun\Tool\App\Exceptions\CommonException;
use YouHuJun\Tool\App\Facades\V1\Wechat\MiniProgram\WechatMiniProgramFacade;
try {
$result = WechatMiniProgramFacade::getOpenIdByCode($params, $config);
echo "登录成功,OpenID: " . $result['response']['openid'];
} catch (CommonException $e) {
echo '错误码: ' . $e->getCode() . PHP_EOL;
echo '错误信息: ' . $e->getMessage() . PHP_EOL;
}
注意事项
- code有效期: 微信小程序的code有效期只有5分钟,且只能使用一次
- session_key安全: session_key是敏感信息,不应存储或传递给前端,仅用于服务端解密数据
- unionid获取: 只有用户在小程序和公众号/开放平台都绑定过才能获取到unionid
- AppSecret安全: AppSecret不应暴露在前端,只应在服务端使用
- 静态调用: 使用
WechatMiniProgramFacade::getOpenIdByCode() 静态方法调用,无需实例化
- 接口限制: 微信接口有调用频率限制,请合理使用
- 匿名code: code和anonymousCode必须提供其中一个
微信接口说明
请求URL
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
请求参数
| 参数 |
必填 |
说明 |
| appid |
是 |
小程序AppId |
| secret |
是 |
小程序AppSecret |
| js_code |
是 |
登录时获取的code |
| grant_type |
是 |
填写authorization_code |
返回参数
| 参数 |
说明 |
| openid |
用户唯一标识 |
| session_key |
会话密钥 |
| unionid |
用户在开放平台的唯一标识符(满足一定条件才返回) |
| errcode |
错误码 |
| errmsg |
错误信息 |
相关链接