无法接收应用内购买退款服务器到服务器通知

Posted

技术标签:

【中文标题】无法接收应用内购买退款服务器到服务器通知【英文标题】:Unable to receive In-App purchase refund server-to-server notification 【发布时间】:2021-06-03 17:42:00 【问题描述】:

我正在尝试在我们的服务器后端实现对应用内购买退款通知的处理(App Store 将 responseBody JSON 数据发送到应用开发者键入的服务器通知 url)。但是在应用内购买成功退款后,我无法从应用商店收到任何通知。

这是我为在我们的服务器中处理退款通知所做的事情的列表。

    转到 App Store Connect > 输入“App Store Notification Url”:“https://ourServerUrl/notifyRefund”(支持 TLS 1.2)

    我们的服务器接受“POST”请求并定义@RequestBody 参数,如responseBody 中所述

    从我们的 ios 应用程序购买产品(“消耗品”)(约 0.99 美元) - purchase_date = 2021-03-03

    转到 reportaproblem.apple.com 并申请退款。 -> 第二天 App Store 处理了退款,我的 0.99 美元成功退还到我的银行账户。 refund_date = 2021-03-04

完成上述步骤后,我仍然无法从 App Store 收到通知。 我读过一篇关于notification delay 的帖子,但我不确定这是因为延迟还是我的服务器配置有问题。

Apple doc.

【问题讨论】:

【参考方案1】:

自 2021 年 3 月 24 日起更新 在 Server App (iOS/android) 通信中, 我们服务器的视图解析器 (ContentNegotiatingViewResolver) 确定默认视图 (TextPlainView, JsonView) 基于请求头(Content-Type,Accept)

由于苹果通知回调响应(请求我们的服务器) 没有“Accept”标头,我们的服务器将默认视图解析器设置为 TextPlainView 在“servlet-context.xml”中遵循我们的服务器配置 由于Apple通知响应为Json格式,因此导致错误。

将我们的服务器默认视图设置更改为 json 视图后 我们能够解析苹果通知响应体。 我希望它可以帮助开发人员处理类似的问题。

【讨论】:

以上是关于无法接收应用内购买退款服务器到服务器通知的主要内容,如果未能解决你的问题,请参考以下文章

已退款的应用内购买订阅是不是显示为已过期? [关闭]

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

Apple iOS 应用内购买服务器到服务器通知的“取消”通知案例?

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

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

Flutter 应用内购买,检查退款