1、前言

今年 WWDC 2020 苹果全球开发者大会,苹果宣布所有的内购品项类型,当用户退款成功时,开发者都能收到退款通知!!!退款通知!!!退款通知!!!

针对 App 内购买项目的退款通知现已可用

2020 年 06 月 24 日 App Store 服务器通知现在包含所有类型的 App 内购买项目的退款通知 (包括消耗型项目、非消耗型项目和非续期订阅)。这些信息能帮助您采取相应的行动,并告知他们相关的优惠更改,以及如何重新订阅。

针对 App 内购买项目的退款通知现已可用 - 新闻 - Apple Developer

2、处理退款

2.1 退款流程

在 2020 年 06 月 24 日之前,开发者完全不知道有用户退款了!(只有每月账单里看到退款的一个总数量 -。-):

2020 年 06 月 24 日开始,苹果新增流程:

2.2 退款通知

在苹果后台可以配置一个退款通知的回调地址(一个App配置一条链接):

配置的回调链接必须满足条件:

  • 满足应用传输安全要求(使用 https
  • URL 最长 255 字符

注意:这里的 https 是指苹果的 App Transport Security (ATS),其中有协议的要求,比如使用 Transport Layer Security (TLS) protocol 1.2 版本,具体见苹果文档: Preventing Insecure Network Connections | Apple Developer Documentation。

2.3 退款通知的类型

苹果把回调的通知分为2种类型:

  • 退款通知类型
  • 取消通知类型

其中新增加的退款通知类型是针对:

  • 消耗型
  • 非消耗型
  • 非续期订阅

取消通知类型是针对:

  • 自动续期订阅

2.4 退款通知的内容

苹果返回的通知内容为 JSON 对象数据,所有的退款订单的通知是在 unified_receipt 里的 latest_receipt_info 数组中:

字段 说明
environment 收据生成的环境。values: Sandbox, PROD。自动续订订阅是可以沙盒环境测试取消订阅。
latest_receipt Base64编码的最新交易收据。
latest_receipt_info 收据的列表
notification_type 通知类型,退款的值应该是:REFUND, 可参考:notification_type
password 验证收据时的 password,App 专用共享密钥是用于接收此 App 自动续订订阅收据的唯一代码。如果您需要将此 App 转让给其他开发者,或者需要将主共享密钥设置为专用,可能需要使用 App 专用共享密钥。
bid App的 bundle id(包名)
bvrs App的版本号
unified_receipt 退款的订单信息在这里

unified_receipt 里的 latest_receipt_info 是一个数组,其中包含的最近的100次应用内购买交易:

数据中每个退款订单的主要字段:

字段 说明
original_transaction_id 苹果订单的唯一标识 transaction_id
cancellation_data_ms 退款的时间
cancellation_reason 用户退款的原因。(0或1,含义未知)
bid 应用包名 bundle id
product_id 商品唯一标识 id

详细的返回字段见官方文档:

  • responseBody | Apple Developer Documentation
  • unified_receipt | Apple Developer Documentation
  • responseBody.Latest_receipt_info | Apple Developer Documentation

2.5 退款通知的响应

您的服务器应发送HTTP状态代码,以指示服务器到服务器的通知接收是否成功:

  • 如果回调接收成功,则发送 HTTP 200。您的服务器不需要返回数据。
  • 如果回调接收不成功,请发送 HTTP 50x40x 让 App Store 重试该通知。App Store在一段时间内尝试重试该通知,但在连续失败尝试后最终停止(3次)。

注意事项:

  • 当您使用包含退款交易的收据 transaction_data 向苹果服务器校验 verifyReceipt 时,JSON响应中不存在退款交易,自动续订订阅除外。
  • 收到 REFUND 通知时,您有责任为每笔退款交易存储,监控并采取适当的措施。(因为苹果只通知一次,暂时无法在苹果后台查询退款的订单。也不能由开发者主动去苹果服务器查询。)

2.6 自动续订订阅通知

这个取消通知之前就一直有,所以这里不重复了,需要的自行搜索。

自动续订订阅的相关文档:

  • Handling Subscriptions Billing | Apple Developer Documentation
  • In-App Purchases and Using Server-to-Server Notifications - WWDC 2019 - Videos - Apple Developer
  • Subscription Offers Best Practices - WWDC 2019 - Videos - Apple Developer

疑问解答

1、 苹果后台能否查看到退款的订单详情?

答:暂无。(估计明年 WWDC2021 会有啦?)

2、 消耗型、非消耗型、非续期订阅能不能在沙盒环境测试退款?

答:暂时不能。(估计未来会有?等更新吧....)

总结

大概就是这样,其实退款的流程并不复杂,很简单,但是为什么苹果用了那么多年才做出来呢?

要知道这个原因,还是要回顾一下历史~

退款的方式

用户可以通过那些方式申请退款:

  • 联系Apple客户支持并要求退款
  • 登录并使用Apple的自助服务工具 reportaproblem.apple.com 要求退款
  • 要求他们的付款方式发行人退款 (比如要求银行取消扣费,或者黑卡无法扣费等)

详细:针对从 Apple 购买的 App 或内容申请退款 - Apple 支持

退款的政策

针对退款,不同国家或地区会有不同的“无条件退款期限”。

AppStore 商店退款政策:

  • 欧盟区: 14天无条件退款。
  • 中国台湾:7天无条件退款。
  • 中国/美国/韩国等其它大多数国家:90天有条件退款。 (注:在中国区,每位App Store用户能享有一次无条件退款机会)

注:中国区 App Store 的具体退款政策:一个ID有一次无条件退款机会,一年2次有条件退款,第3次退款会非常难。至于退款到账时间快为36小时内,也有7-15个工作日退还。

正是这些“漏洞”,所以,出现专业的代充工作室,导致开发者坏帐非常严重~

特别是火爆的游戏代充(月流水(千万级)的12%可能就这样没了)~

很多不熟悉的朋友不太理解,总会问有那么多人退款吗?

其实,应用内购买的退款主要是针对游戏和直播打赏。游戏类的多是代充黑产;主播自己刷火箭打赏然后退款,收入照收,各种黑幕,只有业内人才懂的苦 -。-

“退款”滥用

“退款”人的具体手段方式:

  • 1、利用淘宝店,以代充打折的名义获取玩家账号信息,在为玩家充值后申请退款。淘宝店获得充值金、玩家获得道具、游戏厂商亏钱;
  • 2、收购消费过的App Store ID账号,要求至少要消费过500元以上。收到的账号会被用来退款和冲榜;
  • 3、不断寻找有退款需求的新用户,帮其退款,收取佣金;

退款通知的意义

  • 允许您对应用内内容的可访问管理 (例如游戏的宝石或金币回收或账户余额扣减等)
  • 管理退款滥用
  • 快速解决用户问题 (发现用户退款后,可以在应用内弹出联系客服,协助用户解决应用遇到的退款原因的问题?)
  • 重新平衡游戏经济

处罚行动

一旦收到有关客户获得应用内购买退款的推送通知,作为开发人员,您可以采取七种不同的操作,从中等到严重(温和处理到严肃处理)。:

苹果旨在为客户和开发人员提供更好的体验,所以建议操作要慎重考虑。

对退款用户的处理

苹果给了一个示例,用户退款成功后,在 App 中给用户提示退款的时间和说明,可以重新购买,或者联系客服!

也许帮助需要帮助的用户,为他们解决为什么退款的原因,才能减少真正的退款用户,用户觉得值!那么退款数自然会减少~

所以,苹果当初为什么不愿意提供退款的接口?其实是一直想保护用户的隐私(退款自由),但是当“退款”滥用时,不得不这样提供了退款通知接口。

这正是我们所看到的,苹果想的,你怎么想!怎么做!想好在决定~

ps:题外话,大家一直觉得苹果的应用内购买做的很“烂”,是因为大家不太了解,苹果的这套支付系统有多复杂。可以打开下面的链接看看不同国家或地区的付款方式,要在一个应用里集成这些付款方式,不是一个支付宝或微信能想象到的。了解了才知道,唯有多学习:可与 Apple ID 搭配使用的付款方式 - Apple 支持

参考

  • 针对 App 内购买项目的退款通知现已可用 - 新闻 - Apple Developer
  • What’s new with in-app purchase - WWDC 2020 - Videos - Apple Developer
  • Handling Refund Notifications | Apple Developer Documentation
  • Enabling Server-to-Server Notifications | Apple Developer Documentation
  • Handling Subscriptions Billing | Apple Developer Documentation
  • App Store Server Notifications | Apple Developer Documentation
  • In-App Purchases and Using Server-to-Server Notifications - WWDC 2019 - Videos - Apple Developer
  • Subscription Offers Best Practices - WWDC 2019 - Videos - Apple Developer

注:本文首发于 iHTCboy's blog,如若转载,请注来源。

转载地址:https://juejin.im/post/6845166890420011022

iOS Handle Refunds 处理退款 --- WWDC20(Session 10661)相关推荐

  1. iOS Handle Refunds 处理退款 --- WWDC20

    1.前言 今年 WWDC 2020 苹果全球开发者大会,苹果宣布所有的内购品项类型,当用户退款成功时,开发者都能收到退款通知!!!退款通知!!!退款通知!!! 针对 App 内购买项目的退款通知现已可 ...

  2. WWDC20 Session 清单(06-23)

    又一年 WWDC.今年 session 的数量多达 200+,是往年的 2 倍.小集继续为您整理每天的 session 清单,方便您根据自己的喜好来选择内容. Adopt the new look o ...

  3. 苹果 iOS 内购三步曲:App 内退款、历史订单查询、绑定用户防掉单

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 转自:掘金 37手游iOS技术运营团队 https://juejin.cn/post/697473339 ...

  4. 苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21

    一.前言 如果大家的 App 有使用 IAP 功能,那么可能会遇到用户反馈苹果充值成功,但是服务没有到账的情况,用户一般会提供这样的苹果收据: 用户反馈时提供的苹果收据中,有一个字段中 ORDER I ...

  5. ios视频和音频采集

    ios视频和音频采集以及预览 本文将说明如何用ios做视频和音频的采集,以及预览,预览采用的是系统自带的AVCaptureVideoPreviewLayer和UIView,视频采集用AVCapture ...

  6. iOS 性能优化总结

    原文链接:https://github.com/skyming/iOS-Performance-Optimization 关于 iOS 性能优化梳理: 基本工具.业务优化.内存优化.卡顿优化.布局优化 ...

  7. iOS开发 Xcode8中遇到的问题及改动

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1. ...

  8. session图片验证码,页面和请求是两个地址。android手机好用,iphone 失效。

    问题描述:之前在H5页面用session做了一个验证码.安卓手机好使.但是到苹果就不好使了(页面访问是一个域名地址,ajax请求是用另外的一个ip地址). 详细说明: 验证码请求后台图片正常显示,an ...

  9. 兼容iOS 10 资料整理笔记

    1.Notification(通知) 自从Notification被引入之后,苹果就不断的更新优化,但这些更新优化只是小打小闹,直至现在iOS 10开始真正的进行大改重构,这让开发者也体会到UserN ...

最新文章

  1. C/C++ 取整函数 ceil()、floor()、trunc()
  2. escape in ABAP and JavaScript
  3. Splunk学习心得
  4. 藏獒时代曙光科技 若尔盖大草原一幅绚丽的画卷,放飞心情的好地方[原创]
  5. 快手上的cosplay大师有多野?
  6. DevExpress控件介绍
  7. python项目软件代码_七套Python库快速提升您项目的代码可维护性,软件工程,代码库...
  8. typora代码块语言linux命令,typora工具的使用以及MarkDown语法
  9. 力扣题目——217. 存在重复元素
  10. python 可视化界面 打开excel_python如何将excel数据处理可视化
  11. 敬伟PS教程:掌握篇B07高级抠图
  12. 八十九、Java内置函数(常用函数)
  13. 数据结构算法—递归算法求二叉树的叶子结点(C语言)
  14. 阿里巴巴 研发工程师Java暑期实习一面
  15. FFmpeg无损转换ts为mp4
  16. Still,yet和already的用法
  17. No operator matches the given name and argument types. You might need to add explicit type casts
  18. http://www.cnblogs.com/Jackie-zhang/p/6071769.html
  19. 声音“三要素”---响度(loudness),音高(pitch),音色(timbre)
  20. python求极限中有算术平方根如何表达_Python求算数平方根和约数的方法汇总

热门文章

  1. Excel作图时,将一列设置为横坐标
  2. jieba.analyse的使用:提取关键字/词频制作词云
  3. NOD32杀毒软件全功能移动版[Moshow魔手]
  4. Hone C# III
  5. 如何购买腾讯云服务器?腾讯云服务器购买教程文档
  6. SS00014.elasticsearch——|HadoopElasticSearch集中式日志分析系统.v14|——|Elasticsearch.v14|
  7. Pymoo学习 (8):Gradients
  8. HIPAA解决方案(九、837)
  9. Android Studio——简单绘图板
  10. WSL Ubuntu 20.04下Android源码编译与导入Android Studio