paytechuz 0.2.16__tar.gz → 0.2.18__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of paytechuz might be problematic. Click here for more details.

Files changed (84) hide show
  1. {paytechuz-0.2.16 → paytechuz-0.2.18}/PKG-INFO +1 -1
  2. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/main.py +1 -1
  3. {paytechuz-0.2.16 → paytechuz-0.2.18}/pyproject.toml +1 -1
  4. {paytechuz-0.2.16 → paytechuz-0.2.18}/setup.py +1 -1
  5. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/fastapi/routes.py +35 -25
  6. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/__init__.py +1 -1
  7. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz.egg-info/PKG-INFO +1 -1
  8. {paytechuz-0.2.16 → paytechuz-0.2.18}/MANIFEST.in +0 -0
  9. {paytechuz-0.2.16 → paytechuz-0.2.18}/README.md +0 -0
  10. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/__init__.py +0 -0
  11. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/app/__init__.py +0 -0
  12. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/app/database.py +0 -0
  13. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/app/models.py +0 -0
  14. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/app/typing.py +0 -0
  15. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/app/webhook_handlers.py +0 -0
  16. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/payments.db +0 -0
  17. {paytechuz-0.2.16 → paytechuz-0.2.18}/examples/paytechuz_fastapi/run.sh +0 -0
  18. {paytechuz-0.2.16 → paytechuz-0.2.18}/setup.cfg +0 -0
  19. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/__init__.py +0 -0
  20. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/__init__.py +0 -0
  21. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/base.py +0 -0
  22. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/constants.py +0 -0
  23. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/exceptions.py +0 -0
  24. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/http.py +0 -0
  25. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/payme/errors.py +0 -0
  26. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/core/utils.py +0 -0
  27. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/__init__.py +0 -0
  28. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/click/__init__.py +0 -0
  29. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/click/client.py +0 -0
  30. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/click/merchant.py +0 -0
  31. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/click/webhook.py +0 -0
  32. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/payme/__init__.py +0 -0
  33. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/payme/cards.py +0 -0
  34. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/payme/client.py +0 -0
  35. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/payme/receipts.py +0 -0
  36. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/gateways/payme/webhook.py +0 -0
  37. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/__init__.py +0 -0
  38. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/__init__.py +0 -0
  39. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/admin.py +0 -0
  40. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/apps.py +0 -0
  41. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/migrations/0001_initial.py +0 -0
  42. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/migrations/__init__.py +0 -0
  43. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/models.py +0 -0
  44. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/signals.py +0 -0
  45. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/views.py +0 -0
  46. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/django/webhooks.py +0 -0
  47. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/fastapi/__init__.py +0 -0
  48. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/fastapi/models.py +0 -0
  49. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/integrations/fastapi/schemas.py +0 -0
  50. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/__init__.py +0 -0
  51. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/base.py +0 -0
  52. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/constants.py +0 -0
  53. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/exceptions.py +0 -0
  54. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/http.py +0 -0
  55. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/payme/errors.py +0 -0
  56. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/core/utils.py +0 -0
  57. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/__init__.py +0 -0
  58. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/click/__init__.py +0 -0
  59. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/click/client.py +0 -0
  60. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/click/merchant.py +0 -0
  61. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/click/webhook.py +0 -0
  62. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/payme/__init__.py +0 -0
  63. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/payme/cards.py +0 -0
  64. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/payme/client.py +0 -0
  65. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/payme/receipts.py +0 -0
  66. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/gateways/payme/webhook.py +0 -0
  67. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/__init__.py +0 -0
  68. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/__init__.py +0 -0
  69. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/admin.py +0 -0
  70. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/apps.py +0 -0
  71. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/migrations/0001_initial.py +0 -0
  72. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/migrations/__init__.py +0 -0
  73. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/models.py +0 -0
  74. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/signals.py +0 -0
  75. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/views.py +0 -0
  76. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/django/webhooks.py +0 -0
  77. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/fastapi/__init__.py +0 -0
  78. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/fastapi/models.py +0 -0
  79. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/fastapi/routes.py +0 -0
  80. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz/integrations/fastapi/schemas.py +0 -0
  81. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz.egg-info/SOURCES.txt +0 -0
  82. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz.egg-info/dependency_links.txt +0 -0
  83. {paytechuz-0.2.16 → paytechuz-0.2.18}/src/paytechuz.egg-info/top_level.txt +0 -0
  84. {paytechuz-0.2.16 → paytechuz-0.2.18}/tests/test_click_gateway.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paytechuz
3
- Version: 0.2.16
3
+ Version: 0.2.18
4
4
  Summary: Unified Python package for Uzbekistan payment gateways
5
5
  Home-page: https://github.com/Muhammadali-Akbarov/paytechuz
6
6
  Author: Muhammadali Akbarov
@@ -91,12 +91,12 @@ async def payme_webhook(request: Request, db: Session = Depends(get_db)):
91
91
  )
92
92
  return await handler.handle_webhook(request)
93
93
 
94
+
94
95
  @app.post("/payments/click/webhook")
