Include CloudCoin in an ATM system

From CloudCoin Wiki
Revision as of 18:46, 19 September 2021 by Seanw (talk | contribs) (Sample URL that becomes a QR Code)
Jump to: navigation, search

There are four issues to consider. The generation of the QR code, the customer calling your web hook, verifying the CloudCoin payment and customize the receipt.


Providing a QR code for Cell Phones

Your ATM will need to generate a QR code so the customer can send you CloudCoins. The QR code will be a URL that any phone can use without installing any special software.

Sample URL that becomes a QR Code

The QR code and be done in two ways

1. Based on the current QR code 2. Storing a record based on the transaction code on the server (recomended)

The QR code contains:

GET Code Name Exanple Server or Client
w B4U Skywallet ID cc.b4uatm.com Client
cc Amount in CloudCoin 300 Client
usd Amount in USD 300 Client
b4u Transaction ID P3WFMghh24NWkTwX3eNyag Client
m Merchant ID 129987 Server
t Terminal ID 34586 Server
s Store ID 54235 Server
qr QR Verification Code XXXXXXX Client but maybe server
d Date & Time of Transaction 210914153315 Server
imei Mobile Device IMEI 354454028234368 Unneeded but seems like it must be generated on Client
p Phone Number 5305917058 Unneeded but seems it must be generated on Client
e echo (base64 data that is optional and can be anything. This will be passed to the webhook) P3WFMghh24NWkTwX3eNyag Server

Sample URL ( including an optional base64 message created by you ). This that becomes a QR Code

https://skywallet.cc/b4u?w=bill&cc=300&usd=3434&b4u=P3WFMghh24NWkTwX3eNyag&m=129854&t=34568&s=54256&qr=xxxxxxx&d=210914153315&imei=354454028234368&p=5305927085

Web Hook Page

You will need to have a web page that receives notice that your customer has send you CloudCoins and is waiting at the ATM.

Sample URL that your Web Hook receives

https://b4uATM.com/CloudCoin?cc=3000&id=7917cdf720c044049cc534a370130642

Sample URL that your Web Hook receives (including the optional base64 text )

https://b4uATM.com/CloudCoin?cc=3000&id=7917cdf720c044049cc534a370130642


Verifying Payment

You will need to verify that your Skywallet Account has received CloudCoins. You can do this by using the Skywallet Connect CLI. Skywallet Connect is a console application written in GoLang and runs on any platform. It can be called by any programming language.

$ ./skywallet_connect verify_payment 080A4CE89126F4F1B93E4745F89F6713 b4u.skywallet.cc
{"amount_verified":100,"status":"success","message":"CloudCoins verified"}

1. Sample Web Hook Page in PHP file (name it cloudcoin.php):

<?php

/* Load GET Parameters */
	isset($_GET['id'])? $id = $_GET['id']: die("ID required");
	isset($_GET['cc'])? $cc= $_GET['cc']: die("CC required");
	isset($_GET['b64'])? $b64= $_GET['b64']: $b64= '';

	$skywallet = "b4u.skywallet.cc"; 

/* CHECK SKYWALLET ACCOUNT IS THERE AND WORKING */
	$skywallet_connect = "/usr/local/bin/skywallet_connect";

	if (!file_exists($skywallet_connect))
			die("skywallet_connect not found");

	if (!is_executable($skywallet_connect))
			die("skywallet_connect doesn't have exec permissions");


/* Verify Receipt of CloudCoins */
        global $skywallet_connect;

		$cmd =  "$skywallet_connect verify_payment $id";
		//echo $cmd;

        // Exec the binary
        $json = exec($cmd, $outarray, $error_code);
        if ($error_code != 0) {
            die("Invalid response from skywallet_connect: $error_code, Output $json");
        }

        $arr = json_decode($json, true);
        if (!$arr) {
			die("Failed to decode json: $json");
        }

        if (!isset($arr['amount_verified']) || !isset($arr['status'])) {
			die("Corrupted response: $json");
        }

        if ($arr['status'] != "success") {
			die("Invalid status in response: $json");
        }

		$cc_due = "SELECT cc FROM data WHERE id = $id";

        $amountVerified = $arr['amount_verified'];
        if ($amountVerified != $cc_due ) {
               die("Invalid amount: $amountVerified, expected: $amount");
		}

		/* Payment has been received */
		 //1. Send $$$ to the ATM
		 //2. Recored Transaction

?>