×
Namespaces

Variants
Actions

Archived:程序内支付功能--Qt解决方案

From Nokia Developer Wiki
Jump to: navigation, search

这篇文章提供一个快速的步骤,关于如何使用In-APP Purchasing API 为QT程序添加程序内支付功能

Archived.png存档: 这篇文章是存档,因为考虑到今天它与第三方开发者建立商业解决方案不相关。

Many of the links broken, which means this article has little value.

Contents

Introduction

本文翻译自File:InAppPurchase QuickStartForQt.zip

使用程序内支付,你可以在你的程序中出售虚拟物品和服务。你可以:

  • 出售附加物品,级别,虚拟货物,来增强你的应用的互动性,延长应用的生命周期。
  • 把原来免费的应用转换成试用后购买的模式。
  • 提供流畅的信用卡和运营商支付的流程给消费者。
  • 利用Nokia在190多个国家,集成的110多家运营商的付费功能。
  • 通过几个简单的API调用实现支付,无需担心支付流程。
  • 享有高额的回报,提成和返点与Nokia商店内容相同。

关于这个简介

完整的文档请参见以下站点: <removed broken link> 这里提供了一下领域更详细的内容:

  • 设计--如何为不同的应用类型设计不同的程序内支付流程
  • 示例代码--示例代码的结构,以及如何调用的API
  • API参考资料--程序内支付的函数调用,及错误代码
  • 其他API--Content Access Framework API用来访问加密的物品,Purchase Ticket Verification API用在后端服务器以验证物品已出售。

这篇简介提供一个基本的信息,关于各部分如何工作,及完整的程序内支付的相关信息文档的链接。请参阅这些Nokia开发者资源获得更多细节。

第一部分:工作原理

消费者如何购买物品?

消费者不用离开你的应用,你的应用可以简单的显示出在售商品。当消费者购买是,你的应用向Nokia商店发支付请求,如下面的流程: IAP1.PNG
根据消费者所在的国家,和他使用的运营商,他们可以通过运营商支付(例如上图)或使用实现在Nokia商店注册的信用卡账号。消费者受到确认邮件,以及一些运营商提供短信告知。


购买的物品如何交付?

出售的物品可以:

  • 预先包含在应用中,随应用下载到手机上。在消费者购买后解锁。例如游戏的关卡和试用后购买模式。
  • 在后端服务器上。从服务器向手机传送。例如地图应用中某城市指南信息或一次性的报纸订阅。

这两种情况都由Nokia商店来处理支付流程。你使用Nokia Publish的门户网站来指定程序内发售的物品,提供介绍图文描述,设定价格。

出售的物品如何保护?

你需要在未注册的版本中保护未售的物品以防止收入流失。如果你在自己的服务器发布你的程序内支付物品,你可自己实现一些保护机制。如果你使用随程序发布支付物品,Nokia可以提供OMA DRM 2.0保护。OMA DRM 2.0是由OpenMobile 开发的数字授权管理技术,旨在控制发布,用于数字媒体。

Nokia 如何在程序内支付物品上运用DRM?

你提交包含支付物品的应用到Nokia Publish后,Nokia Publish解开安装包,使用OMA DRM 2.0加密预先定义在工程文件夹中的资源文件,根据需要签名文件,然后重新打包发布,你可以加密资源文件和核心资源文件,例如,你有一个游戏,前两关在游戏在初始销售,后面的关卡需要额外支付。每一关的资源文件(数据,图片文件)可单独使用OMA DRM 2.0加密。

Nokia 设备如何运用DRM来避免没有认证的使用?

IAP2.PNG

  1. 消费者 -- 从Nokia商店下载你的应用
  2. Nokia商店 -- 如果应用不免费,则进行支付流程,然后发送应用
  3. 消费者手机,DRM代理 -- 收到支付确认,获取加密核心文件的访问权限
  4. 证书密钥管理器 -- 认证设备,然后发送加密核心文件的访问权限
  5. 消费者手机,DRM代理 -- 注册访问权限
  6. 消费者 -- 使用应用,解密核心文件前调用DRM代理检查访问权限
  7. 消费者 -- 做一次程序内支付
  8. Nokia 商店 -- 进行支付流程
  9. 消费者手机,DRM代理 -- 收到支付确认,获得加密的支付物品文件的权限
  10. 证书密钥管理器 -- 认证设备,然后发送加密支付物品文件的访问权限
  11. 消费者手机,DRM代理 -- 注册访问权限
  12. 消费者 -- 使用程序内支付,解密程序内支付文件前调用DRM代理检查访问权限

