网络知识 娱乐 服务端接入验证苹果支付receipt

服务端接入验证苹果支付receipt

1.验证苹果receipt接口

  • 请求方式 post Content-Type: application/json
  • 测试环境url https://sandbox.itunes.apple.com/verifyReceipt
  • 正式环境url https://buy.itunes.apple.com/verifyReceipt
  • 请求参数:
请求参数参数类型是否必须描述
receipt-datastringBase64-encoded receipt data
passwordstring有订阅商品的时候必须有该参数,共享秘钥
exclude-old-transactionsboolean专门给订阅商品使用
  • 响应参数:
{
	"environment": "Sandbox", //Sandbox, Production
	"receipt": {
		"adam_id": 0,
		"app_item_id": 0,
		"application_version": "2.0.6",
		"bundle_id": "com.appstoreMJB.mobao", //包名
		"download_id": 0,
		"in_app": [{
			"is_trial_period": "false",
			"original_purchase_date": "2019-10-25 01:07:14 Etc/GMT",
			"original_purchase_date_ms": "1571965634000",
			"original_transaction_id": "1000000583857816", //原始交易id
			"product_id": "com.wha.***.6",
			"purchase_date": "2019-10-25 01:07:14 Etc/GMT",
			"purchase_date_ms": "1571965634000",
			"quantity": "1", //购买数量
			"transaction_id": "1000000583857816" //交易id唯一
		}],
		"original_application_version": "1.0",
		"original_purchase_date": "2013-08-01 07:00:00 Etc/GMT",
		"original_purchase_date_ms": "1375340400000",
		"receipt_creation_date": "2019-10-25 01:07:14 Etc/GMT",
		"receipt_creation_date_ms": "1571965634000",
		"receipt_type": "ProductionSandbox",
		"request_date": "2019-10-25 01:07:16 Etc/GMT",
		"request_date_ms": "1571965636457",
		"version_external_identifier": 0
	},
	"status": 0 //0成功 其他失败
}
  • 官方文档 https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

2.接收解析v1版本苹果通知(订阅,退款)

基本步骤

  • 1.苹果后台创建订阅商品,创建共享密钥password
  • 2.苹果后台配置通知自己服务器地址url
  • 3.解析苹果通知,开发自己的逻辑(主要编程部分)

1.苹果后台创建订阅商品

苹果后台创建商品列表的上方,就会有创建共享密钥的按钮,只有拥有该权限的人才能看到,重点来了,创建了共享密钥,在验证苹果收据的时候所有的商品都要增加参数,把收据和共享密钥都要发到苹果服务器进行验证,共享密钥作用于所有商品。
进入苹果后台-管理-创建共享密钥,后台地址 https://appstoreconnect.apple.com/apps

2.苹果后台配置通知地址url(v1版本)

苹果所有的通知都会发送到这个url,包括退款,订阅续订,取消订阅等,参数都在请求体里面,数据格式为json格式,使用@RequestBody接收。进入后台-信息-服务器通知地址。参考官方文档 https://help.apple.com/app-store-connect/#/dev0067a330b

3.解析苹果通知(重点)

通知样例如下,详细参数请见官方文档 https://developer.apple.com/documentation/appstoreservernotifications/responsebodyv1

{
    "environment":"sandbox",       //环境
    "notification_type":"REFUND",  //通知类型
    "password":"aaaaaaaa",         //共享秘钥
    "bid":"afafsdf.com",           //包名
    "auto_renew_status":"false",   //续期状态
    "unified_receipt":{            //需要解析的数据
        "status":"0",              //通知状态,0有效,其他无效
        "latest_receipt_info": [
            {
                "cancellation_date_ms":"15016625461111",       //退款时间毫秒级
                "cancellation_reason":"1",                     //退款原因
                "original_transaction_id":"1000000321215919",  //原始交易id
                "product_id":"aadfasdfsdfasdf",                //商品id
                "expires_date_ms":"15554554454",               //续订过期时间
                "transaction_id":"10005877888478"              //交易id
            },
            {
                ...
            }
        ]
    }
}

notification_type:

INITIAL_BUY : 初次购买(可不解析)
DID_RENEW : 订阅成功自动续订
DID_RECOVER : 自动恢复续订
INTERACTIVE_RENEWAL : 用户手动恢复续订
CANCEL : 取消订阅
REFUND : 退款

4.测试对应的时间段

实践时限测试时限
1周3分钟
1个月5分钟
2个月10分钟
3个月15分钟
6个月30分钟
1年60分钟

苹果中文文档 https://developer.apple.com/cn/documentation/