关于苹果内购商品退款的开发联调

苹果在今年6月的开发者大会上宣告支持普通商品的退款回调服务,只需要在开发者后台配置回调网址即可收到退款通知

由于中文资料的缺失直到最近才解决了这个问题。整理资料如下


nginx收到数据日志格式如下:




[2020-12-26T02:43:30+00:00] -  28.188.206.127 - 0.176 - 404 - xxxx.xxx.com - [POST /api/applepay/callback] - [41] - 172.18.0.5:9000 - 0.013 - "PostmanRuntime/7.26.8" - [{
    "notification_type": "REFUND",
    "password": "xxx",
    "environment": "PROD",
    "latest_receipt": "xxxxxx=",
    "latest_receipt_info": {
        "cancellation_reason": "0",
        "is_trial_period": "false",
        "is_in_intro_offer_period": "false",
        "unique_identifier": "xxxx",
        "unique_vendor_identifier": "xxxx",
        "cancellation_date": "2020-12-24 23:32:42 Etc/GMT",
        "cancellation_date_ms": "1608852762000",
        "cancellation_date_pst": "2020-12-24 15:32:42 America/Los_Angeles",
        "purchase_date": "2020-12-22 02:18:01 Etc/GMT",
        "purchase_date_ms": "1608603481000",
        "purchase_date_pst": "2020-12-21 18:18:01 America/Los_Angeles",
        "original_purchase_date": "2020-12-22 02:18:01 Etc/GMT",
        "original_purchase_date_ms": "1608603481000",
        "original_purchase_date_pst": "2020-12-21 18:18:01 America/Los_Angeles",
        "item_id": "14643xxx06268",
        "app_item_id": "xxxx",
        "version_external_identifier": "839621918",
        "bid": "xxxx",
        "product_id": "xxxx",
        "transaction_id": "xxxxxx",
        "original_transaction_id": "xxx",
        "quantity": "1",
        "bvrs": "1.0.68",
        "in_app_ownership_type": "PURCHASED"
    },
    "unified_receipt": {
        "status": 0,
        "environment": "Production",
        "latest_receipt_info": [
            {
                "quantity": "1",
                "product_id": "xxx",
                "transaction_id": "490000728536895",
                "purchase_date": "2020-12-25 13:46:15 Etc/GMT",
                "purchase_date_ms": "1608903975000",
                "purchase_date_pst": "2020-12-25 05:46:15 America/Los_Angeles",
                "original_purchase_date": "2020-12-25 13:46:15 Etc/GMT",
                "original_purchase_date_ms": "1608903975000",
                "original_purchase_date_pst": "2020-12-25 05:46:15 America/Los_Angeles",
                "is_trial_period": "false",
                "original_transaction_id": "490000728536895",
                "in_app_ownership_type": "PURCHASED"
            }
        ],
        "latest_receipt": "x/QaiaDyEO2rpzGU+12TZ/x+9jVcZ5+x+x+DhYR/rG8tC+x/x/Zyq6qmL2yEez+kmc="
    },
    "bid": "xxxx",
    "bvrs": "1.0.68"
}] - [] - ""

苹果直接以post json形式发送数据过来,接收后注意判断环境及receipt数据

latest_receipt_info中如果是退款的订单会返回cancellation_date等字段,可以作为判断是否退款的依据


总体来说,苹果难得的开放了这部分接口,但对开发者仍然不够友好。

没有开发环境,只能靠用户真实的退款后收到数据做参考,否则你在文档里连一个请求的完整参考示例都没有,很难保证上线不出问题。

另外这个数据苹果应该没有重发机制,可能会导致用户退款的没有处理的情况。

发布于 2020-12-26 13:09