Payfast Signature (Python): Die generierte Signatur stimmt nicht übereinstimmte Signature übereinstimmtPython

Python-Programme
Anonymous
 Payfast Signature (Python): Die generierte Signatur stimmt nicht übereinstimmte Signature übereinstimmt

Post by Anonymous »

Ich versuche, eine Payfast-Zahlung mit den API-Tools in Python anstelle von PHP einzureichen (der von den Dokumenten empfohlene Ansatz). < /p>
Ich generiere eine Signatur wie SO:import hashlib
import urllib.parse

def generate_signature(data: dict, passphrase: str) -> str:
"""
Generates an MD5 signature for PayFast API request.

- Assumes data is already in the correct order.
- URL encodes values with uppercase encoding.
- Uses '+' for spaces.
- Encodes passphrase before appending.
"""
encoded_params = []

for key, value in data.items():
if value: # Ignore empty values
encoded_value = urllib.parse.quote_plus(str(value)).upper() # URL encode & uppercase
encoded_params.append(f"{key.upper()}={encoded_value}")

# URL-encode the passphrase as well
encoded_passphrase = urllib.parse.quote_plus(passphrase).upper()

# Concatenate parameters
param_string = "&".join(encoded_params)

# Append encoded passphrase
param_string += f"&PASSPHRASE={encoded_passphrase}"

print(f"String before hashing: {param_string}")

# Generate MD5 hash
signature = hashlib.md5(param_string.encode("utf-8")).hexdigest()

print(f"Generated Signature: {signature}")
return signature

< /code>
Befolgen Sie die Dokumente für die Signaturgenerierung, es sieht so aus, als ob die Parameterschlüssel und Werte oberen Fall sind, und damit die optionalen Formfelder angegeben sind.400 signature: Generated signature does not match submitted signature.
< /code>
Hier ist, was meine generierte Signatur aussieht: < /p>
String vor Hashing: < /p>
MERCHANT_ID=11111111&MERCHANT_KEY=UAAAAAAAAAAHA&RETURN_URL=HTTPS%3A%2F%2AAAAAAAA.EXECUTE-API.AF-SOUTH-1.AMAZONAWS.COM%2FDEV%2FPAYFAST-REDIRECT&CANCEL_URL=HTTPS%3A%2F%2AAAAAAAAA6.EXECUTE-API.AF-SOUTH-1.AMAZONAWS.COM%2FDEV%2FPAYFAST-REDIRECT%3FSTATUS%3DFAILED&NOTIFY_URL=HTTPS%3A%2F%2AAAAAAAAA6.EXECUTE-API.AF-SOUTH-1.AMAZONAWS.COM%2FDEV%2FPAYMENTS%2FPAYFAST-NOTIFY&EMAIL_ADDRESS=JOHN.DOE%40GMAIL.COM&AMOUNT=300&ITEM_NAME=COOL&THING&ITEM_DESCRIPTION=BLAH&BLAH&BLAH&passphrase=PHRASEFROMSANDBOX
< /code>
...Womit habe ich von persönlichen Informationen reduziert. Ich kann mir keine anderen Gründe vorstellen, warum dieses Format falsch ist.
Jede Hilfe wäre sehr geschätzt!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post