feat: 集成隐私小号功能保护用户手机号
新增隐私小号服务类,在订单创建时自动绑定隐私手机号,收货时自动解绑 在快递发货和收货流程中使用隐私小号替代真实手机号,保护用户隐私 添加数据库字段存储绑定关系,提供系统配置开关和测试脚本
This commit is contained in:
@@ -21,6 +21,7 @@ use app\services\agent\AgentLevelServices;
|
||||
use app\services\activity\coupon\StoreCouponUserServices;
|
||||
use app\services\agent\DivisionServices;
|
||||
use app\services\other\CityAreaServices;
|
||||
use app\services\other\PrivacyPhoneServices;
|
||||
use app\services\pay\PayServices;
|
||||
use app\services\product\brand\StoreBrandServices;
|
||||
use app\services\product\category\StoreProductCategoryServices;
|
||||
@@ -196,12 +197,33 @@ class StoreOrderCreateServices extends BaseServices
|
||||
$userAddress = $addressInfo['province'] . ' ' . $addressInfo['city'] . ' ' . $addressInfo['district'] . ' ' . $addressInfo['street'] . ' ' . $addressInfo['detail'];
|
||||
$userLocation = $addressInfo['longitude'] . ' ' . $addressInfo['latitude'];
|
||||
$type = $is_channel == 1 ? 20 : $type;
|
||||
|
||||
$realPhone = $addressInfo['phone'];
|
||||
$orderUserPhone = $realPhone;
|
||||
$bindId = '';
|
||||
$privatePhoneStatus = 0;
|
||||
|
||||
/** @var PrivacyPhoneServices $privacyPhoneServices */
|
||||
$privacyPhoneServices = app()->make(PrivacyPhoneServices::class);
|
||||
if ($privacyPhoneServices->isEnabled() && $realPhone) {
|
||||
try {
|
||||
$privateData = $privacyPhoneServices->bindForOrder($realPhone);
|
||||
if ($privateData['user_phone']) {
|
||||
$orderUserPhone = $privateData['user_phone'];
|
||||
$bindId = $privateData['bind_id'];
|
||||
$privatePhoneStatus = $privateData['status'];
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
Log::error('隐私小号绑定失败', ['error' => $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
|
||||
$orderInfo = [
|
||||
'uid' => $uid,
|
||||
'type' => $type,
|
||||
'order_id' => $this->getNewOrderId(),
|
||||
'real_name' => $addressInfo['real_name'],
|
||||
'user_phone' => $addressInfo['phone'],
|
||||
'user_phone' => $orderUserPhone,
|
||||
'user_address' => $userAddress,
|
||||
'user_location' => $userLocation,
|
||||
'cart_id' => $cartIds,
|
||||
@@ -247,6 +269,8 @@ class StoreOrderCreateServices extends BaseServices
|
||||
'send_gift_price' => $priceData['sendGiftPrice'],
|
||||
'send_gift_mark' => $sendGiftMark,
|
||||
'channel' => $is_channel,
|
||||
'private_bind_id' => $bindId,
|
||||
'private_phone_status' => $privatePhoneStatus,
|
||||
];
|
||||
if ($userInfo['user_type'] == 'wechat' || $userInfo['user_type'] == 'routine') {
|
||||
/** @var WechatUserServices $wechatServices */
|
||||
@@ -264,7 +288,7 @@ class StoreOrderCreateServices extends BaseServices
|
||||
}
|
||||
|
||||
$priceData['coupon_id'] = $couponId;
|
||||
$order = $this->transaction(function () use ($cartIds, $couponId, $orderInfo, $cartInfo, $key, $userInfo, $useIntegral, $priceData, $type, $activity_id, $uid, $addressId, $promotions_give) {
|
||||
$order = $this->transaction(function () use ($cartIds, $couponId, $orderInfo, $cartInfo, $key, $userInfo, $useIntegral, $priceData, $type, $activity_id, $uid, $addressId, $promotions_give, $realPhone) {
|
||||
//创建订单
|
||||
$order = $this->dao->save($orderInfo);
|
||||
if ($couponId) {
|
||||
|
||||
@@ -294,7 +294,7 @@ class StoreOrderDeliveryServices extends BaseServices
|
||||
}
|
||||
$expData['com'] = $data['delivery_code'];
|
||||
$expData['to_name'] = $orderInfo['real_name'];
|
||||
$expData['to_tel'] = $orderInfo['user_phone'];
|
||||
$expData['to_tel'] = $orderInfo['private_phone'] ?: $orderInfo['user_phone'];
|
||||
$expData['to_addr'] = $orderInfo['user_address'];
|
||||
$expData['from_name'] = $data['to_name'];
|
||||
$expData['from_tel'] = $data['to_tel'];
|
||||
@@ -346,7 +346,7 @@ class StoreOrderDeliveryServices extends BaseServices
|
||||
$expressService = app()->make(ServeServices::class);
|
||||
$expData['kuaidicom'] = $data['delivery_code'];
|
||||
$expData['man_name'] = $orderInfo->real_name;
|
||||
$expData['phone'] = $orderInfo->user_phone;
|
||||
$expData['phone'] = $orderInfo->private_phone ?: $orderInfo->user_phone;
|
||||
$expData['address'] = $orderInfo->user_address;
|
||||
$expData['send_real_name'] = $data['to_name'];
|
||||
$expData['send_phone'] = $data['to_tel'];
|
||||
@@ -626,7 +626,7 @@ class StoreOrderDeliveryServices extends BaseServices
|
||||
$expressService = app()->make(ServeServices::class);
|
||||
$expData['com'] = $dumpInfo['com'];
|
||||
$expData['to_name'] = $orderInfo->real_name;
|
||||
$expData['to_tel'] = $orderInfo->user_phone;
|
||||
$expData['to_tel'] = $orderInfo->private_phone ?: $orderInfo->user_phone;
|
||||
$expData['to_addr'] = $orderInfo->user_address;
|
||||
$expData['from_name'] = $dumpInfo['from_name'];
|
||||
$expData['from_tel'] = $dumpInfo['from_tel'];
|
||||
|
||||
@@ -25,6 +25,7 @@ use app\services\user\member\MemberCardServices;
|
||||
use app\services\user\UserBillServices;
|
||||
use app\services\user\UserBrokerageServices;
|
||||
use app\services\user\UserServices;
|
||||
use app\services\other\PrivacyPhoneServices;
|
||||
use think\annotation\Inject;
|
||||
use think\exception\ValidateException;
|
||||
use think\facade\Log;
|
||||
@@ -148,6 +149,17 @@ class StoreOrderTakeServices extends BaseServices
|
||||
if (!($res1 && $res2 && $res3)) {
|
||||
throw new ValidateException('收货失败!');
|
||||
}
|
||||
// 解绑隐私手机号 (AX模式)
|
||||
// user_phone存储隐私号, private_bind_id存储真实手机号
|
||||
if ($order['private_bind_id'] && $order['private_phone_status'] == 1) {
|
||||
/** @var PrivacyPhoneServices $privacyPhoneServices */
|
||||
$privacyPhoneServices = app()->make(PrivacyPhoneServices::class);
|
||||
$unbindResult = $privacyPhoneServices->unbindForOrder($order['user_phone'], $order['private_bind_id']);
|
||||
if ($unbindResult) {
|
||||
$order->private_phone_status = 0;
|
||||
$order->save();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}, $isTran);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user