95
96
  async def click_webhook(request: Request, db: Session = Depends(get_db)):
96
97
  handler = CustomClickWebhookHandler(
97
98
  db=db,
98
99
  service_id="your_service_id",
99
- merchant_id="your_merchant_id",
100
100
  secret_key="your_secret_key",
101
101
  account_model=Order
102
102
  )
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "paytechuz"
7
- version = "0.2.16"
7
+ version = "0.2.18"
8
8
  description = "Unified Python package for Uzbekistan payment gateways"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
@@ -8,7 +8,7 @@ long_description = (here / "README.md").read_text(encoding="utf-8")
8
8
 
9
9
  setup(
10
10
  name='paytechuz',
11
- version='0.2.16',
11
+ version='0.2.18',
12
12
  license='MIT',
13
13
  author="Muhammadali Akbarov",
14
14
  author_email='muhammadali17abc@gmail.com',
@@ -7,11 +7,10 @@ import json
7
7
  import logging
8
8
  from datetime import datetime
9
9
  from decimal import Decimal
10
- from typing import Dict, Any, Optional, Callable
10
+ from typing import Dict, Any, Optional
11
11
 
12
12
  from fastapi import (
13
13
  APIRouter,
14
- Depends,
15
14
  HTTPException,
16
15
  Request,
17
16
  Response,
@@ -919,37 +918,48 @@ class ClickWebhookHandler:
919
918
  """
920
919
  Check authentication using signature.
921
920
  """
922
- if str(params.get('service_id')) != self.service_id:
921
+ if not all([self.service_id, self.secret_key]):
923
922
  raise HTTPException(
924
923
  status_code=status.HTTP_401_UNAUTHORIZED,
925
- detail="Invalid service ID"
924
+ detail="Missing required settings: service_id or secret_key"
926
925
  )
927
926
 
928
- # Check signature if secret key is provided
929
- if self.secret_key:
930
- sign_string = params.get('sign_string')
931
- sign_time = params.get('sign_time')
927
+ if str(params.get("service_id")) != self.service_id:
928
+ raise HTTPException(
929
+ status_code=status.HTTP_401_UNAUTHORIZED,
930
+ detail="Invalid service ID"
931
+ )
932
932
 
933
- if not sign_string or not sign_time:
934
- raise HTTPException(
935
- status_code=status.HTTP_401_UNAUTHORIZED,
936
- detail="Missing signature parameters"
937
- )
933
+ sign_string = params.get("sign_string")
934
+ sign_time = params.get("sign_time")
938
935
 
939
- # Create string to sign
940
- to_sign = f"{params.get('click_trans_id')}{params.get('service_id')}"
941
- to_sign += f"{self.secret_key}{params.get('merchant_trans_id')}"
942
- to_sign += f"{params.get('amount')}{params.get('action')}"
943
- to_sign += f"{sign_time}"
936
+ if not sign_string or not sign_time:
937
+ raise HTTPException(
938
+ status_code=status.HTTP_401_UNAUTHORIZED,
939
+ detail="Missing signature parameters"
940
+ )
944
941
 
945
- # Generate signature
946
- signature = hashlib.md5(to_sign.encode('utf-8')).hexdigest()
942
+ # Prepare signature components
943
+ text_parts = [
944
+ str(params.get("click_trans_id") or ""),
945
+ str(params.get("service_id") or ""),
946
+ str(self.secret_key or ""),
947
+ str(params.get("merchant_trans_id") or ""),
948
+ str(params.get("merchant_prepare_id") or ""),
949
+ str(params.get("amount") or ""),
950
+ str(params.get("action") or ""),
951
+ str(sign_time)
952
+ ]
953
+
954
+ # Calculate hash
955
+ calculated_hash = hashlib.md5("".join(text_parts).encode("utf-8")).hexdigest()
956
+
957
+ if calculated_hash != sign_string:
958
+ raise HTTPException(
959
+ status_code=status.HTTP_401_UNAUTHORIZED,
960
+ detail="Invalid signature"
961
+ )
947
962
 
948
- if signature != sign_string:
949
- raise HTTPException(
950
- status_code=status.HTTP_401_UNAUTHORIZED,
951
- detail="Invalid signature"
952
- )
953
963
 
954
964
  def _find_account(self, merchant_trans_id: str) -> Any:
955
965
  """
@@ -6,7 +6,7 @@ payment systems in Uzbekistan. It supports Django, Flask, and FastAPI.
6
6
  """
7
7
  from typing import Any
8
8
 
9
- __version__ = '0.2.15'
9
+ __version__ = '0.2.17'
10
10
 
11
11
  # Import framework integrations - these imports are used to check availability
12
12
  # of frameworks, not for direct usage
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paytechuz
3
- Version: 0.2.16
3
+ Version: 0.2.18
4
4
  Summary: Unified Python package for Uzbekistan payment gateways
5
5
  Home-page: https://github.com/Muhammadali-Akbarov/paytechuz
6
6
  Author: Muhammadali Akbarov
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes