<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The Interledger Community 🌱: Web Monetization for Moodle</title>
    <description>The latest articles on The Interledger Community 🌱 by Web Monetization for Moodle (@wmmoslp).</description>
    <link>https://community.interledger.org/wmmoslp</link>
    <image>
      <url>https://community.interledger.org/images/4vtXyuUh91R6Re6WsksW4TzX48wWNlniwxNLrkFPT68/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkuaW50ZXJs/ZWRnZXIub3JnL3Jl/bW90ZWltYWdlcy91/cGxvYWRzL29yZ2Fu/aXphdGlvbi9wcm9m/aWxlX2ltYWdlLzUy/L2UxMzUyNmRmLTI5/YWMtNGRiNi05OTg0/LWRhMmMwMWExNjVm/Mi5wbmc</url>
      <title>The Interledger Community 🌱: Web Monetization for Moodle</title>
      <link>https://community.interledger.org/wmmoslp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.interledger.org/feed/wmmoslp"/>
    <language>en</language>
    <item>
      <title>Web Monetization for Moodle - Final report</title>
      <dc:creator>Andrew Hancox</dc:creator>
      <pubDate>Wed, 15 Dec 2021 16:25:54 +0000</pubDate>
      <link>https://community.interledger.org/wmmoslp/web-monetization-for-moodle-final-report-42o4</link>
      <guid>https://community.interledger.org/wmmoslp/web-monetization-for-moodle-final-report-42o4</guid>
      <description>&lt;h2&gt;
  
  
  Project Update
&lt;/h2&gt;

&lt;p&gt;This is the final formal project update, we are grateful for having had the opportunity to take part in this programme and excited to share a complete picture of all the work undertaken.&lt;br&gt;
While our formal involvement is now complete, we will advocate for the standards and philosophies this programme has brought together as well as maintain the work we have done through it.&lt;/p&gt;

&lt;p&gt;The two major pieces of recent progress have been:&lt;/p&gt;

&lt;p&gt;Supporting receipt verification in the Moodle plugin - more on that &lt;a href="https://community.webmonetization.org/wmmoslp/building-and-using-a-receipt-verifier-service-100a"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Launching and populating with content a web monetized learning management system for &lt;a href="https://bettercare.co.za"&gt;Bettercare&lt;/a&gt; - &lt;a href="https://courses.bettercare.co.za/"&gt;Bettercare Courses&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Progress on objectives
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Develop tooling
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Moodle plugin
&lt;/h4&gt;

&lt;p&gt;A plugin for &lt;a href="https://moodle.com"&gt;Moodle&lt;/a&gt; sits at the core of this entire project, this has now been published on and is available for anyone to use:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization"&gt;moodle-local_webmonetization&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The plugin has been submitted to the Moodle plugins databaseand has gone through it's first round of review and feedback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://moodle.org/plugins/local_webmonetization"&gt;Moodle plugins DB&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Interledger PHP
&lt;/h4&gt;

&lt;p&gt;Currently this library provides functionality to verify receipts and parse out the information contained within them but it is hoped that over time it will grow to offer more functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/andrewhancox/interledgerphp"&gt;InterledgerPHP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have also suplied documentation in the form of a recent blog post:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.webmonetization.org/wmmoslp/building-and-using-a-receipt-verifier-service-100a"&gt;Building and using a Receipt Verifier Service&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deliver a reference site
&lt;/h3&gt;

&lt;p&gt;Throughout the project we have been maintaining a publicly available reference site, this has been used as a resource for people to see the Moodle plugin in action during demos. This site will remain available for the foreseeable future.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://examplesite.opensourcelearning.co.uk"&gt;http://examplesite.opensourcelearning.co.uk&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Building awareness, Communications and marketing
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Online
&lt;/h4&gt;

&lt;p&gt;Various conversations have been seeded throughout the Moodle forums and related sub-reddits and facebook groups.&lt;/p&gt;

&lt;h4&gt;
  
  
  In person
&lt;/h4&gt;