程序端到端的流程是怎样的?

你的程序流程取决于你的程序内支付物品包含在你的应用中或在后端服务器。 如果你在程序中包含待售物品,流程是这样的:
IAP3.PNG
如果你在后端服务器提供待售物品,流程是这样的:
IAP4.PNG

发布应用的端到端的流程是怎样的?

在Nokia Publish([publish.ovi.com]),需要一些额外的步骤 - 下面绿色高亮的部分 - 来执行程序内支付。 IAP5.PNG
使用Nokia Publish提供的程序内支付的ID来标定你程序中的物品。


第二部分:使用方法

流程备忘录

步骤 描述 更多信息...
选择保护和交付的方法 决定交付程序内支付物品的方式,如果你:
  • 在你的应用中包含待售物品,你应使用Nokia Publish对未认证版本中的待售物品进行DRM保护
  • 在服务器后端发送待售物品,你必须自己提供保护措施交付方式影响你的程序流程
参看 程序端到端的流程是怎样的?
申请Nokia的免费签名服务
(可申请范围内)
接下来,运用我们的免费签名服务。你提交应用到Nokia Publish后我们解开你的应用,改变一些文件,对需要的文件运用DRM保护。签名应用。在你测试的时候你可以用我们提供的针对你的IMEI号设备的证书签名,然后在你的设备上安装测试。 http://www.developer.nokia.com/Distribute/Packaging_and_signing.xhtml
标定程序内支付物品 因为所有程序内支付物品的支付流程都由Nokia商店处理,你必须标定 待售物品,并设定价格数。Nokia Publish提供程序内ID来唯一标识每个物品 参看 标定 程序内支付物品
设置开发环境 使用程序内支付,你必须在你工程的私有文件夹的设置文件 参看 设置开发环境
复查Nokia商店内容指导原则 应用提交Nokia Publish,我们对特定的内容检查,看是否满足技术要求避免测试失败,以减少你的发布时间,设计你的应用前请回顾这些原则。 http://support.publish.ovi.com/?p=64
编写程序内支付的代码 使用程序内支付API来获得待售物品的媒质信息.初始化支付获得当前设备,用户的信息;从备份恢复已购物品。 参看 编写程序内支付相关的代码
编写DRM访问代码
(在可以运用范围内)
如果你通过Nokia Publish运用DRM,使用Content AccessFramework (CAF) API 来访问DRM加密的文件。 参看 编写DRM调用的代码
编写支付验证代码
(在可以运用范围内)
如果你用后端服务器发布待售物品,在发送物品到手机前,使用Purchase Ticket Verification (PTV) API 来确认物品成功支付 <removed broken link>
编译和打包应用 使用程序内支付,需要再你的Qt .pro文件中定义相关的依赖。使用Qt Smart Installer打包你的应用 参看 编译打包应用
测试应用 广泛测试你的应用,购买每个可能的物品,使用所有可能的流程。你可以使用测试模式避免真实支付。 <removed broken link>
上传应用 使用Nokia Publish (publish.ovi.com)来提交你的应用。因为我们提供了签名,请提交一个未签名的应用。 参看 发布应用

标定 程序内支付物品

