Sprawdziłem webhooki na sandboxie i działają one poprawnie od strony lvlup.
Skorzystałem z kontenera dockera w którym jest serwer http "lustro". Pokaże to w konsoli wszystkie requesty HTTP wraz ze szczegółami, bez potrzeby pisania kodu.
# https://github.com/mendhak/docker-http-https-echo
docker run -p 9000:8080 --rm -t mendhak/http-https-echo:18
Dodatkowo uruchomiłem tymczasowy, prosty i darmowy tunel do portu http na którym słucha ten serwer.
# https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/trycloudflare
cloudflared tunnel --url http://localhost:9000
W ten sposób uzyskałem globalnie dostępny serwer z poprawnym certyfikatem https którego użyłem do sprawdzenia webhooków.
Link tunelu wprowadziłem do dosłownie copy-paste kodu pokazanego jako przykład w bibliotece:
// source: https://www.npmjs.com/package/lvlup-js
const LvlupApi = require('lvlup-js');
const lvlup = new LvlupApi('KEY', {env: 'sandbox'});
(async () => {
const linkForPayment = await lvlup.createPayment('32', 'https://CHANGEME.trycloudflare.com/redirect', 'https://CHANGEME.trycloudflare.com/webhook');
console.log(linkForPayment);
})()
W momencie użycia endpointa POST /v4/sandbox/wallet/up/{id}/ok, otrzymałem webhook zgodny ze specyfikacją w dokumentacji.
Tak czy inaczej, może występować niedoskonałość którą da się ulepszyć.
API nie powinno zawracać powodzenia jeśli wiadomo od razu, że nie da rady dostarczyć webhooka pod dany URL np. bez https czy z portem innym niż 443.
Daj znać jakie szablony URLi przechodzą w wysłaniu do API i uzyskują HTTP 200 jako webhook np. http://example.com:9000 a nie dostajesz powiadomienia ale jesteś jednocześnie pewien, że ten serwer faktycznie działa.