Bug: [FEATURE] feat(router): verify service for applepay merchant registration v2



### Feature Description

verify service for applepay merchant registration in v2

### Possible Implementation

Add POST /v2/verify/apple-pay/{merchant_id} endpoint for verify domains with Apple

### Have you spent some time checking if this feature request has been raised before?

- [x] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [x] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes, I am willing to submit a PR!
diff --git a/crates/router/src/core/verification.rs b/crates/router/src/core/verification.rs
index 3c1b95dd982..f7ed33be642 100644
--- a/crates/router/src/core/verification.rs
+++ b/crates/router/src/core/verification.rs
@@ -117,11 +117,16 @@ pub async fn get_verified_apple_domains_with_mid_mca_id(
         .unwrap_or_default();
 
     #[cfg(feature = "v2")]
-    let verified_domains = {
-        let _ = merchant_connector_id;
-        let _ = key_store;
-        todo!()
-    };
+    let verified_domains = db
+        .find_merchant_connector_account_by_id(
+            key_manager_state,
+            &merchant_connector_id,
+            &key_store,
+        )
+        .await
+        .change_context(errors::ApiErrorResponse::ResourceIdNotFound)?
+        .applepay_verified_domains
+        .unwrap_or_default();
 
     Ok(services::api::ApplicationResponse::Json(
         verifications::ApplepayVerifiedDomainsResponse { verified_domains },
diff --git a/crates/router/src/core/verification/utils.rs b/crates/router/src/core/verification/utils.rs
index 81b916206af..fb38d0a619a 100644
--- a/crates/router/src/core/verification/utils.rs
+++ b/crates/router/src/core/verification/utils.rs
@@ -43,12 +43,15 @@ pub async fn check_existence_and_add_domain_to_db(
         .change_context(errors::ApiErrorResponse::InternalServerError)?;
 
     #[cfg(feature = "v2")]
-    let merchant_connector_account: hyperswitch_domain_models::merchant_connector_account::MerchantConnectorAccount = {
-        let _ = merchant_connector_id;
-        let _ = key_store;
-        let _ = domain_from_req;
-        todo!()
-    };
+    let merchant_connector_account = state
+        .store
+        .find_merchant_connector_account_by_id(
+            key_manager_state,
+            &merchant_connector_id,
+            &key_store,
+        )
+        .await
+        .change_context(errors::ApiErrorResponse::InternalServerError)?;
     utils::validate_profile_id_from_auth_layer(
         profile_id_from_auth_layer,
         &merchant_connector_account,
diff --git a/crates/router/src/lib.rs b/crates/router/src/lib.rs
index 828986aeeee..48e9845c06b 100644
--- a/crates/router/src/lib.rs
+++ b/crates/router/src/lib.rs
@@ -198,6 +198,11 @@ pub fn mk_app(
             .service(routes::Routing::server(state.clone()))
             .service(routes::Chat::server(state.clone()));
 
+        #[cfg(all(feature = "olap", any(feature = "v1", feature = "v2")))]
+        {
+            server_app = server_app.service(routes::Verify::server(state.clone()));
+        }
+
         #[cfg(feature = "v1")]
         {
             server_app = server_app
@@ -208,7 +213,6 @@ pub fn mk_app(
                 .service(routes::ApplePayCertificatesMigration::server(state.clone()))
                 .service(routes::PaymentLink::server(state.clone()))
                 .service(routes::ConnectorOnboarding::server(state.clone()))
-                .service(routes::Verify::server(state.clone()))
                 .service(routes::Analytics::server(state.clone()))
                 .service(routes::WebhookEvents::server(state.clone()))
                 .service(routes::FeatureMatrix::server(state.clone()));
diff --git a/crates/router/src/routes/app.rs b/crates/router/src/routes/app.rs
index 01455e9e17b..5b0471537c8 100644
--- a/crates/router/src/routes/app.rs
+++ b/crates/router/src/routes/app.rs
@@ -56,7 +56,7 @@ use super::refunds;
 use super::routing;
 #[cfg(all(feature = "oltp", feature = "v2"))]
 use super::tokenization as tokenization_routes;
-#[cfg(all(feature = "olap", feature = "v1"))]
+#[cfg(all(feature = "olap", any(feature = "v1", feature = "v2")))]
 use super::verification::{apple_pay_merchant_registration, retrieve_apple_pay_verified_domains};
 #[cfg(feature = "oltp")]
 use super::webhooks::*;
@@ -2325,7 +2325,6 @@ impl ThreeDsDecisionRule {
 
 #[cfg(feature = "olap")]
 pub struct Verify;
-
 #[cfg(all(feature = "olap", feature = "v1"))]
 impl Verify {
     pub fn server(state: AppState) -> Scope {
@@ -2342,6 +2341,22 @@ impl Verify {
     }
 }
 
+#[cfg(all(feature = "olap", feature = "v2"))]
+impl Verify {
+    pub fn server(state: AppState) -> Scope {
+        web::scope("/v2/verify")
+            .app_data(web::Data::new(state))
+            .service(
+                web::resource("/apple-pay/{merchant_id}")
+                    .route(web::post().to(apple_pay_merchant_registration)),
+            )
+            .service(
+                web::resource("/applepay-verified-domains")
+                    .route(web::get().to(retrieve_apple_pay_verified_domains)),
+            )
+    }
+}
+
 pub struct UserDeprecated;
 
 #[cfg(all(feature = "olap", feature = "v2"))]
diff --git a/crates/router/src/routes/verification.rs b/crates/router/src/routes/verification.rs
index ed987fb76ad..71b3c12dd75 100644
--- a/crates/router/src/routes/verification.rs
+++ b/crates/router/src/routes/verification.rs
@@ -46,6 +46,44 @@ pub async fn apple_pay_merchant_registration(
     .await
 }
 
+#[cfg(all(feature = "olap", feature = "v2"))]
+#[instrument(skip_all, fields(flow = ?Flow::Verification))]
+pub async fn apple_pay_merchant_registration(
+    state: web::Data<AppState>,
+    req: HttpRequest,
+    json_payload: web::Json<verifications::ApplepayMerchantVerificationRequest>,
+    path: web::Path<common_utils::id_type::MerchantId>,
+) -> impl Responder {
+    let flow = Flow::Verification;
+    let merchant_id = path.into_inner();
+    Box::pin(api::server_wrap(
+        flow,
+        state,
+        &req,
+        json_payload.into_inner(),
+        |state, auth: auth::AuthenticationData, body, _| {
+            verification::verify_merchant_creds_for_applepay(
+                state.clone(),
+                body,
+                merchant_id.clone(),
+                Some(auth.profile.get_id().clone()),
+            )
+        },
+        auth::auth_type(
+            &auth::V2ApiKeyAuth {
+                is_connected_allowed: false,
+                is_platform_allowed: false,
+            },
+            &auth::JWTAuth {
+                permission: Permission::ProfileAccountWrite,
+            },
+            req.headers(),
+        ),
+        api_locking::LockAction::NotApplicable,
+    ))
+    .await
+}
+
 #[instrument(skip_all, fields(flow = ?Flow::Verification))]
 pub async fn retrieve_apple_pay_verified_domains(
     state: web::Data<AppState>,

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [X] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
Add Apple Pay merchant registration and verified domains retrieval for v2

### Additional Changes

- [X] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->




## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
Request:
```
curl --location 'http://localhost:8080/v2/verify/apple-pay/cloth_seller_4hdx8pW2mxW0V6TZEQfm' \
--header 'x-client-secret: cs_0198af34cbcd72d0becd4db96e800bd9' \
--header 'x-profile-id: pro_833jt2bQKinLLA4pucBK' \
--header 'Authorization: api-key=dev_WH5clkiXgFqCpCDr62FCsFnjcRDZzIdwbvuuLK3sjC0nR3g6YWUYWVkOOzlfhxpd' \
--header 'Content-Type: application/json' \
--header 'api-key: dev_WH5clkiXgFqCpCDr62FCsFnjcRDZzIdwbvuuLK3sjC0nR3g6YWUYWVkOOzlfhxpd' \
--data '{
    "domain_names": ["hyperswitch-demo-store.netlify.app","sdk-test-app.netlify.app"],
    "merchant_connector_account_id": "mca_zYpPX5yTd3vo5NeMn26P"
  }'
```
Response:
```
{
    "status_message": "Applepay verification Completed"
}
```
Request:
```
curl --location 'http://localhost:8080/v2/verify/applepay-verified-domains?merchant_id=cloth_seller_4hdx8pW2mxW0V6TZEQfm&merchant_connector_account_id=mca_zYpPX5yTd3vo5NeMn26P' \
--header 'x-profile-id: pro_833jt2bQKinLLA4pucBK' \
--header 'Authorization: admin-api-key=test_admin' \
--header 'api-key: dev_WH5clkiXgFqCpCDr62FCsFnjcRDZzIdwbvuuLK3sjC0nR3g6YWUYWVkOOzlfhxpd' \
--data ''
```
Response:
```
{
    "verified_domains": [
        "hyperswitch-demo-store.netlify.app",
        "sdk-test-app.netlify.app"
    ]
}
```
<img width="1329" height="886" alt="image" src="https://github.com/user-attachments/assets/6077be64-5e4e-42a5-854e-f2872aa4e8a4" />
<img width="1338" height="904" alt="image" src="https://github.com/user-attachments/assets/08ef59d1-7ed2-4ad1-850f-12ce5118e67e" />



closes #8998 


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [X] I formatted the code `cargo +nightly fmt --all`
- [X] I addressed lints thrown by `cargo clippy`
- [X] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
