Windows商店应用内购接入
2015-12-10 11:16
537 查看
windows APP 和winPhone APP 接入,所用API是一样的,只是手动设置有所不同,
1、配置应用信息
可以将项目和应用商店关联,这样VS会自动下载所需信息;也可以手动设置(用别人账号╮(╯▽╰)╭)
winPhone设置Package.appxmanifest中:
Windows设置Package.appxmanifest中:
其中 Identity Name是包名称,也是发行商的名字;Publisher是发行商Id;PhoneProductId是appid;PhonePublisher同Publisher,这些都在开发者应用管理中可以查到。
2、请求购买
用RequestProductPurchaseAsync请求购买,product_id_rt 是配置的IAP ID,当请求成功的时候会跳转到微软的支付,完成支付后result中Status为Success,这时将result中的收据ReceiptXml和交易idTransactionId发送给服务器,让无服务进行验证。
3、验证收据
.net服务器参考: https://msdn.microsoft.com/zh-cn/library/windows/apps/mt219692.aspx
其他服务器参考:http://www.scriptscoop.net/t/80d51c864ba8/verify-iap-receipt-from-windows-store-using-ruby.html
服务器验证成功后要告诉客户端验证成功,客户端收到信息后再想报告交易完成。
4、报告交易完成
在服务器确认购买成功后要想商店报告购买成功,否则这件商品不能再次购买。
有可能在交易完成时,断网导致支付验证未完成,所以在游戏启动时,应当验证是否有未完成订单,通过GetUnfulfilledConsumablesAsync请求信息,再通过GetProductReceiptAsync得到收据信息进行验证。
1、配置应用信息
可以将项目和应用商店关联,这样VS会自动下载所需信息;也可以手动设置(用别人账号╮(╯▽╰)╭)
winPhone设置Package.appxmanifest中:
Windows设置Package.appxmanifest中:
其中 Identity Name是包名称,也是发行商的名字;Publisher是发行商Id;PhoneProductId是appid;PhonePublisher同Publisher,这些都在开发者应用管理中可以查到。
2、请求购买
create_task(CurrentApp::RequestProductPurchaseAsync(product_id_rt)) .then([=](task<PurchaseResults^> currentTask) { try { auto result = currentTask.get(); switch (result->Status) { case ProductPurchaseStatus::NotFulfilled:
<span style="white-space:pre"> </span>//未完成上次交易 break; case ProductPurchaseStatus::NotPurchased:
break; case ProductPurchaseStatus::AlreadyPurchased: case ProductPurchaseStatus::Succeeded: { } break; } } catch (Platform::Exception^ exception) { } }); }
用RequestProductPurchaseAsync请求购买,product_id_rt 是配置的IAP ID,当请求成功的时候会跳转到微软的支付,完成支付后result中Status为Success,这时将result中的收据ReceiptXml和交易idTransactionId发送给服务器,让无服务进行验证。
3、验证收据
.net服务器参考: https://msdn.microsoft.com/zh-cn/library/windows/apps/mt219692.aspx
其他服务器参考:http://www.scriptscoop.net/t/80d51c864ba8/verify-iap-receipt-from-windows-store-using-ruby.html
服务器验证成功后要告诉客户端验证成功,客户端收到信息后再想报告交易完成。
4、报告交易完成
在服务器确认购买成功后要想商店报告购买成功,否则这件商品不能再次购买。
create_task(CurrentApp::ReportConsumableFulfillmentAsync(ProductId, TransactionId)) .then([product_id](task<FulfillmentResult> currentTask) { auto fulfill_result = currentTask.get(); switch (fulfill_result) { case FulfillmentResult::Succeeded: LOG(L"fulfillment succeeded!\r\n"); break; default: LOG(L"fulfillment failed!\r\n"); break; } });5、检查未完成购买
有可能在交易完成时,断网导致支付验证未完成,所以在游戏启动时,应当验证是否有未完成订单,通过GetUnfulfilledConsumablesAsync请求信息,再通过GetProductReceiptAsync得到收据信息进行验证。
相关文章推荐
- Android屏幕分辨率
- Android中多进程方式导致的全局Application的OnCreate多次被调用
- 泛型中的类型擦除和桥方法
- 表格,合并单元格colspan,rowspan
- java文件copy,fileutils工具包和缓存流
- nodejs-模块
- 排序算法之快速排序
- Mac 应用开发 window 显示的样式
- xampp apache port 更改
- ubuntu报错: the‘webob>=1.2’distribution was not found
- 【SSH项目实战】国税协同平台-33.quartz&SimpleTrigge
- 【SSH项目实战】国税协同平台-34.quartz&CronTrigger
- iOS开发经验积累 二
- JPA注解说明
- php apc
- DB2常用函数详解(一):字符串函数
- .tar.bz2文件解压命令
- SDK目录结构
- Android开发中优秀的app 异常处理机制
- 10008---MySql 数据导入导出