Discussions
Callback Url Function
Buongiorno a partire dal 1 Giugno 2023 la funzione callback_url viene richiamata 3 volte con lo stesso payload per ogni cambio di stato. Potete verificare l'anomalia?
Posted by Pasquale 4 days ago
Differenza tra produzione e sviluppo
Buongiorno, ho sviluppato una pagina per l'acquisizione di donazioni e sto riscontrando una anomalia di comportamento tra il funzionamento dell'App di sviluppo e quella di produzione quando si effettua un pagamento da dispositivo mobile. Da desktop tutto funziona regolarmente mentre da mobile il comportamento cambia: il sistema rimanda all'appello regolarmente e la trasmissione avviene correttamente. Tuttavia tornando al browser, mentre in sviluppo il sistema correttamente rimanda alla pagina di ringraziamento, in produzione questo non avviene. Le uniche differenze tra i due sistemi sono l'url della pagina e i parametri di satispay che in un caso sono quelli di sviluppo e nell'altro quelli di produzione. Non riesco a capire che cosa non vada. Lato server non riscontro alcun errore nei log. Qualcuno ha idea di che cosa possa determinare questo comportamento? Grazie
Posted by Alberto Almagioni 15 days ago
jimdo
Buonasera a tutti, c'è modo di integrare satispay in un sito creato con jimdo?
Grazie
Posted by Davide 21 days ago
Authorisation fails
Hello,
we are trying to authorise against the staging environment following the guide in the API documentation with a generated keyId but we constantly get the public role back, meaning the authorisation failed:
{"authentication_key":{"role":"PUBLIC"}, "status_code": 200}
The authorisation is done through a python script which i attached below. I tried different body formatting because apparently the digest always turns out different and also not as expected as in the provided digest checker.
```python python
import hashlib
import base64
import json
import requests
from datetime import datetime
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
# Setup
AUTH_HOST = "staging.authservices.satispay.com"
KEY_ID = "XXX"
# Body format 1
body = {
"flow": "MATCH_CODE",
"amount_unit": 100,
"currency": "EUR"
}
body = json.dumps(body)
# Body format 2
# body2 = "{\n \"flow\": \"MATCH_CODE\",\n \"amount_unit\": 100,\n \"currency\": \"EUR\"\n}"
# Body format 3
# body3 = '''
# {
# "flow": "MATCH_CODE",
# "amount_unit": 100,
# "currency": "EUR"
# }
# '''
# Create a digest of the body
digest = base64.b64encode(hashlib.sha256(body.encode("utf-8")).digest()).decode()
digest = f"SHA-256={digest}"
print(digest)
# Create string for signing
now = datetime.strftime(datetime.utcnow(), "%a, %d %b %Y %H:%M:%S +0000")
print(now)
string = f"(request-target): post /wally-services/protocol/tests/signature\nhost: {AUTH_HOST}\n" \
f"date: {now}\ndigest: {digest}"
# Same thing
# string2 = f'''(request-target): post /wally-services/protocol/tests/signature
# host: staging.authservices.satispay.com
# date: {now}
# digest: {digest}'''
# Sign the string
key_path = "/PATH/TO/PRIVATE/KEY"
with open(key_path, "rb") as key_file: # Load the private key from a PEM file
private_key = serialization.load_pem_private_key(
key_file.read(),
password=None # Replace with the password if the key is encrypted
)
signature = private_key.sign(
string.encode("utf-8"),
padding.PKCS1v15(),
hashes.SHA256()
)
# Convert the signature to Base64 format
signature_b64 = base64.b64encode(signature).decode()
# Create Authorisation header
authorisation_header = f'Signature keyId="{KEY_ID}", ' \
f'algorithm="rsa-sha256", ' \
f'headers="(request-target) host date digest", ' \
f'signature="{signature_b64}"'
# Compose all headers
headers = {
"accept": "application/json",
"content-type": "application/json",
"host": AUTH_HOST,
"date": now,
"digest": digest,
"authorisation": authorisation_header,
}
resp = requests.post(
"https://staging.authservices.satispay.com/wally-services/protocol/tests/signature",
headers=headers, data=body
)
print(resp.text)
print(resp.status_code)
#YIELDS THE FOLLOWING
#{"authentication_key":{"role":"PUBLIC"}}
#200
```
What are we doing wrong or did we oversee something? Can you please provide some help?
Posted by Christoph Koch 25 days ago
Ordini in attesa di pagamento / annullati woocommerce
Buongiorno, da qualche giorno ho un malfunzionamento nel plugin woocommerce satispay. A seguito di una migrazione di hosting, il plugin lato utente funziona correttamente e i pagamenti vengono processati normalmente, ma l'ordine lato backend non va a buon fine: resta in stato "in attesa di pagamento" per qualche ora finché non diventa annullato.
Ho provato a reimpostare il plugin, controllare l'attivazione del cron, disattivato tutti i plugin superflui del sito che potevano bloccare con firewall la risposta del pagamento, e segnalato al mio hosting questo problema.
Insieme all'aiuto dell'hosting e di un tecnico abbiamo individuato l'errore
[Wed May 03 09:08:52.138100 2023] [access_compat:error] [pid 1164511:tid 22907627403008] [client 34.249.61.43:5744] AH01797: client denied by server configuration: /home/khkjuvig/public_html/wc-api
[Wed May 03 09:08:52.138394 2023] [access_compat:error] [pid 1164511:tid 22907627403008] [client 34.249.61.43:5744] AH01797: client denied by server configuration: /home/khkjuvig/public_html/403.shtml
Quando viene effettuato un pagamento con Satispay. L'hosting mi ha consigliato di disattivare ModSecurity che poteva essere la causa del problema, ma non è stato risolutivo.
Potreste aiutarmi a risolvere?
L'hosting mi chiede inoltre di sapere lo user agent utilizzato da voi per poter effettuare altri controlli, è un'informazione che potete fornirmi?
Posted by Francesco Rossi about 1 month ago
Api cost
I wish to integrate Satispay on my application and I wish to know the cost (in terms of dollars or euro) in order to use the API.
More in particular:
Are there any Terms of Service? limited calls per day, per user, etc.
Are there any costs to bear? What is the pricing policy?
Posted by renna about 2 months ago
Su One-off Web-button custom UX, ogni tanto, sembra che "completed" non venga eseguita
Buongiorno,
Ho implementato su un sito la modalità One-off Web-button con una UX custom, quindi con "var satispay = SatispayWebButton.configure({...})"
Il flusso è abbastanza semplice: al momento del pagamento, salvo l'ordine sul database con stato "non pagato", quindi procedo:
1. alla creazione del paymentId
2. all'apertura della popup di Satispay
3. se l'ordine va a buon fine, al cambio di status dell'ordine sul db da "non pagato" a "pagato"
Il merchant lamenta che, ogni tanto, alcuni ordini, pur pagati, non passano allo status "pagato" e quindi deve controllarli e cambiare manualmente lo status. Ribadisco che il problema si verifica sporadicamente: la maggior parte degli ordini viene correttamente segnato come "pagato", quindi lo script funziona.
Ho messo dei log sia nella fase di creazione del paymentId (che va sempre a buon fine, ottengo sempre una risposta valida) che nella callback "completed": in effetti, nei casi segnalati dal cliente, i log qui non si creano proprio, come se "completed" non venisse eseguita. Eppure, come detto, il pagamento avviene.
Cosa può essere successo in questi casi? C'è qualcosa che mi sfugge ma non riesco a capire cosa
Grazie in anticipo per le risposte
Posted by Ivan 3 months ago
Cannot find shop payment list also with web site
Dear everyone,
I have one problem , because yesterday i tried to pay 1 euro to my shop satispay account, and in my phone i can find the record of payment, but in the web site there's nothing. Same thing with the api i use, i finally can get response :{"has_more":false,"data":[]}. it is like web site , there's no list of payment.
Thanks in advance and best regards
Posted by SUN AZZURRA 3 months ago
StatusCode: 403, ReasonPhrase: 'Forbidden' for my request "https://authservices.satispay.com/g_business/v1/payments?status=ACCEPTED&limit=20"
Dear everyone,
im new in satispay, so i don't know if i have lost some step
(request-target): get https://authservices.satispay.com/g_business/v1/payments?status=ACCEPTED&limit=20
host: authservices.satispay.com
date: Tue, 14 Mar 2023 09:35:34 GMT
digest: SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
my sign: UmjE0wIjuCBrQExCtWnAd5Q+a3/ouo6UpvlAPlRvvxvBin+yLCinY//8AdOwMmo/FO5P3Oeutj3WhVd+Y5aSjuGfd+iTnOy4UJGfKCWz6MpJ7OECHafL5JvGja0T71fnvNrPbcEVnxnIsJL8RlunfXW8kB1b9QgqJjcKThqRGYN0KbYUcJtmS0MsADkLLNDj87qdIYuTrOuDwfWHPvCMCcSsF20a2bZCPqFJ9/z2BfLrCMeF8l6IXD4uCiWCfWSKZIfsYYAMNOhwiPGSRwiMWxW/UFmbFFOT8omTIcmTGRJBE6rMy3f1+EDtIXkoG4tjqVWbQk8H33/7nfOfvqalyzgjK2SHsN19olIZI3CNFbLWVyIGyfaLPlFsnEgVZqzmTtnB5TcmhcGxtYt4tC+WFFv0NzeGwZzB1dY6Kf7/55fTFtWKvY8/8AixDW2MhoUMNNEb2Tp3OU3TPfPV/Hw4f527koM0PztOx4XC3DGItX+jWJGp4aYF/Zfe4OGsLnfkM41ahgX+sp9xkDC+Amczyon+s1Y28SBsD0UE8PcINk9pto3gWhSQnflKjlbvKUdXykmU+FKVQTHT2hb8g7H4QVOD0Ft1WlGUcZBVleCTy5ejnmL1V1l8zEd9KruyPZsHKH2bVYDqcEVm0zBq0VbjsaOT7GRF/k26N6pGZNmPUEI=
my authorization:
Authorization:Signature keyId ="k04rghfef4avi2hshl08h0sgfjhmmcqh28p4o1m9k920rpjg85kt00sil6fdfgqjsjdk62a0m5m6fliqtqn9e1n31ag0s6cs6u4n5poqeu9do556c086qlbimc9eqavtk5srghsbejj4423j72noanfnceplvjeacat1nk0heutekogahgrsk2ivl5hog5ffq2peqim4", algorithm="rsa-sha256", headers="(request-target) host date digest", signature="UmjE0wIjuCBrQExCtWnAd5Q+a3/ouo6UpvlAPlRvvxvBin+yLCinY//8AdOwMmo/FO5P3Oeutj3WhVd+Y5aSjuGfd+iTnOy4UJGfKCWz6MpJ7OECHafL5JvGja0T71fnvNrPbcEVnxnIsJL8RlunfXW8kB1b9QgqJjcKThqRGYN0KbYUcJtmS0MsADkLLNDj87qdIYuTrOuDwfWHPvCMCcSsF20a2bZCPqFJ9/z2BfLrCMeF8l6IXD4uCiWCfWSKZIfsYYAMNOhwiPGSRwiMWxW/UFmbFFOT8omTIcmTGRJBE6rMy3f1+EDtIXkoG4tjqVWbQk8H33/7nfOfvqalyzgjK2SHsN19olIZI3CNFbLWVyIGyfaLPlFsnEgVZqzmTtnB5TcmhcGxtYt4tC+WFFv0NzeGwZzB1dY6Kf7/55fTFtWKvY8/8AixDW2MhoUMNNEb2Tp3OU3TPfPV/Hw4f527koM0PztOx4XC3DGItX+jWJGp4aYF/Zfe4OGsLnfkM41ahgX+sp9xkDC+Amczyon+s1Y28SBsD0UE8PcINk9pto3gWhSQnflKjlbvKUdXykmU+FKVQTHT2hb8g7H4QVOD0Ft1WlGUcZBVleCTy5ejnmL1V1l8zEd9KruyPZsHKH2bVYDqcEVm0zBq0VbjsaOT7GRF/k26N6pGZNmPUEI="
and here the response:
StatusCode: 403, ReasonPhrase: 'Forbidden', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
x-satispay-cid: UxwuDPJ2
Digest: SHA-256=TC4Z8LCF1P4OIEFa7pdWnuGpqyDHwGGSH0Y2/+yZpI0=
Date: Tue, 14 Mar 2023 09:35:31 GMT
Server: Apache
Content-Length: 50
Content-Type: application/json
}
Thanks in advance
Posted by SUN AZZURRA 3 months ago
Obtain the KeyId
Hi, in "Obtain the KeyId", i read:
"token string required -> Activation code that can be generated from the Satispay Dashboard (or provided manually for Sandbox account)".
In Sandbox account where can i find the Activation code ? Or how can i obtain it?
Posted by Giuseppe Peschiera 3 months ago