1. 登陆Nokia Publish  : http://info.publish.ovi.com/
2. 创建一个新的基于Qt的应用程序。你不能给已经存在的内容物品添加程序内支付功能。
3. 在内容物品的内部名称中添加IAP字样,但不需要在外部显示名中添加。
4. 点选程序内支付物品选择框(如果Nokia Publish没有显示这个选项,你的账号没有设置调用权限,查看后面的获取帮助章节看如何申请调用)
IAP6.PNG
5. 提供所有其他媒质信息。然后点创建
6. 点程序内支付选项卡。为第一个程序内支付物品提供名字,描述,和价格点数。一旦在第8步提交了这些信息,将可以通过程序内支付API,在Nokia商店中公开访问。为防止信息泄露,提供临时描述以供测试,在准备好发布应用时再使用真实信息。你可以设置较低的全球价格点数,来减少测试花销。
IAP7.PNG
7. 点创建
8. 点增加程序内支付来提供所有其他程序内支付物品的信息。Nokia Publish为每个待售物品分配一个ID,用这个ID在你的应用中标识物品。
IAP8.PNG
9. 点提交。上传媒质信息到Nokia商店,你可以在线地测试使用Nokia商店服务器获取媒质信息,进行一次支付。之后可以随需要编辑媒质信息。

设置开发环境

设置你的程序的私有文件夹

这个文件夹包含的文件不能被其他程序访问。当你的程序访问文件时,默认从这个文件夹开始:

<drive>:\private\<UID>\

<drive>是开发盘符(例如C:或D:), <UID>是你的程序包的全局唯一标识,8位16进制数,不以0x开头。 对程序内支付,你需要在私有文件夹中设置以下两个文件:

  1. IAP_VARIANTID.txt -- 包含00000(6个0)的文件,这是程序内支付API所要求的。当你向Nokia Publish提交你的应用时,Nokia Publish将访问DRM所需的数据填入IAP_VARIANTID.txt中。
  2. TEST_MODE.txt -- 用于模拟支付,绕过真实交易。真实支付时移除这个文件。使用这个文件做测试的细节请参阅:

<removed broken link>

设置DRM保护

Nokia Publish可用DRM加密核心资源和程序内支付资源。你的程序结构需要支持访问外部文件,例如游戏关卡的数据和图像。将这些文件存储在以下文件夹:
<drive>:\private\<UID>\drm\data\ — 用来加密付费应用核心资源文件
<drive>:\private\<UID>\drm\data\resourceid_XXXXXX\ — 用来加密程序内支付相关的资源文件
XXXXXX 是6位程序内ID,在你标定程序内支付物品时由Nokia Publish提供的数字。一个子文件夹的例子:

D:\private\ef80c1a8\data\resourceid_593032. 当你提交应用后,Nokia Publish 将加密这些文件夹中的文件。


编写程序内支付相关的代码

通过程序内支付API,你可以向Nokia商店发送以下请求:

  • 获取程序内支付物品的名字,描述和价格点数
  • 触发一个支付;如果物品受DRM保护,则同时触发DRM证书请求,以访问加密文件
  • 获取一个已支付的物品,恢复到一个设备上,例如,消费者换了一台新手机
  • 获取当前用户和设备的信息,检查是否有权恢复之前购买的物品
  • 恢复之前购买的物品

开始的最好方法是研究一些示例代码。程序内支付API包含两个示例应用,存放在\Example目录下:

  • TryAndBuyExample -- 这个游戏提供10个关卡。1,2关免费,余下关卡支持程序内支付。需要支付的关卡用DRM保护,应用程序访问通过Content Access Framework (CAF) API。
  • BuyAndDownloadExample -- 这是个书店应用程序,从后端服务器下载书籍。

如果你没有得到API包,你可以看些TryAndBuyExample 的代码片段:
<removed broken link>
代码片段显示你可以如何:

  • 设置程序的结构
  • 从包含程序内支付资源文件的子文件夹名中读取ID
  • 调用程序内支付API的方法向Nokia商店发请求
  • 处理Nokia商店的异步返回

要查看程序内支付API的方法的文档,参数,错误返回值等信息,请到:
<removed broken link>

编写DRM调用的代码

要访问受DRM保护的文件,你的应用需要使用Content Access Framework (CAF) API,这个API使用手机上的DRM代理检查访问权限,然后解密受保护的文件。要了解 CAF API的背景信息,请到:

一些示例代码,演示如何使用CAF API访问受保护的文件,请到:
<removed broken link>

