Lowercasing the protocol in QR code because it's not widely supported

https://github.com/btcpayserver/btcpayserver/issues/2099#issuecomment-738550565
This commit is contained in:
rockstardev 2020-12-03 23:39:18 -06:00
parent ec495ea4d1
commit 3ac257bfda
2 changed files with 10 additions and 7 deletions

View file

@ -2092,13 +2092,13 @@ namespace BTCPayServer.Tests
Assert.IsType<ViewResult>(res).Model
);
Assert.Contains("&lightning=", paymentMethodSecond.InvoiceBitcoinUrlQR);
Assert.StartsWith("BITCOIN:", paymentMethodSecond.InvoiceBitcoinUrlQR);
Assert.StartsWith("bitcoin:", paymentMethodSecond.InvoiceBitcoinUrlQR);
var split = paymentMethodSecond.InvoiceBitcoinUrlQR.Split('?')[0];
// Standard for uppercase Bech32 addresses in QR codes is still not implemented in all wallets
// When it is widely propagated consider uncommenting these lines
//Assert.True($"BITCOIN:{paymentMethodSecond.BtcAddress.ToUpperInvariant()}" == split);
Assert.True($"BITCOIN:{paymentMethodSecond.BtcAddress}" == split);
Assert.True($"bitcoin:{paymentMethodSecond.BtcAddress}" == split);
}
}

View file

@ -65,14 +65,17 @@ namespace BTCPayServer.Payments.Bitcoin
}
model.InvoiceBitcoinUrl = cryptoInfo.PaymentUrls.BIP21 + lightningFallback;
// We're trying to make as many characters uppercase to make QR smaller
// Ref: https://github.com/btcpayserver/btcpayserver/pull/2060#issuecomment-723828348
model.InvoiceBitcoinUrlQR = cryptoInfo.PaymentUrls.BIP21
.Replace("bitcoin:", "BITCOIN:", StringComparison.OrdinalIgnoreCase)
+ lightningFallback.ToUpperInvariant().Replace("LIGHTNING=", "lightning=", StringComparison.OrdinalIgnoreCase);
model.InvoiceBitcoinUrlQR = model.InvoiceBitcoinUrl;
// Standard for uppercase Bech32 addresses in QR codes is still not implemented in all wallets
// When it is widely propagated consider uncommenting these lines
// We're trying to make as many characters uppercase to make QR smaller
// Ref: https://github.com/btcpayserver/btcpayserver/pull/2060#issuecomment-723828348
//model.InvoiceBitcoinUrlQR = cryptoInfo.PaymentUrls.BIP21
// .Replace("bitcoin:", "BITCOIN:", StringComparison.OrdinalIgnoreCase)
// + lightningFallback.ToUpperInvariant().Replace("LIGHTNING=", "lightning=", StringComparison.OrdinalIgnoreCase);
//if (bech32Prefixes.Any(a => model.BtcAddress.StartsWith(a, StringComparison.OrdinalIgnoreCase)))
//{
// model.InvoiceBitcoinUrlQR = model.InvoiceBitcoinUrlQR.Replace(