如何处理应用内购买的退款/取消
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 和单位的字段。 很高兴您找到了解决方案。我不是故意让你挂在那里的——出于某种原因,我从来没有看到你的问题。以上是关于如何处理应用内购买的退款/取消的主要内容,如果未能解决你的问题,请参考以下文章