主页 > imtoken钱包官方版下载 > 比特币支付协议

比特币支付协议

imtoken钱包官方版下载 2023-01-18 15:32:05

支付协议已被弃用,将在更高版本的 Bitcoin Core 中删除。该协议在某些钱包中存在多个安全设计缺陷和实施缺陷。使用 BIP70 URI 时,用户将在比特币核心版本 0.18 中开始收到弃用警告。商家应从 BIP70 过渡到更安全的选项,例如 BIP21。商家不应要求 BIP70 付款,而应提供 BIP21 后备。

Bitcoin Core0.9 支持新的支付协议。支付协议为支付请求添加了许多重要功能:

不再需要支付到诸如mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN之类的无意义地址,而是要求消费者支付来自收件人的X.509证书(CN)描述中的公共名称,例如。

要使用支付协议请求支付,请使用扩展(但向后兼容)比特币:URI。例如:

如何用比特币付款

1
2
3
4
5

bitcoin:mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN\
?amount=0.10\
&label=Example+Merchant\
&message=Order+of+flowers+%26+chocolates\
&r=https://example.com/pay/mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN

除了 r 之外,上面提供的参数都不是支付协议所必需的,但您的应用程序可能会包含它们以向后兼容尚未处理支付协议的钱包程序。

r 参数告诉支持该协议的钱包程序忽略其他参数并从提供的 URL 获取 PaymentRequest。浏览器、二维码阅读器或其他处理 URI 的程序会在 URI 上打开消费者的比特币钱包程序。

如何用比特币付款

BIP70付款协议

支付协议在BIP70、BIP71和BIP72中有详细描述。开发人员示例支付协议小节提供了示例 CGI 程序和可在支付协议中使用的所有参数的描述。在本小节中,我们将简要介绍故事格式如何使用支付协议。

客户 Charlie 在商人 Bob 经营的网站上购物。 Charlie 将一些商品添加到他的购物车,然后点击 Checkout With Bitcoin 按钮。

Bob 的服务器自动将以下信息添加到其采购数据库中:

如何用比特币付款

将所有信息添加到数据库后,Bob 的服务器会显示查询 pay-per-click 的比特币:URI。

查理在他的浏览器中点击了比特币:URI。他的浏览器的 URI 处理程序将 URI 发送到他的钱包程序。钱包知道支付协议,因此它会解析 r 参数并向该 URL 发送 HTTP GET 以查找 PaymentRequest 消息。

返回的 PaymentRequest 消息可能包含私人信息,例如 Charlie 的电子邮件地址,但钱包必须能够在不使用先前身份验证的情况下访问它,例如 HTTP cookie,因此通过猜测部分公开访问通常使用 HTTPS URL。为支付请求创建的唯一公钥可用于创建唯一标识符。这就是为什么在上面的示例 URI 中,PaymentRequest URL 包含 P2PKH 地址:

在收到对上述 URL 的 HTTP GET 后,Bob 的 Web 服务器上生成 PaymentRequest 的 CGI 程序从 URL 中获取唯一标识符,并在数据库中查找相应的详细信息。然后它会创建一个包含以下信息的 PaymentDetails 消息:

如何用比特币付款

PaymentDetails 消息放置在 PaymentRequest 消息中。支付请求允许 Bob 的服务器使用服务器的 X.509 SSL 证书对整个请求进行签名。 (支付协议的目的是允许将来使用其他签名方法。)Bob 的服务器向 Charlie 的钱包发送支付请求,作为对 HTTP GET 的回复。

比特币核心显示验证的付款请求

Charlie 的钱包收到 PaymentRequest 消息,检查其签名,然后将 PaymentDetails 消息中的详细信息显示给 Charlie。 Charlie 同意付款如何用比特币付款,因此钱包为 Bob 提供的服务器提供的 pubkey 脚本构建付款。与传统的比特币支付不同如何用比特币付款,查理的钱包不一定会自动将这笔支付广播到网络。相反,钱包会构造一条支付消息并将其作为 HTTP POST 发送到 PaymentDetails 消息中提供的 URL。除其他外,付款消息包含:

Bob 的服务器收到付款消息,验证交易是否将请求的金额支付到提供的地址,然后将交易广播到网络。它还使用带有 PaymentACK 消息的 HTTP POSTed Payment 消息进行回复,其中包括来自 Bob 的服务器的可选备忘录,感谢 Charlie 的赞助并提供有关订单的其他信息,例如预计到达日期。

如何用比特币付款

Charlie 的钱包看到 PaymentACK 并告诉 Charlie 付款已发送。 PaymentACK 并不意味着 Bob 已经验证了 Charlie 的付款,请参见下面的小节,但它确实意味着 Charlie 可以在交易被确认后做其他事情。在 Bob 的服务器从区块链验证 Charlie 的交易已正确确认后,它会授权发送 Charlie 的订单。

如果发生争议,Charlie 可以根据各种签名或其他经过验证的信息生成经过加密验证的收据。

如果需要退款,Bob 的服务器可以安全地将 Charlie 提供的退款支付给 pubkey 脚本。有关详细信息,请参阅下面的退款部分。

================================================ ==========================

分享一些区块链相关问题,如比特币、以太坊、EOS、Fabric等。交互式在线编程实战教程: