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 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

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

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

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
{"amount_verified":100,"status":"success","message":"CloudCoins verified"}

1. Sample Web Hook Page in PHP file (name it cloudcoin.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 = ""; 

	$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