您已经投入大量精力构建了一个很棒的应用。如果您希望通过应用获利,Firefox 应用商店 支持应用收据和收据验证。
收据验证是我们在托管应用和打包应用的情况下确保您的应用已付费的方式。需要说明的是,我们不会限制从应用商店安装或分发应用。任何人都可以不受限制地安装它们,只是它们不会包含收据。
这意味着作为开发者,在您的应用中检查收据至关重要。这是确保付款已处理的唯一方法。
收据格式
收据基于 Web 应用收据规范。收据是一个包含购买信息的 JSON 对象。然后使用 JSON Web 令牌 规范对该 JSON 进行签名。
购买后安装应用时,收据会与应用一起安装。要检查是否已安装收据,您可以通过 mozApps
API 访问收据,例如
var request = window.navigator.mozApps.getSelf();
request.onsuccess = function(){
for (let k = 0; k < request.result.receipts.length; k++) {
let receipt = request.result.receipts[k];
console.log('Got receipt: ' + receipt);
}
}
解码并扩展收据后,它将类似于以下内容
{
"product": {
"url": "http://example.com",
"storedata": "id=111111"
},
"iss": "https://marketplace.firefox.com",
"verify": "https://receiptcheck.marketplace.firefox.com/verify/111111", // The verify URL
"detail": "https://marketplace.firefox.com/en-US/purchases/111111",
"reissue": "https://marketplace.firefox.com/en-US/app/example/purchase/reissue",
"user": {
"type": "directed-identifier",
"value": "1234-abcd99ef-a123-456b-bbbb-cccc11112222"
},
"exp": 1353028900,
"iat": 1337304100,
"typ": "purchase-receipt",
"nbf": 1337304100
}
收据验证器库
仅检查收据是否存在是不够的,还应执行一些检查
- 收据是否已正确签名且未被篡改
- 收据是否来自您认可的应用商店
- 收据是否适用于您的应用
您可以执行两个可选步骤
- 收据上的加密签名是否正确
- 收据在商店中是否仍然有效
最后两个步骤需要应用具有互联网访问权限才能调用服务器。
执行大多数这些检查的简单方法是使用 收据验证器库。包含它之后
var verifier = new mozmarket.receipts.Verifier({
// checks that the receipt is for your app.
productURL: 'http://example.com',
// only allow apps that came from the firefox marketplace.
installs_allowed_from: ['https://marketplace.firefox.com']
});
verifier.verify(function (verifier) {
if (verifier.state instanceof verifier.states.OK) {
// everything is good.
console.log('good');
} else {
// something went wrong.
console.log('wrong');
}
});
请参阅文档以获取 选项的完整列表。
收据验证器返回一个 状态对象,告诉您确切的错误。我们没有规定在这种情况下应用应该做什么,这完全留给开发者决定。例如,NetworkError
表示我们无法连接到验证服务器。这可能是或可能不是您的应用的致命条件。
收据验证器库还包含一个用于向用户显示错误的基本用户界面。它非常适合测试,但由于您的应用中的用户界面将有所不同,因此您可能希望以您自己的风格向用户显示消息。如果您包含 receiptverifier-ui.js
,则可以使用提示符,如下所示
mozmarket.receipts.Prompter({
storeURL: "https://marketplace.mozilla.org/app/myapp",
supportHTML: '<a href="mailto:me@example.com">email me@example.com</a>',
verify: true
});
如果在未安装收据的情况下运行应用,您将看到类似以下的消息
收据验证器库不会做的最后一件事是验证收据是否未在用户之间共享。这留给应用开发者实现:例如,可以使用 django-receipts 库。
获取帮助
如果您需要更多帮助,可以访问 邮件列表 或在 #marketplace 上的 IRC 频道寻求帮助。
关于 Robert Nyman [荣誉编辑]
技术布道师和 Mozilla Hacks 编辑。发表演讲并撰写关于 HTML5、JavaScript 和开放网络的博客文章。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直在从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发表博客文章,并且喜欢旅行和结识新朋友。
2 条评论