feat: switch mini program recharge to virtual payment

This commit is contained in:
kdletters
2026-05-26 22:32:16 +08:00
parent b388b124da
commit f36b90ebdb
22 changed files with 959 additions and 137 deletions

View File

@@ -116,6 +116,7 @@ pub struct WechatIdentityProfile {
pub provider_union_id: Option<String>,
pub display_name: Option<String>,
pub avatar_url: Option<String>,
pub session_key: Option<String>,
}
/// 已绑定微信身份快照。
@@ -124,6 +125,7 @@ pub struct WechatIdentityRecord {
pub user_id: String,
pub provider_uid: String,
pub provider_union_id: Option<String>,
pub session_key: Option<String>,
}
/// 微信授权 state 快照。

View File

@@ -97,6 +97,7 @@ struct StoredWechatIdentity {
provider_union_id: Option<String>,
display_name: Option<String>,
avatar_url: Option<String>,
session_key: Option<String>,
}
#[derive(Clone, Debug)]
@@ -1292,6 +1293,7 @@ impl InMemoryAuthStore {
provider_union_id: normalize_optional_string(profile.provider_union_id),
display_name: normalize_optional_string(profile.display_name),
avatar_url,
session_key: normalize_optional_string(profile.session_key),
};
if let Some(provider_union_id) = identity.provider_union_id.clone() {
state
@@ -1361,6 +1363,7 @@ impl InMemoryAuthStore {
user_id: identity.user_id.clone(),
provider_uid: identity.provider_uid.clone(),
provider_union_id: identity.provider_union_id.clone(),
session_key: identity.session_key.clone(),
}))
}
@@ -1377,6 +1380,7 @@ impl InMemoryAuthStore {
let next_display_name = normalize_optional_string(profile.display_name);
let next_avatar_url = normalize_optional_string(profile.avatar_url);
let next_provider_union_id = normalize_optional_string(profile.provider_union_id);
let next_session_key = normalize_optional_string(profile.session_key);
let next_provider_uid =
normalize_required_string(&profile.provider_uid).unwrap_or_default();
{
@@ -1398,6 +1402,9 @@ impl InMemoryAuthStore {
identity.display_name = next_display_name.clone();
identity.avatar_url = next_avatar_url;
identity.provider_union_id = next_provider_union_id.clone();
if next_session_key.is_some() {
identity.session_key = next_session_key.clone();
}
state
.wechat_identity_by_provider_uid
.insert(next_provider_uid.clone(), identity);
@@ -3193,6 +3200,7 @@ mod tests {
provider_union_id: Some("wx-union-shared".to_string()),
display_name: Some("微信旅人甲".to_string()),
avatar_url: None,
session_key: None,
},
})
.await
@@ -3211,6 +3219,7 @@ mod tests {
provider_union_id: Some("wx-union-shared".to_string()),
display_name: Some("微信旅人乙".to_string()),
avatar_url: None,
session_key: None,
},
})
.await
@@ -3258,6 +3267,7 @@ mod tests {
provider_union_id: Some("wx-union-bind".to_string()),
display_name: Some("待绑定微信用户".to_string()),
avatar_url: None,
session_key: None,
},
})
.await
@@ -3303,6 +3313,7 @@ mod tests {
provider_union_id: Some("wx-union-bind".to_string()),
display_name: Some("已归并微信用户".to_string()),
avatar_url: None,
session_key: None,
},
})
.await