【问题标题】:iOS + PHP - Extracting sum of money from Apple IAPiOS + PHP - 从 Apple IAP 中提取资金
【发布时间】:2015-07-24 22:18:57
【问题描述】:

我正在开发一个使用 Apple 应用内购买服务的 iOS 应用。 我还在开发一个 PHP 后端服务,它在购买时接收编码的收据字符串,使用 Apple 的验证服务器对其进行验证,并将购买记录保存在数据库中。

我想从服务器端知道产品的价格,或者用户实际为产品支付的金额。

我更喜欢以美元获得结果,但任何货币都可以,只要我有办法知道它是哪种货币(即货币符号作为字符串的一部分),以便我可以转换它。

验证返回的 JSON 对象不包含交易中已支付的金额或产品价格。有没有办法只从收据字符串中获取这些信息?或者可能来自产品 ID 或交易 ID(两者都可以从收据中提取)?还是必须由应用提供此信息?

谢谢!!

【问题讨论】:

    标签: php ios


    【解决方案1】:

    以防万一有人感兴趣,在互联网上进行更多挖掘之后 - 这似乎是不可能的......

    所以我只需将用户支付的价格(存储在 SKProduct 对象中)以当地货币连同收据一起发送到服务器。在服务器上,我将发送的价格转换为美元并存储。

    我考虑过的另一种方法是在服务器上存储一个 JSON,其中所有产品 ID 作为键,以美元为单位的价格作为值。然后,一旦收据得到验证,我就可以从收据中获取产品 ID,从 JSON 中获取价格。 请注意,此解决方案可能无法为您提供用户实际支付的确切金额,因为不同国家/地区的应用商店之间的产品价格和税费可能略有不同。此解决方案仅适用于获得估计价格。

    希望这会有所帮助!

    【讨论】:

    • 如果在初次购买和自动续订之间价格发生变化怎么办?您将无法知道自动续订时将使用哪个金额
    • 好问题@DataGreed。当时我只需要这种机制进行一次性购买(消耗品和非消耗品)。对于订阅,您需要存储价格变化的历史记录。也许将最初支付的金额与您存储的金额进行比较以估算税款,然后使用该税款来计算实际金额和更新后的价格?
    【解决方案2】:

    据我所知,实际支付的金额不包含在收据中(钥匙列在here)。

    但是,价格包含在SKProduct 对象中,并且收据中提供了产品标识符,因此您可以在发送收据时将所有价格发送到您的服务器,并使用收据中的产品标识符来得到相应的价格。

    - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    
        NSMutableDictionary *prices = [NSMutableDictionary dictionary];
        for (SKProduct *product in [response products]) {
    
            NSString *productIdentifier = [product productIdentifier];
            NSDecimalNumber *price = [product price];
            NSLocale *priceLocale = [product priceLocale];
    
            prices[productIdentifier] = @[price, priceLocale];
        }
    
        // keep these in memory and send them with the receipt
    }
    

    【讨论】:

    • 我实际上想过这样的事情 - 在服务器配置 JSON 中以美元存储价格。像这样的解决方案在规模上似乎有点草率。传输的数据太多,相同数据的副本太多,在数组/哈希中的搜索太多等等......我目前只是发送从客户端支付的金额(以当地货币)并在服务器上转换它.
    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多