一、苹果支付的逻辑如下
- 首先:客户端通过iOS IAP实现用户支付成功后得到一堆加密的数据(支付凭证)。
- 接着:客户端把 支付凭证 进行 base64之后传给服务端。
- 然后:后端将再 支付凭证 发去到苹果支付中心验证真实性,验证成功时苹果支付中心返回详情的订单信息,表示这次购买是否成功。服务器端对业务逻辑进行处理(增加应用内的金币等),并将支付结果返回客户端。
- 最后:客户端接收数据得知验证结果,更新用户界面。
二、Java代码实现
服务器端请求验证通过之后的数据应该类似于
{
environment = Sandbox;
receipt = {
"adam_id" = 0;
"app_item_id" = 0;
"application_version" = 201512181924;
"bundle_id" = "me.topit.awesome.t16.pk";
"download_id" = 0;
"in_app" = (
{
"is_trial_period" = false;
"original_purchase_date" = "2016-03-29 07:55:05 Etc/GMT";
"original_purchase_date_ms" = 1459238105000;
"original_purchase_date_pst" = "2016-03-29 00:55:05 America/Los_Angeles";
"original_transaction_id" = 1000000202075562;
"product_id" = "me.topit.sixteenpk.6";
"purchase_date" = "2016-03-29 07:55:05 Etc/GMT";
"purchase_date_ms" = 1459238105000;
"purchase_date_pst" = "2016-03-29 00:55:05 America/Los_Angeles";
quantity = 1;
"transaction_id" = 1000000202075562;
}
);
"original_application_version" = "1.0";
"original_purchase_date" = "2013-08-01 07:00:00 Etc/GMT";
"original_purchase_date_ms" = 1375340400000;
"original_purchase_date_pst" = "2013-08-01 00:00:00 America/Los_Angeles";
"receipt_creation_date" = "2016-03-29 07:55:06 Etc/GMT";
"receipt_creation_date_ms" = 1459238106000;
"receipt_creation_date_pst" = "2016-03-29 00:55:06 America/Los_Angeles";
"receipt_type" = ProductionSandbox;
"request_date" = "2016-03-29 07:55:08 Etc/GMT";
"request_date_ms" = 1459238108417;
"request_date_pst" = "2016-03-29 00:55:08 America/Los_Angeles";