&lt;p&gt;Many conversations have been had during the duration of this project with various decision makers with a particular focus on those delivering learning to marginalised groups and in areas porrly served by current main-stream payment solutions.&lt;/p&gt;

&lt;h4&gt;
  
  
  The conclusions
&lt;/h4&gt;

&lt;p&gt;There are several key issues that came up in all conversations.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Awareness of the technology&lt;/em&gt; - Very few people have heard of the Interledger protocol and web monetization standard, where moving money around is concerned organisations tend to be highly risk averse and so look for options with visible track records.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Suspicion of block chain based solutions&lt;/em&gt; - There is a huge amount of hype around web3 and associated technologies which generates suspicion around their stablity and longevity. High profile hacks such as compromises of exchanges etc., while not directly related to this project create a climate of fear.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Browser support&lt;/em&gt; - The lack of support for Safari (mobile and desktop) and Chrome (mobile) is a major blocker. Desktop Safari is used by between 10% and 20% of users, on mobile Safari and Chrome combined have 95% market share. It's very dificult to expect publishers to rely on an income stream that cannot be generated from such a large proportion of their audience and making it mandatory for any element of the service would be impossible.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Lack of web monetization providers&lt;/em&gt; - A great deal of the benefits of working with an open standard become irrelevant where it's use is entirely dependent on one service provider, in this case Coil. Many of the benefits of non-traditional payment technologies around facilitating cross border transactions and allowing those with limited access to traditional payment solutions (e.g. credit cards) are undermined by the fact that the only option to monetize a browser is via a web-site which is only available in English and only accepts payment via credit card.&lt;/p&gt;

&lt;p&gt;The next steps required to allow this technology to gain further adoption are for issues around browser support to be addressed and further options around monetization providers to emerge to create a truly global and accessible eco-system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Partnerships
&lt;/h3&gt;

&lt;p&gt;The most exciting output of this project has been the launch of a web monetization enabled learning management system for &lt;a href="https://bettercare.co.za"&gt;Bettercare&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Bettercare design learning programmes for healthcare professionals that are widely used by government and private hospitals, non-profit organisations and training institutions in South Africa and other countries. The learning programmes bring the latest developments in child, perinatal and HIV care to healthcare professionals working in challenging circumstances.&lt;/p&gt;

&lt;p&gt;In building this platform we took the existing chapter quizzes and assessments included in the publications and brought them into a fully featured and configured LMS in order to centralise assessments, issue certificates and track completion. The hope is that as this platform becomes established it will motivate learners to build their skill sets by covering more content and progress their careers by acquiring certificates of completion.&lt;/p&gt;

&lt;p&gt;The tool has webmonetization enabled throughout and it is hoped that as adoption of the technology grows a steady income stream will emerge.&lt;/p&gt;

&lt;p&gt;The site is in the process of being rolled out to users and is now publicly available - &lt;a href="https://courses.bettercare.co.za/"&gt;Bettercare Courses&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;We have reached the end of the funded period but not the end of our engagement with the project.&lt;/p&gt;

&lt;p&gt;For the next 12 months and foreseeable future beyond we will continue to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintain the Moodle plugin and reference site&lt;/li&gt;
&lt;li&gt;Maintain the InterledgerPHP library&lt;/li&gt;
&lt;li&gt;Support and host a webmonetized learning management system for Bettercare&lt;/li&gt;
&lt;li&gt;Advocate for the web monetization and interledger technologies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What community support would benefit your project?
&lt;/h2&gt;

