zoukankan      html  css  js  c++  java
  • iOS应用内支付(IAP)服务端端校验详解

    IAP流程

    IAP流程分为两种:

    一种是直接使用Apple的服务器进行购买和验证,

    另一种就是自己假设服务器进行验证。由于国内网络连接Apple服务器验证非常慢,而且也为了防止黑客伪造购买凭证,通用做法是自己架设服务器进行验证。

    下面我们通过图来看看两种方式的差别:

    使用Apple服务器


     

    自己架设服务器


    这里重要主要讲讲服务端这一块的校验过程因为涉及到校验合法性。
    1、首先拿到客户端的支付receiptData和transaction信息
    2、服务端通过receiptData通过向苹果服务器post数据发起校验
    3、服务端端对苹果服务器响应数据做处理和校验订单的合法性。
    3、如果订单合法则对订单做出相应处理。
    附录:
    苹果服务器响应体数据
    {
    "status": 0,
    "environment": "Sandbox",
    "receipt": {
    "receipt_type": "ProductionSandbox",
    "adam_id": 0,
    "app_item_id": 0,
    "bundle_id": "应用标识",
    "application_version": "版本号",
    "download_id": 0,
    "version_external_identifier": 0,
    "receipt_creation_date": "2017-07-13 08:33:57 Etc/GMT",
    "receipt_creation_date_ms": "1499934837000",
    "receipt_creation_date_pst": "2017-07-13 01:33:57 America/Los_Angeles",
    "request_date": "2017-07-13 08:34:02 Etc/GMT",
    "request_date_ms": "1499934842771",
    "request_date_pst": "2017-07-13 01:34:02 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": "",
    "transaction_id": "",
    "original_transaction_id": "",
    "purchase_date": "2017-05-20 04:22:32 Etc/GMT",
    "purchase_date_ms": "1495254152000",
    "purchase_date_pst": "2017-05-19 21:22:32 America/Los_Angeles",
    "original_purchase_date": "2017-05-20 04:22:32 Etc/GMT",
    "original_purchase_date_ms": "1495254152000",
    "original_purchase_date_pst": "2017-05-19 21:22:32 America/Los_Angeles",
    "is_trial_period": "false"
    },
    {
    "quantity": "1",
    "product_id": "",
    "transaction_id": "",
    "original_transaction_id": "",
    "purchase_date": "2017-05-20 04:28:32 Etc/GMT",
    "purchase_date_ms": "1495254512000",
    "purchase_date_pst": "2017-05-19 21:28:32 America/Los_Angeles",
    "original_purchase_date": "2017-05-20 04:28:32 Etc/GMT",
    "original_purchase_date_ms": "1495254512000",
    "original_purchase_date_pst": "2017-05-19 21:28:32 America/Los_Angeles",
    "is_trial_period": "false"
    }
    ]
    }
    }
    状态说明
    状态码 描述
    21000 App Store无法读取你提供的JSON数据
    21002 收据数据不符合格式
    21003 收据无法被验证
    21004 你提供的共享密钥和账户的共享密钥不一致
    21005 收据服务器当前不可用
    21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
    21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证
    21008 收据信息是产品环境中使用,但却被发送到测试环境中验证
  • 相关阅读:
    C/S和B/S结构区别整理
    JavaScript特点、优缺点及常用框架
    ExtJs特点、优缺点及注意事项
    Oracle SQL 脚本跟踪
    解决 C#中 SQL脚本执行超时 问题
    oracle 时间转化函数及常见函数 .
    Spring.NET 1.3.2 集成 NHibernate 3.2 1 下载软件
    SQL Server 跨服务器 不同数据库之间复制表的数据的方法:
    spring.net nhibernate 分布布式事务(上)
    set xact_abort ON 你懂的, 在分布式数据库事务中,用到. 在事务中,若出现错误,系统即默认回滚事务
  • 原文地址:https://www.cnblogs.com/wangboy91/p/7162335.html
Copyright © 2011-2022 走看看