feat(commission): 支持计奖商品参与设置、独立分成与多规格规则,完善团队中心与微信快捷登录
这个提交包含在:
@@ -34,10 +34,16 @@ class MiniProgram
|
||||
error_stop('登陆态已过期, 请重试', -1);
|
||||
}
|
||||
|
||||
// 如果前端传了手机号凭证(新版 code 或传统 iv+encryptedData),解析手机号
|
||||
$mobile = '';
|
||||
if (!empty($this->payload['code']) || (!empty($this->payload['iv']) && !empty($this->payload['encryptedData']))) {
|
||||
$mobile = $this->getUserPhoneNumber();
|
||||
}
|
||||
|
||||
$wechatUser = [
|
||||
'openid' => $sessionData['openid'],
|
||||
'unionid' => $sessionData['unionid'] ?? '',
|
||||
'mobile' => '',
|
||||
'mobile' => $mobile,
|
||||
'avatar' => '',
|
||||
'nickname' => '',
|
||||
];
|
||||
@@ -65,9 +71,32 @@ class MiniProgram
|
||||
return $wechatUser;
|
||||
}
|
||||
|
||||
// 解密微信小程序手机号
|
||||
// 解密微信小程序手机号(支持新版 code 与传统 iv + encryptedData)
|
||||
public function getUserPhoneNumber()
|
||||
{
|
||||
// 1. 优先使用新版微信小程序通过 code 获取手机号 API
|
||||
if (!empty($this->payload['code'])) {
|
||||
try {
|
||||
$response = $this->wechat->auth->httpPostJson('wxa/business/getuserphonenumber', [
|
||||
'code' => $this->payload['code']
|
||||
]);
|
||||
if (isset($response['errcode']) && (int)$response['errcode'] === 0 && !empty($response['phone_info']['purePhoneNumber'])) {
|
||||
if (!empty($response['phone_info']['countryCode']) && $response['phone_info']['countryCode'] !== '86') {
|
||||
error_stop('仅支持大陆地区手机号');
|
||||
}
|
||||
return $response['phone_info']['purePhoneNumber'];
|
||||
}
|
||||
if (!empty($response['errmsg']) && empty($this->payload['encryptedData'])) {
|
||||
error_stop('获取手机号失败: ' . $response['errmsg']);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
if (empty($this->payload['encryptedData'])) {
|
||||
error_stop('获取手机号异常: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 兼容传统 iv + encryptedData 模式
|
||||
if (empty($this->payload['sessionId'])) {
|
||||
error_stop('未获取到登陆态, 请重试', -1);
|
||||
}
|
||||
@@ -78,6 +107,10 @@ class MiniProgram
|
||||
error_stop('登陆态已过期, 请重试', -1);
|
||||
}
|
||||
|
||||
if (empty($this->payload['iv']) || empty($this->payload['encryptedData'])) {
|
||||
error_stop('缺少手机号授权凭证');
|
||||
}
|
||||
|
||||
$phoneInfo = $this->wechat->encryptor->decryptData($sessionData['session_key'], $this->payload['iv'], $this->payload['encryptedData']);
|
||||
|
||||
if (empty($phoneInfo['purePhoneNumber'])) {
|
||||
|
||||
在新工单中引用
屏蔽一个用户