Hello,
what is the recommended way to integrate G1 payment on a website ?
Hello,
what is the recommended way to integrate G1 payment on a website ?
Veux tu dire une indication de paiement ?
Il ya plusieurs options :
duniter://g1:<PUBKEY>
: non implĂ©mentĂ© encore par les clients, mais avec le temps cette solution devrait sâimposer⊠car plus gĂ©nĂ©rique, et fonctionne sur les tĂ©lĂ©phones (ouverture de lâApp compatible)Je pensais plutĂŽt, Ă lâintĂ©gration du paiement lors dâun processus de commande: permettre le paiement avec Ä1 sur un site de vente en ligne. Jâai trouvĂ© la doc sur lâapi HTTP, je suppose quâil faut lâutiliser pour bricoler une intĂ©grationâŠ
Je pense que ça pourrait faire lâoffice dâun service Ă dĂ©velopper oui
Tu peux tâinspirer du code de Gannonce, qui surveille la blockchain pour dĂ©tecter les versements sur le crowdfunding.
EDIT : Par exemple, avec un commentaire contenant la rĂ©fĂ©rence dâune annonce, câest plutĂŽt simple Ă dĂ©velopper Ă travers un module Duniter : gannonce-pod/src/services/duniter-service.js at master · c-geek/gannonce-pod · GitHub
Le paiement depuis le site ne me parait pas bon, mais plutot une redirection. Ensuite, comme indiqué par @Inso, il faudrait scruter la BlockChain pour savoir si le paiement est effectif.
Une autre solution me vient en tĂȘte : faire une redirection, puis que celle-ci retourne le document de transaction lui mĂȘme, qui ainsi peut etre vĂ©rifiĂ© dans son intĂ©gralitĂ©, la disponibilitĂ© de ses sources, etc.
Car avant que la transaction ne soit écrite, il y a un délai.
Sinon, les lightning network seraient une autre solution, plus instannĂ©e : mise Ă disposition de fond dans un pool entre le marchant (le site) et le client (lâacheteur), puis Ă chaque opĂ©ration dâachat, le document est mis Ă jour par lâacheteur. La site vendeur peut instannĂ©ment ĂȘtre sĂ»r que la transaction est OK.
Oui exactement comme aujourdâhui avec les banques classiques : depuis le site du marchand, un bouton « Payer » redirige vers le site de la banque avec un ordre de paiement, puis une fois la transaction rĂ©alisĂ©e le site âde la banqueâ (ici non pas une banque, mais le porte-monnaie Cesium) redirige vers le site marchand en fournissant la transaction.
On peut dâailleurs imaginer que le bouton « Payer » contienne un identifiant de la commande, qui figurerait dans le champ commentaire de la transaction afin de bien la repĂ©rer ensuite en blockchain.
De mĂ©moire, la situation que lâon dĂ©crit est presque dĂ©jĂ rĂ©alisable, puisque lâon peut appeler Cesium avec des champs de transaction prĂ©-remplis, oĂč il ne manque plus que la signature. Par contre, il manque un paramĂštre âURL de callbackâ pour renvoyer la transaction au site marchand.
Ah oui ça câest une excellente idĂ©e : on peut avoir un canal Lightning ouvert avec le site. Mais câest plutĂŽt dans le cadre de sites oĂč lâon fait rĂ©guliĂšrement de lâachat / vente, style eBay.
Il y a quelques annĂ©es jâai implĂ©mentĂ© lâAPI de Pyaapl en tant que âcommercant proposant lâachat par Pyaaplâ --donc utilisateur de lâAPIâ.
Je nâai pas jetĂ© les yeux depuis sur mon bout de code, câest juste pour signifier que leur API etait simple dâutilisation et trĂšs concise et @cgeek dĂ©crit bien le dĂ©roulement.
Sur le site, dĂšs que lâutilisateur appuyer sur le bouton âAcheter avec paypalâ, celui ci etait redirigĂ© vers Paypal,
il indique lâ ID etcâŠpuis confirmation ou non de la transaction.
De mon coté, en callback
jâai le retour de lâinformation que lâutilisateur a annulĂ© ou validĂ© la transaction.
Pour Cesium, en gros, ce serait avoir une URL avec un callback⊠ouais ca devrait aller !
hop nouveau ticket
Ăa va ĂȘtre Ă©norme ⊠on aura un processus complet pour lâe-commerce en Ä1 : la monnaie -> le site -> bouton de paiement -> contrĂŽle -> payĂ© -> livrĂ©.
Il manquera plus que lâapplication de paiement back-end Ă installer chez soi pour le contrĂŽle du paiement.
Pour revenir au processus de paypal et avoir une idée de ce que je devais faire:
$url = âhttps://api.paypal.com/v1/oauth2/tokenâ; // modulaire pour changer lâurl avec la sandbox et faire les test sur lâAPI
$options = array(CURLOPT_URL => $url,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => âgrant_type=client_credentialsâ,
CURLOPT_HEADER => âAccept: application/jsonâ,
CURLOPT_USERPWD => $user.":".$pass,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_PORT => â443â,
);
$url = âhttps://api.sandbox.paypal.com/v1/payments/paymentâ; soit
$url = âhttps://api.paypal.com/v1/payments/paymentâ;
$str = â{âintentâ:âsaleâ,âredirect_urlsâ:{âreturn_urlâ:"â.$return_url.â",âcancel_urlâ:"â.$cancel_url.â"},â;
$str .= ââpayerâ:{âpayment_methodâ:âpaypalâ},âtransactionsâ:[{âdescriptionâ:"â.$desc.â",âamountâ:{âtotalâ:"â.$amount.â",âcurrencyâ:âEURâ}}]}â;
$options = array(
âhttpâ => array(
âheaderâ => âContent-Type: application/json\r\nAuthorization: Bearer â.$token.â\r\nâ, // token reçu precedement
âmethodâ => âPOSTâ,
âcontentâ => $str,
),
);
Si on part sur un noeud Duniter avec un module marchand, alors dâaprĂšs moi :
CĂŽtĂ© paiement, il suffit de connaitre le noeud cible du paiement. Câest ce noeud cible qui pourra se charger de le diffuser Ă des noeuds membres pour sâassurer que la transaction soit prise en compte.
/dunipay/announce
)CĂŽtĂ© backend de contrĂŽle, une premiĂšre approche de specs serait deux types de requĂȘtes dâaprĂšs moi :
Une requĂȘte pour annoncer un paiement ( /dunipay/announce
). En paramĂštres de la requĂȘte :
Une requĂȘte pour vĂ©rifier le % de validation de la requĂȘte ( /dunipay/status
) qui retourne un nombre de blocs requis avant de valider un paiement. Ce nombre de bloc est configurable par le marchand, par dĂ©faut il pourrait ĂȘtre de 6. Permet dâafficher dans le site du marchand le temps restant avant dâaccepter un paiement
Petit maquettage dans Cesium :
<install_cesium>/api
avec par dĂ©faut, une page de documentation sur lâAPI, avec boutons de dĂ©mo :<install_cesium>/api/#/v1/payment
:il faudrait sans doute ajouter Ă cette page le choix du noeud. Cela rendrait encore plus souple son usage.
Au niveau code, il nây aurait aucun stockage (en session, etc.) des paramĂštres de connexion, qui seraient jettĂ©s juste aprĂšs usage.
vos remarques ?
Ok, nice
Remarque dâordre dialectique
âDepuis un site vous pouvezâŠde dĂ©clencez lâouverture dâun page sur lâadresse suivante.â
Je dirais, dans la mesure ou lâon sâadresse a un dev de presentĂ© la chose suivante :
âUtilisation de lâAPI cesium pay (un truc dans le genre)
Effectuer une requete sur lâurl suivante , de type [POST/GET]â
je penche pour requete POST.
Url de la requete :
-"<install_cesium>/api/#/v1/payment :"
Type de requete :
-POST
Parametre :
-amount [obligatoire] [definir â1.0â â1â pensĂ© aux characteres Ă©tant dĂ©finis comme acceptable âle point ou la virgule ou les deuxâ]
-comment [optionnel]
-name [optionnel / obligatoire ?]
-etc
Return :
Ă dĂ©fnir ce que tu retourne a lâutilisateur de lâapi, genre
-status : ok / fail
-si fail, raison du fail, probleme sur la couche tcp/ip eventuel/ probleme interne au traitement possible, information manquante (amount pas définis / information obligatoire manquante) / transaction impossible
-hash de la transaction ? ou carrement lâurl vers un de vos sites qui affiche les donnĂ©es concernant la blockchain et cet id de block ou est enregistre la transaction directement ?
@Inso a décrit plusieurs aspects a suivre.
Et tu affiche un exemple de requete, un bout de code (eventuellement dans plusieurs langage)
pour lâexemple
apres jâai pas encore saisi tout ce que cela implique dâautorisation / les clĂ©s publiques et leurs gestion vis a vis de duniter/cesium etc, je tatonneâŠ
dans le cas de Cesium, ce ne sera pas possible. Câest une App JS pure, pas de serveur (sauf un frontal web) ;(
Magnifique !
Ă noter que, je crois bien, les longueurs dâURL sont limitĂ©es Ă 2000 caractĂšres. Ăa laisse quand mĂȘme une bonne marge pour envoyer de lâinformation mĂȘme par GET.
Pour lâaccĂšs au service câest pas trop genant.
Pour lâURL de retour, on pourrait Ă©ventuellement faire du POST. Je peux ajouter une option pour cela. Genre redirect_type
Sinon @max, habituellement comment tu ouvres la page du service de paiement ? est-ce par : iframe, page avec target="_blank"
, etc. ou bien dans la meme page web (meme window
) ? Câest pour savoir comment appeller la requete de retour : sur la window courante ou une autreâŠ
câetait dans la meme page il me semble.
la ca me chagrine, je capte pas.
Le processus "classique " câest que le click dâachat effectue une requete (post / get)
cette requete me renvois directement une reponse.
Qui mâindique le code de ma requete HTTP 200 OK blablabliâŠ
et eventuellement le header âLocationâ qui lui est intereprete par le navigateur web pour rediriger vers lâurl associĂ© a ce champs
voir les headers: HTTP âLocationâ dans le protocole HTTP
Edit:
Au dela de mes turpitudes,
compatibilité avec le protocole HTTP 2.0 ??
attention la RFC pique les yeux
Je pense que kimamila imagine plutĂŽt le scĂ©nario oĂč le bouton « Payer » sur le site marchand renvoie lâutilisateur vers une nouvelle page (HTTP GET, ce sur quoi insiste kimamila) qui, une fois la transaction signĂ©e, gĂ©nĂšre une requĂȘte HTTP GET/POST vers une URL attendue par le serveur.
Exemple :
Mais il sâagit bien dâun processus Ă 2 requĂȘtes HTTP : lâune pour accĂ©der Ă lâinterface de paiement Cesium, lâautre pour retourner la transaction signĂ©e au site marchand qui en fait bien ce quâil veut, mais qui peut en tout cas considĂ©rer quâil a un chĂšque entre les mains.
da
Je pensais plutĂŽt Ă une intĂ©gration directe sur le site marchand sans passer par une redirection http/get. Jâai eu lâoccasion de travailler avec la blockchain stellar et la librairie proposĂ©e est super bien conçue. Ils ont mis en place une api rest et des librairies pour faciliter lâusage de lâapi cĂŽtĂ© client.
Dans leur systĂšme le propriĂ©taire dâun compte a accĂšs Ă sa clef privĂ©e. Du coup, il peut dĂ©cider de la stocker sur un site de vente en ligne auquel il fait confiance, il est du coup possible dâimplĂ©menter un systĂšme de paiement intĂ©grĂ© au site.