I seem to have somewhat stumbled my way through this; probably not in the most elegant of ways but it will do as a base unless someone else answers here.
Using the examples here -
How to add "Buy Now" button in Magento 2.1?
Magento 2 - Why do SKU not change dynamically in configurable product view page
I managed to pull together a couple modules that do what I need. At the moment this is across two different modules - i'll try and condense it into one and revise this answer with the final product.
The essential files are -
Configurable.php
<?php
namespace Vendor\Module\Plugin\Magento\ConfigurableProduct\Block\Product\View\Type;
class Configurable
{
public function afterGetJsonConfig(
\Magento\ConfigurableProduct\Block\Product\View\Type\Configurable $subject,
$result
) {
$jsonResult = json_decode($result, true);
$jsonResult['skus'] = [];
foreach ($subject->getAllowProducts() as $simpleProduct) {
$jsonResult['skus'][$simpleProduct->getId()] = $simpleProduct->getSku();
}
$result = json_encode($jsonResult);
return $result;
}
}
catalog_product_view_type_configurable.xml
<?xml version="1.0"?>
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="product.info.addtocart">
<block class="Magento\Framework\View\Element\Template" template="Vendor_Module::buynow.phtml"/>
</referenceBlock>
<referenceBlock name="product.info.addtocart.additional">
<block class="Magento\Framework\View\Element\Template" template="Vendor_Module::buynow.phtml"/>
</referenceBlock>
</body>
buynow.phtml
<button type="submit" title="<?php /* @escapeNotVerified */ echo __('Buy Now') ?>" id="buy-now" class="action buynow primary" data-mage-init='
{
"Vendor_Module/js/buy-now": {
"form": "#product_addtocart_form"
}
}
'>
<span><?php /* @escapeNotVerified */ echo __('Buy Now') ?></span>
</button>
buy-now.js
/*jshint browser:true jquery:true*/
/*global alert*/
define([
'jquery',
'mage/utils/wrapper'
], function ($, wrapper) {
'use strict';
return function(targetModule){
var reloadPrice = targetModule.prototype._reloadPrice;
var reloadPriceWrapper = wrapper.wrap(reloadPrice, function(original){
//do extra stuff
//call original method
var result = original();
//do extra stuff
var simpleSku = this.options.spConfig.skus[this.simpleProduct];
if( simpleSku != '' && simpleSku.indexOf('ADD PART OF SKU HERE') != -1 ) {
$('#product-addtocart-button').hide();
$('.field .label').hide();
$('.field .qty').hide();
$('div.product-info-main .sku .value').html(simpleSku);
$('#buy-now').show();
$('#buy-now').click(function() {
window.location.href = 'http://www.WEBSITETOLINKTO.com?sku=' +simpleSku;
return false;
});
console.log('this worked');
}
else {
$('.field .label').show();
$('.field .qty').show();
$('#product-addtocart-button').show();
$('#buy-now').hide();
}
//return original value
return result;
});
targetModule.prototype._reloadPrice = reloadPriceWrapper;
return targetModule;
};
});
So in essence one module adds the actual Buy Now button on the page, another gets the SKU from the configurable product and then does some javascript around checking this. Thanks to the answers linked above.
Should be able to combine these into one module.
Example screenshots -

