如何处理应用内购买的退款/取消

Posted

技术标签:

【中文标题】如何处理应用内购买的退款/取消【英文标题】:How to handle refund/cancellation in-app purchase 【发布时间】:2015-03-07 21:44:39 【问题描述】:

我正在尝试处理适用于 ios 的应用内购买退款。但我找不到明确的指导方针来做到这一点。

所以我有一个会员类型的应用内购买功能,其中用户凭据不一定与 iTunes 帐户相关联。

是否有某种标识符可以在某人购买时参考,并且在他们通过苹果申请退款时具有相同的标识符?

另外,我们会在他们退款时收到即时通知吗?我需要立即取消会员资格。

谢谢!

【问题讨论】:

参考How does Apple notify iOS apps of refunds of in-app purchases (IAP)? 【参考方案1】:

我最终存储了收据字符串并运行 cron 来检查交易并查找取消字段。

    $url = "https://buy.itunes.apple.com/verifyReceipt"; 
    $data = json_encode(array('receipt-data' => $receipt));

    $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            $response = curl_exec($ch);
            $errno    = curl_errno($ch);
            $errmsg   = curl_error($ch);
            curl_close($ch);
            if ($errno != 0) 
                throw new Exception($errmsg, $errno);
            
            return $response;

【讨论】:

我可以使用原始收据检查退款吗?或者 iOS 应用程序是否需要在退款后获取新收据,然后检查该收据以获取退款?基本上,旧收据会包含 cancel_date 字段吗? 根据 Apple 文档 (developer.apple.com/library/content/technotes/tn2413/…),没有针对消耗品和非续订订阅的 cancel_date。【参考方案2】:

您可以使用收据的各种元素来跟踪...其中大部分在应用内购买编程指南中进行了讨论。 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html#//apple_ref/doc/uid/TP40008267-CH1-SW1

至于取消,这取决于。如果订阅终止,它会一直有效,直到当前订阅期限结束。如果是实际退款,则似乎没有外部记录的“正式答案”。有相同情况的其他人请参阅此问题...How does Apple notify iOS apps of refunds of in-app purchases (IAP)?

【讨论】:

谢谢,但是我好像只能检查他们是否退款并且仍然使用相同的iTunes帐户?在我的情况下它不起作用,因为用户凭据与 iTunes 帐户无关。所以他们在技术上可以购买并要求退款,并且永远不会使用相同的 iTunes 帐户登录,我将无法跟踪它。 首先,您描述的场景在一般情况下并不常见(尽管您可能有理由相信它在您的特定用途中值得付出努力)。确保你没有浪费时间去解决一个幻象问题。其次,您可以向 Apple 提供有关您基于服务器的用户名的信息(请参阅之前链接的 In-App Purchase Programming Guide 中的“Detecting Irregular Activity”)。第三,根据链接的答案,您无法确定,但是当您确实注意到可疑的事情时,您可以随时调整您的应用内购买代码以从您的服务器。 谢谢。我看到您可以将 applicationUsername 添加到付款中。您知道这是否会显示在 iTunes Connect for 退款部分下吗?我只看到内容、内容类型、ID 和单位的字段。 很高兴您找到了解决方案。我不是故意让你挂在那里的——出于某种原因,我从来没有看到你的问题。

以上是关于如何处理应用内购买的退款/取消的主要内容,如果未能解决你的问题,请参考以下文章

Android 应用内结算:退款的应用内购买未取消

我如何获得谷歌退款订单?

Paypal 授权和捕获部分退款并避免

如何处理应用内计费库中的多个用户? (最佳实践)

用商品优惠券购买的商品交易成功后退货退款,退优惠券吗

Amazon Live Testing 工具中的应用内购买退款