&lt;p&gt;We hope the community will engage with us in a few ways.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reach out if you are interested in using the Moodle plugin and have any questions&lt;/li&gt;
&lt;li&gt;Contribute to the InterledgerPHP library&lt;/li&gt;
&lt;li&gt;Build new plugins using the InterledgerPHP library, current solutions for Wordpress and Drupal could benefit from functionality around receipts&lt;/li&gt;
&lt;li&gt;Get in touch if you want help implementing receipt validation in your solution&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Relevant links/resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://courses.bettercare.co.za/"&gt;Bettercare Courses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://examplesite.opensourcelearning.co.uk"&gt;Moodle reference site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization"&gt;moodle-local_webmonetization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/andrewhancox/interledgerphp"&gt;InterledgerPHP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>grantreports</category>
    </item>
    <item>
      <title>Building and using a Receipt Verifier Service</title>
      <dc:creator>Andrew Hancox</dc:creator>
      <pubDate>Wed, 15 Dec 2021 16:20:32 +0000</pubDate>
      <link>https://community.interledger.org/wmmoslp/building-and-using-a-receipt-verifier-service-100a</link>
      <guid>https://community.interledger.org/wmmoslp/building-and-using-a-receipt-verifier-service-100a</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In order to monetize a web-site it is likely that the publishers of the content will need to deny access to some or all content to users who are not working with a web-monetized browser.&lt;/p&gt;

&lt;p&gt;The concepts behind this are out-lined in the webmonetization documentation &lt;a href="https://webmonetization.org/docs/receipt-verifier"&gt;here&lt;/a&gt; and in the interledger specification &lt;a href="https://interledger.org/rfcs/0029-stream/"&gt;here&lt;/a&gt;, however the documenation is quite abstract and the examples are all based on JavaScript single page application so we felt it worth sharing our experience achieving the same goals with backend PHP in the stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detecting browser monetization
&lt;/h2&gt;

&lt;p&gt;You can see the javacript code in context over in GitHub &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization/blob/main/amd/src/handlereceipts.js"&gt;here&lt;/a&gt;.&lt;br&gt;
This file is an AMD module and the init function is run once the dom is fully loaded and Moodle core Javascript has been bootstrapped.&lt;/p&gt;

