苹果内购IAP

一.苹果内购流程

①先去苹果开发平台配好各种环境,比如银行卡,税号什么的

②ios客户端调用sdk,先去查你在后台配置的内购信息,查到如果有信息,就可以开始购买操作了

③付款成功后,苹果服务器会给你一个购买回执 (可以使用沙盒模式,回执要保存下来,以后主动请求数据使用)

④把回执传到自己的服务器,然后后台开发人员开发去请求苹果的服务器,返回购物信息

⑤拿到购买信息后,就可以在自己的平台为用户开通相应的权限了(使用latest_receipt_info里面的数据,in_app里面的数据不是最新的如果你的回执不是最新的话

⑥配置回调,自动续费会给你服务器回调数据(生产实测配了也不会给你回调,只能保存回执自己主动去请求了。。。

二.相关数据分析

 拿回执主动请求返回的数据

{
    "status": 0,
    "environment": "Sandbox",
    "receipt": {  //当前回执所对应的的购买记录
        "receipt_type": "ProductionSandbox",
        "adam_id": 0,
        "app_item_id": 0,
        "bundle_id": "com.sanvio.BusinessConverge",
        "application_version": "3",
        "download_id": 0,
        "version_external_identifier": 0,
        "receipt_creation_date": "2019-04-17 08:05:23 Etc/GMT",
        "receipt_creation_date_ms": "1555488323000",
        "receipt_creation_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
        "request_date": "2019-04-18 03:10:17 Etc/GMT",
        "request_date_ms": "1555557017655",
        "request_date_pst": "2019-04-17 20:10:17 America/Los_Angeles",
        "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",
        "original_application_version": "1.0",
        "in_app": [  //购买记录列表 数据不是实时的 一般不用 回执重复查询数据不更新
            {
                "quantity": "1",
                "product_id": "vip.01",
                "transaction_id": "1000000520098800",
                "original_transaction_id": "1000000520098800",
                "purchase_date": "2019-04-17 08:05:22 Etc/GMT",
                "purchase_date_ms": "1555488322000",
                "purchase_date_pst": "2019-04-17 01:05:22 America/Los_Angeles",
                "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
                "original_purchase_date_ms": "1555488323000",
                "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
                "expires_date": "2019-04-17 08:10:22 Etc/GMT",
                "expires_date_ms": "1555488622000",
                "expires_date_pst": "2019-04-17 01:10:22 America/Los_Angeles",
                "web_order_line_item_id": "1000000043895222",
                "is_trial_period": "false",
                "is_in_intro_offer_period": "false"
            }
        ]
    },
    "latest_receipt_info": [ //记录该appleid最新的续订记录,实时更新,
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520098800",
            "original_transaction_id": "1000000520098800", //跟着appleId走,用来标记用户
            "purchase_date": "2019-04-17 08:05:22 Etc/GMT",
            "purchase_date_ms": "1555488322000",//套餐购买毫秒值
            "purchase_date_pst": "2019-04-17 01:05:22 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-17 08:10:22 Etc/GMT",
            "expires_date_ms": "1555488622000",//套餐过期毫秒值
            "expires_date_pst": "2019-04-17 01:10:22 America/Los_Angeles",
            "web_order_line_item_id": "1000000043895222",//苹果那边的主键 唯一
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520102202",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-17 08:11:41 Etc/GMT",
            "purchase_date_ms": "1555488701000",
            "purchase_date_pst": "2019-04-17 01:11:41 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-17 08:16:41 Etc/GMT",
            "expires_date_ms": "1555489001000",
            "expires_date_pst": "2019-04-17 01:16:41 America/Los_Angeles",
            "web_order_line_item_id": "1000000043895223",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520103663",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-17 08:16:41 Etc/GMT",
            "purchase_date_ms": "1555489001000",
            "purchase_date_pst": "2019-04-17 01:16:41 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-17 08:21:41 Etc/GMT",
            "expires_date_ms": "1555489301000",
            "expires_date_pst": "2019-04-17 01:21:41 America/Los_Angeles",
            "web_order_line_item_id": "1000000043895386",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520106671",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-17 08:22:00 Etc/GMT",
            "purchase_date_ms": "1555489320000",
            "purchase_date_pst": "2019-04-17 01:22:00 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-17 08:27:00 Etc/GMT",
            "expires_date_ms": "1555489620000",
            "expires_date_pst": "2019-04-17 01:27:00 America/Los_Angeles",
            "web_order_line_item_id": "1000000043895522",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520109596",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-17 08:27:00 Etc/GMT",
            "purchase_date_ms": "1555489620000",
            "purchase_date_pst": "2019-04-17 01:27:00 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-17 08:32:00 Etc/GMT",
            "expires_date_ms": "1555489920000",
            "expires_date_pst": "2019-04-17 01:32:00 America/Los_Angeles",
            "web_order_line_item_id": "1000000043895729",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520112763",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-17 08:32:27 Etc/GMT",
            "purchase_date_ms": "1555489947000",
            "purchase_date_pst": "2019-04-17 01:32:27 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-17 08:37:27 Etc/GMT",
            "expires_date_ms": "1555490247000",
            "expires_date_pst": "2019-04-17 01:37:27 America/Los_Angeles",
            "web_order_line_item_id": "1000000043895898",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520440245",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-18 01:44:55 Etc/GMT",
            "purchase_date_ms": "1555551895000",
            "purchase_date_pst": "2019-04-17 18:44:55 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-18 01:49:55 Etc/GMT",
            "expires_date_ms": "1555552195000",
            "expires_date_pst": "2019-04-17 18:49:55 America/Los_Angeles",
            "web_order_line_item_id": "1000000043896090",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520440887",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-18 01:49:55 Etc/GMT",
            "purchase_date_ms": "1555552195000",
            "purchase_date_pst": "2019-04-17 18:49:55 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-18 01:54:55 Etc/GMT",
            "expires_date_ms": "1555552495000",
            "expires_date_pst": "2019-04-17 18:54:55 America/Los_Angeles",
            "web_order_line_item_id": "1000000043917890",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520441645",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-18 01:54:55 Etc/GMT",
            "purchase_date_ms": "1555552495000",
            "purchase_date_pst": "2019-04-17 18:54:55 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-18 01:59:55 Etc/GMT",
            "expires_date_ms": "1555552795000",
            "expires_date_pst": "2019-04-17 18:59:55 America/Los_Angeles",
            "web_order_line_item_id": "1000000043917927",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520442138",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-18 01:59:55 Etc/GMT",
            "purchase_date_ms": "1555552795000",
            "purchase_date_pst": "2019-04-17 18:59:55 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-18 02:04:55 Etc/GMT",
            "expires_date_ms": "1555553095000",
            "expires_date_pst": "2019-04-17 19:04:55 America/Los_Angeles",
            "web_order_line_item_id": "1000000043917995",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520443367",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-18 02:04:55 Etc/GMT",
            "purchase_date_ms": "1555553095000",
            "purchase_date_pst": "2019-04-17 19:04:55 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-18 02:09:55 Etc/GMT",
            "expires_date_ms": "1555553395000",
            "expires_date_pst": "2019-04-17 19:09:55 America/Los_Angeles",
            "web_order_line_item_id": "1000000043918050",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        },
        {
            "quantity": "1",
            "product_id": "vip.01",
            "transaction_id": "1000000520444016",
            "original_transaction_id": "1000000520098800",
            "purchase_date": "2019-04-18 02:09:55 Etc/GMT",
            "purchase_date_ms": "1555553395000",
            "purchase_date_pst": "2019-04-17 19:09:55 America/Los_Angeles",
            "original_purchase_date": "2019-04-17 08:05:23 Etc/GMT",
            "original_purchase_date_ms": "1555488323000",
            "original_purchase_date_pst": "2019-04-17 01:05:23 America/Los_Angeles",
            "expires_date": "2019-04-18 02:14:55 Etc/GMT",
            "expires_date_ms": "1555553695000",
            "expires_date_pst": "2019-04-17 19:14:55 America/Los_Angeles",
            "web_order_line_item_id": "1000000043918120",
            "is_trial_period": "false",
            "is_in_intro_offer_period": "false"
        }
    ],
    "latest_receipt": "MIIkDwYJKoZIhvcNAQcCoIIkADCCI...................",//最新回执,返回的数据中,in_app 和 last_recepit_info数据一致
    "pending_renewal_info": [
        {
            "expiration_intent": "1",
            "auto_renew_product_id": "vip.01",//将要续订的套餐
            "original_transaction_id": "1000000520098800",//唯一标记用户的标识
            "is_in_billing_retry_period": "0",
            "product_id": "vip.01",//当前套餐
            "auto_renew_status": "0"//续订状态 0:不续订 1:续订
        }
    ]
}

苹果回调的数据

{
	"auto_renew_product_id": "vip.01",
	"notification_type": "DID_CHANGE_RENEWAL_STATUS",
	"latest_receipt_info": {
		"transaction_id": "1000000519994702",
		"original_transaction_id": "1000000517025422",
		"quantity": "1",
		"unique_identifier": "dfb3020735a03e0c791e66b2191f7a2f3c6df64d",
		"is_in_intro_offer_period": "false",
		"item_id": "1296544422",
		"original_purchase_date_ms": "1554712593000",
		"purchase_date_pst": "2019-04-16 20:10:54 America/Los_Angeles",
		"expires_date": "1555470954000",
		"expires_date_formatted": "2019-04-17 03:15:54 Etc/GMT",
		"is_trial_period": "false",
		"original_purchase_date_pst": "2019-04-08 01:36:33 America/Los_Angeles",
		"original_purchase_date": "2019-04-08 08:36:33 Etc/GMT",
		"purchase_date_ms": "1555470654000",
		"product_id": "vip.01",
		"bvrs": "3",
		"bid": "com.sanvio.BusinessConverge",
		"purchase_date": "2019-04-17 03:10:54 Etc/GMT",
		"expires_date_formatted_pst": "2019-04-16 20:15:54 America/Los_Angeles",
		"web_order_line_item_id": "1000000043752812",
		"unique_vendor_identifier": "224470F0-4B66-4B0A-8426-1B420659AF17"
	},
	"environment": "Sandbox",
	"latest_receipt": "ewoJInNpZ25hd.........",
	"password": "3622d5........",
	"auto_renew_status": "true"
}

三.苹果掉单问题

1)苹果服务器经常不稳定,经常访问不了