编译打包应用

如果你是Qt SDK新手,请查看如何设置Qt开发环境,编译应用,为提供下载打包。Qt文档在:
http://doc.qt.nokia.com/

编译构建程序

在Qt的.pro文件中,定义一下依赖和需求:

# IAP API library
LIBS += -liapclientapi.lib -lusrt2_2.lib
# IAP API dependency
MOBILITY = serviceframework
# IAP API required capabilities
TARGET.CAPABILITY += NetworkServices WriteDeviceData WriteUserData ReadUserData ReadDeviceData
# IAP API dependency
symbian: {
iap_dependency.pkg_prerules = \
"; Has dependency on IAP component" \
"(0x200345C8), 0, 1, 1, {\"IAP\"}"
DEPLOYMENT += iap_dependency
}

其中-lusrt2_2.lib 提供 RVCT (ARM RealView 编译工具) version 2.2 适合GCCE编译. 同时制定下载到手机中的安装包要包含的文件:

# free, unprotected data files are in the root folder
addFreeFiles.sources = ./car1.dat \
./course1.dat
# data files to be DRM-encrypted are under /drm/data
addDrmFiles01.sources = ./drm/data/resourceid_593032/turbo_engine.dat
addDrmFiles01.path = ./drm/data/resourceid_593032/
addDrmFiles02.sources = ./drm/data/resourceid_593030/mag_wheels.dat
addDrmFiles02.path = ./drm/data/resourceid_593030/
addDrmFiles03.sources = ./drm/data/resourceid_593029/nitrous_oxide.dat
addDrmFiles03.path = ./drm/data/resourceid_593029
# other files
addConfigFiles.sources = ./data/IAP_VARIANTID.txt #./data/TEST_MODE.txt
addConfigFiles.path = .

打包应用

不恰当的打包Qt应用,常常造成提交Nokia Publish后不能通过测试,要节约你的产品上市时间,注意以下事项:

发布应用

  1. 在Nokia Publish,打开内容物品
  2. 点内容文件选项卡。
    IAP9.PNG
  3. 下面的域:
    • AppUID -- 填入Qt应用程序exe文件中的UID。如果.sis(x)文件中有多个UID,确保填写了正确的UID,参看http://support.publish.ovi.com/wp-content/uploads/2011/06/PreparingApps_for_AppUpdates.pdf,在应用程序相关规则下。如果你要求Nokia签名你的应用,这个UID必须是Nokia提供给你的。
    • Symbian签名类型 -- 选择申请Nokia签名。
    • 保护类型 -- 选择下列之一:
      • OMA DRM 2.0 -- 如果你保存程序内支付资源文件在\private\<UID>\drm\data\resourceid_xxxxxx文件夹,资源文件将自动加密,不受这个选择影响。这个选择针对核心资源文件做OMA DRM 2.0加密,核心资源文件保存在\private\<UID>\drm\data。(如果Nokia Publish没有显示OMA DRM 2.0选项,则你的账户没有设置好访问,请查看下面的获取帮助章节)注意:不要选择OMA Forward Lock。
      • None -- 当你不想使用Nokia提供的DRM时选择此项,如果你有自己的保护方法,或你从自己的后端服务器交付程序内支付的物品。
  4. 点上传&继续
  5. 在发行选项卡,设备选项卡,选择你的应用支持的设备。
  6. 在国家选项卡,勾选全球来选择所有国家。(如果不选则可以在中国大陆以外的任何国家和运营商发行)
  7. 在语言选项卡,选择工作在所有语言
  8. 保存修改。
  9. 点击提交到QA

获得支持

如果你有使用的问题,请查看完整的程序内支付指南:
<removed broken link> 你也可以从inapppurchase@nokia.com获得支持。

Article Metadata
Tested withCompatibility
Platform(s): Symbian^3
Symbian
Article
Keywords: In-App Purchasing API (IAP)
Created: flycarl (23 Jul 2014)
Last edited: hamishwillee (21 Nov 2013)
This page was last modified on 21 November 2013, at 09:19.
1079 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×