&lt;p&gt;The first thing the init function does is look to see if the document.monetization object exists, if it does not then it will re-driect the user to a page directing them instructions on setting up a webmonetized browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        init: function (requiremonetization, wantsurl) {
            if (document.monetization) {
                DO SOME STUFF
            } else if (requiremonetization) {
                var redirecturl = M.cfg.wwwroot + '/local/webmonetization/failed.php?contextid=' + M.cfg.contextid;
                window.location.href = redirecturl;
            }
        }
    };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the browser does support web monetization then it binds a function to the monetizationprogress event that sends the receipt to a web service for validation, if the receipt is valid then the user is allowed to continue, otherwise they are redirected to an interstitial page where the user will wait until a valid receipt is submitted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.monetization.addEventListener('monetizationprogress', event =&amp;gt; {
    var req = ajax.call([
        {
            methodname: 'local_webmonetization_handlereceipt', args: {
                receipt: event.detail.receipt,
                contextid: M.cfg.contextid
            }
        }
    ]);

    if (requiremonetization) {
        var redirecturl = M.cfg.wwwroot + '/local/webmonetization/interstitial.php?contextid=' + M.cfg.contextid;
        req[0].done(function (result) {
            if (result !== true) {
                window.location.href = redirecturl;
            } else if (wantsurl) {
                window.location.href = wantsurl;
            }
        }).fail(function () {
            window.location.href = redirecturl;
        });
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code for the web service can be found &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization/blob/main/classes/external.php"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$verifier = receiptverifier::get_receiptverifier();
$result = $verifier-&amp;gt;verify($receipt);

receiptverifier::set_lastsessionverificationresult($result);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see all it's doing is validating the receipt (more on this later...) and updating a property of the session that tracks the latest result. This gets checked before every page gets returned in the local_webmonetization_before_standard_html_head function contained in &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization/blob/main/lib.php"&gt;lib.php&lt;/a&gt; - if the user's most recent receipt failed to validate then the will get sent to an interstitial page to wait for a valid one, if their last page view detected that the browser is not web monetized then they will get sent to the page with instructions on how to proceed we mentioned earlier.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$forcepayment =
        !empty($paymentpointer-&amp;gt;get('forcepayment'))
        &amp;amp;&amp;amp;
        !has_capability('local/webmonetization:ignoreforcepayment', $PAGE-&amp;gt;context);

$lastverificationresult = receiptverifier::get_lastsessionverificationresult();
if (!$monetizationsetuppage &amp;amp;&amp;amp; $forcepayment &amp;amp;&amp;amp; !isset($lastverificationresult)) {
    redirect(new moodle_url('/local/webmonetization/interstitial.php', ['contextid' =&amp;gt; $PAGE-&amp;gt;context-&amp;gt;id]));
} else if (!$monetizationsetuppage &amp;amp;&amp;amp; $forcepayment &amp;amp;&amp;amp; $lastverificationresult == false) {
    redirect(new moodle_url('/local/webmonetization/failed.php', ['contextid' =&amp;gt; $PAGE-&amp;gt;context-&amp;gt;id]));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Building a local receipt verifier
&lt;/h2&gt;

&lt;p&gt;The reference implementation in the webmonetization documentation supplies a node application that will verify receipts however it has a few drawbacks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Privacy or deployment issues as it requires you to either deploy an additional web application or proxy all of your webmonetization related webservice calls through a third party service&lt;/li&gt;
&lt;li&gt;Scaling issues as it adds additional webservice calls to various parts of the process and so increases latency, bandwidth etc. on something that will be happening every few seconds for every active user on your site&lt;/li&gt;
&lt;li&gt;Functionality compromises as it does not surface all of the information contained within the reciept, e.g. amount transferred&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to avoid these limitations we have provided a receipt verifier within the Moodle plugin.&lt;/p&gt;

&lt;p&gt;There are two components to this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The proxy that sits in front of the payment pointer &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization/blob/main/handlers/receiptverifierproxy.php"&gt;proxy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization/blob/main/classes/receiptverifier.php"&gt;receipt verifier&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The proxy
&lt;/h3&gt;

&lt;p&gt;The job of the proxy is to generate a nonce and secret and then add them to the request headers of the call to the payment pointer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$rawnonce = $receipthandler-&amp;gt;generate_receipt_nonce();
$nonce = base64_encode($rawnonce);
$secret = base64_encode($receipthandler-&amp;gt;generate_receipt_secret($rawnonce));
$webmonetizationid = $_SERVER['HTTP_WEB_MONETIZATION_ID'];

$curl = new curl();
$headers = [
        'accept: application/spsp4+json',
        'content-type: application/spsp4+json',
        "Web-Monetization-Id: $webmonetizationid",
        "Receipt-Nonce: $nonce",
        "Receipt-Secret: $secret"
];

$curl-&amp;gt;setHeader($headers);

$result = $curl-&amp;gt;get($paymentpointer);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does this using the InterledgerPHP library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public function generate_receipt_nonce(): string {
    return random_bytes(16);
}

public function generate_receipt_secret(string $nonce): string {
    $keygen = hash_hmac('sha256', utf8_encode(self::RECEIPT_SECRET_GENERATION_STRING), $this-&amp;gt;receiptseed, true);
    return hash_hmac('sha256', $nonce, base64_encode($keygen), true);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The receipt verifier
&lt;/h3&gt;

&lt;p&gt;Ealier on we described JavaScript code that registers an event handler to catch the monetizationprogress event that is fired by the browser and forward the receipt the browser plugin supplies to a web service for validation. It is here that the &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization/blob/main/classes/receiptverifier.php"&gt;receipt verifier&lt;/a&gt; gets used.&lt;/p&gt;

&lt;p&gt;The first important thing is does is use the InterledgerPHP library to parse the receipt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$receipt = $receipthandler-&amp;gt;parse_receipt($binreceipt);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The receipt is a binary blob that requires some relatively complex parsing as seen below - due to the potential volume of requests a response format such as JSON would create too much overhead.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$arrayofbytes = str_split($binaryreceipt);

if (count($arrayofbytes) !== 58) {
    throw new receiptexception('incorrect size');
}

$arrayofbinarybytes = [];
foreach ($arrayofbytes as $byte) {
    $arrayofbinarybytes[] = sprintf("%08b", ord($byte));
}

$version = bindec(array_slice($arrayofbinarybytes, 0, 1)[0]);

if ($version !== 1) {
    throw new receiptexception('unsupported receipt version');
}

$receipt = new receipt();
$receipt-&amp;gt;nonce = implode('', array_slice($arrayofbytes, 1, 16));
$receipt-&amp;gt;streamid = bindec(array_slice($arrayofbinarybytes, 17, 1)[0]);
$receipt-&amp;gt;totalreceived = bindec(implode('', array_slice($arrayofbinarybytes, 18, 8)));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next step is to validate the receipt, since it was generated by the browser it could have been spoofed so we need to ensure that it corresponds to an actual open payment stream. The receipt consists of two parts, the first portion is the body, the second portion is a hash of the body created using the secret we shared with the system that runs our payment pointer (and the user's browser is unaware of). We can validate the receipt by calculating our own hash of the receipt's body with the share secret and confirming it matches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$arrayofbytes = str_split($binaryreceipt);

$arrayofbinarybytes = [];
foreach ($arrayofbytes as $byte) {
    $arrayofbinarybytes[] = sprintf("%08b", ord($byte));
}

$nonce = implode('', array_slice($arrayofbytes, 1, 16));
$receiptbody = implode('', array_slice($arrayofbytes, 0, 26));
$receipthmac = implode('', array_slice($arrayofbytes, 26, 32));

$receiptsecret = $this-&amp;gt;generate_receipt_secret($nonce);

$calculatedhmac = hash_hmac('sha256', $receiptbody, $receiptsecret, true);

if ($receipthmac != $calculatedhmac) {
    return false;
}

return true;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Thanks for reading!
&lt;/h3&gt;

&lt;p&gt;Building this element of the project was by far the most complicated aspect and we really hope this documentation will save other some time.&lt;/p&gt;

</description>
      <category>interledger</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Web Monetization for Moodle — Grant Report #1</title>
      <dc:creator>Andrew Hancox</dc:creator>
      <pubDate>Tue, 09 Feb 2021 16:18:42 +0000</pubDate>
      <link>https://community.interledger.org/wmmoslp/web-monetization-for-moodle-grant-report-1-45e3</link>
      <guid>https://community.interledger.org/wmmoslp/web-monetization-for-moodle-grant-report-1-45e3</guid>
      <description>&lt;p&gt;&lt;a href="https://community.interledger.org/images/mrTwQGBMJsie1QeykfggSBZhzu2FWhgasjOMfWmhwJ4/w:880/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkuaW50ZXJs/ZWRnZXIub3JnL3Jl/bW90ZWltYWdlcy9p/L25tZGlrNG1nOHZt/cDN4emhvcDYzLnBu/Zw" class="article-body-image-wrapper"&gt;&lt;img src="https://community.interledger.org/images/mrTwQGBMJsie1QeykfggSBZhzu2FWhgasjOMfWmhwJ4/w:880/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkuaW50ZXJs/ZWRnZXIub3JnL3Jl/bW90ZWltYWdlcy9p/L25tZGlrNG1nOHZt/cDN4emhvcDYzLnBu/Zw" alt="Hello World" width="880" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Update
&lt;/h2&gt;

&lt;p&gt;The focus for us to date has been to get an understanding of the web-monetization protocols and standards, their use-cases, use the tool for ourselves and built a basic proof of concept within Moodle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Progress on objectives
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Plugins
&lt;/h3&gt;

&lt;p&gt;The first objective of the project is to build the plugins that will enable web monetisation within Moodle. We have built a basic Moodle plugin to manage 'monetization' meta tags across a Moodle site that is now available on &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization"&gt;GitHub&lt;/a&gt;&lt;br&gt;
The next step for this plugin is to implement a receipt verifier so users can be prevented from viewing monetised content unless they have a Web Monetization agent present and enabled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference site
&lt;/h3&gt;

&lt;p&gt;As the use cases for web monetization within Moodle become clearer the plan for the reference site is evolving... Watch this space! In the mean time the plugin is installed and working on the &lt;a href="https://examplesite.opensourcelearning.co.uk"&gt;OSL Example site&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Partnerships
&lt;/h3&gt;

&lt;p&gt;We are in the early stages of talking to a few organisations and looking at how they could use the web monetization tools within Moodle to generate income from their content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Communications and marketing
&lt;/h2&gt;

&lt;p&gt;The grand plans for conference presentations are on hold right now for obvious reasons but we're really excited about this project and have been pushing awareness across a number of channels including LinkedIn, Twitter, &lt;a href="https://www.reddit.com/r/moodle/comments/j6nav3/moodle_and_web_monetization/"&gt;Reddit&lt;/a&gt;, the &lt;a href="https://moodle.org/mod/forum/discuss.php?d=411797"&gt;Moodle forums&lt;/a&gt;.&lt;br&gt;
Expect to see a lot more noise when the plugins are completed (support receipt verification) and a reference site is launched.&lt;/p&gt;

&lt;p&gt;The most exciting pieces of publicity are expected to come out of two developing partnerships which should really show the potential of this platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next?
&lt;/h2&gt;

&lt;p&gt;The key next steps are:&lt;br&gt;
Finish building the plugins:&lt;br&gt;
    implement a receipt verifier&lt;br&gt;
    create a counter block&lt;/p&gt;

&lt;p&gt;Build and launch a reference site&lt;/p&gt;

&lt;p&gt;Engage with a partner to deliver a chunk of real world, web monetized, learning content&lt;/p&gt;

&lt;p&gt;Generate buzz around all the above...&lt;/p&gt;

&lt;h2&gt;
  
  
  What community support would benefit your project?
&lt;/h2&gt;

&lt;p&gt;A plugin for any content delivery platform is only as good as the content it's used for. Please reach out if you need help building, hosting or monetising e-learning content.&lt;/p&gt;

</description>
      <category>grantreports</category>
    </item>
    <item>
      <title>Hello world</title>
      <dc:creator>Andrew Hancox</dc:creator>
      <pubDate>Tue, 26 Jan 2021 14:28:33 +0000</pubDate>
      <link>https://community.interledger.org/wmmoslp/hello-world-2oeg</link>
      <guid>https://community.interledger.org/wmmoslp/hello-world-2oeg</guid>
      <description>&lt;p&gt;It's been a really interesting few days immersing myself in the Web Monetization specification and documentation. Having been building traditional e-commerce solutions for 15 years culminating in recently launching &lt;a href="https://www.opensourcelearning.co.uk/moodleecommerce"&gt;my own product&lt;/a&gt; I had to revisit a few pretty fundamental assumptions about how things should work - more on that in my next post.&lt;/p&gt;

&lt;p&gt;I've always believed that the best way to learn any technology is to get hands on and build so I have gone straight ahead and built a basic but usable &lt;a href="https://moodle.org"&gt;Moodle&lt;/a&gt; plugin up and pushed it to &lt;a href="https://github.com/andrewhancox/moodle-local_webmonetization"&gt;GitHub&lt;/a&gt;. As you can see from the todo list there are a lot of very obvious next steps I'll be working through in the immediate future.&lt;/p&gt;

</description>
      <category>lms</category>
      <category>getstarted</category>
      <category>education</category>
      <category>moodle</category>
    </item>
    <item>
      <title>Cracking on</title>
      <dc:creator>Andrew Hancox</dc:creator>
      <pubDate>Thu, 21 Jan 2021 10:48:29 +0000</pubDate>
      <link>https://community.interledger.org/wmmoslp/cracking-on-3bk1</link>
      <guid>https://community.interledger.org/wmmoslp/cracking-on-3bk1</guid>
      <description>&lt;p&gt;It's been an interesting three months at Open Source Learning, having got over the excitement of winning a grant the focus was on clearing the decks in order to start work culminating in a few new client sites and two product launches:&lt;br&gt;
&lt;a href="https://www.opensourcelearning.co.uk/moodleecommerce"&gt;ECommerce&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.opensourcelearning.co.uk/moodleversioncontrol"&gt;Version Control&lt;/a&gt;&lt;br&gt;
At this point the twin forces of the pandemic and Christmas derailed things further but with business as usual work under control and having hit our stride with home schooling we're now excited to get down to business.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