2)自动续订回调不及时 (沙盒环境经常出现不回调或回调严重延时)

3)有些回执中包含特殊字符,请求的时候会被转义,导致请求不成功,报21002

解决方法:用户第一次购买套餐时,报用户的回执记录下来,做定时任务主动去请求数据,同步会员数据

四.工具类

public static String sendHttpsCoon(String url, String code){
		if(url.isEmpty()){
			return null;
		}
		try {
			//设置SSLContext
			SSLContext ssl = SSLContext.getInstance("SSL");
			ssl.init(null, new TrustManager[]{myX509TrustManager}, null);

			//打开连接
			HttpsURLConnection conn = (HttpsURLConnection) new URL(url).openConnection();
			//设置套接工厂
			conn.setSSLSocketFactory(ssl.getSocketFactory());
			//加入数据
			conn.setRequestMethod("POST");
			conn.setDoOutput(true);
			conn.setRequestProperty("Charset", "GBK");
			conn.setRequestProperty("Content-type","application/json");

			JSONObject obj = new JSONObject();
			obj.put("receipt-data", code);
			obj.put("password", "XXXXXXXXXXXXXX");//共享秘钥

			BufferedOutputStream buffOutStr = new BufferedOutputStream(conn.getOutputStream());
			buffOutStr.write(obj.toString().replace("\\\\","\\").getBytes());
			buffOutStr.flush();
			buffOutStr.close();

			//获取输入流
			BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

			String line;
			StringBuilder sb = new StringBuilder();
			while((line = reader.readLine())!= null){
				sb.append(line);
			}
			return sb.toString();

		} catch (Exception e) {
			return null;
		}
	}

五.参考资料: 

https://www.cnblogs.com/TheYouth/p/6847014.html

https://www.jianshu.com/p/b199a4672608 

苹果官方文档

https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW5

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值