当前位置:首页 > APP&PC应用 > 正文内容

苹果订阅支付必须走苹果支付接入详细教程

admin3个月前 (10-27)APP&PC应用66

客户端实现iOS订阅支付后,支付成功会返回一个收据(一大串随机字符串),需要请求苹果服务器的接口来校验该收据的真实性,同时校验完成后苹果服务器也会发通知告诉我们的自己的服务器(ios后台配置的回调地址),这个时候就需要服务端来接入苹果服务器并处理该支付逻辑。这里不使用客户端直接接入苹果服务器校验收据接口的原因大概就是因为订阅类型需要共享密钥,防止该密钥暴露,同时服务器接入能更好处理逻辑。

接入必要配置

1.订阅类型需要从苹果后台获取一个共享密钥

2.需要在苹果后台配置好回调地址

3.需要配置订阅产品(周期,价格,我自己没什么了解,这个需要注意的是订阅有按组分,同一个组和不同组的产品是有区别的,例如同一个组的不同产品进行购买,他们的原始订单可能相同)

接入必要资源

简体中文文档 - Apple Developer

校验收据:通过 App Store 验证收据 - 简体中文文档 - APPle Developer

回调通知:启用 app Store 服务器通知 - 简体中文文档 - Apple Developer

退款处理:处理退款通知 - 简体中文文档 - Apple Developer

收据校验沙箱环境:https://sandbox.itunes.apple.com/verifyReceipt

收据校验生产环境:https://buy.itunes.apple.com/verifyReceipt

接入流程

1.服务端接入apple校验收据接口

注意事项:防止相同数据重复校验或者相同请求大量请求导致的不稳定因素,建议使用时间戳校验预防,不要将共享密钥暴露在客户端,共享密钥同时也可以对回调通知进行校验,校验收据后不要做为订单处理,最好一切以回调为主。

接口地址:https://buy.itunes.apple.com/verifyReceipt

接口类型:POST

接口格式:appliaction/json

功能说明:该接口主要是用来恢复订阅和支付校验,校验完成会有回调通知到商户服务器

请求参数

官方:Apple Developer Documentation

{"password":"这里是共享密钥","receipt-data":"这里是收据的字符串"}

返回结果:

状态码:Apple Developer Documentation

失败

{"status":21000}

成功:

成功结果参数文档:responseBody | Apple Developer Documentation

主要参数说明:

{"environment": "Production",   //请求环境"receipt": {"receipt_type": "Production","adam_id": xxx,"app_item_id": xxx,"bundle_id": "com.xxx","application_version": "2","download_id": xxx,"version_external_identifier": xxx,"receipt_creation_date": "2022-10-24 07:14:36 Etc/GMT","receipt_creation_date_ms": "1666595676000","receipt_creation_date_pst": "2022-10-24 00:14:36 America/Los_Angeles","request_date": "2023-02-24 03:29:47 Etc/GMT","request_date_ms": "1677209387760","request_date_pst": "2023-02-23 19:29:47 America/Los_Angeles","original_purchase_date": "2022-07-04 03:24:29 Etc/GMT","original_purchase_date_ms": "1656905069000","original_purchase_date_pst": "2022-07-03 20:24:29 America/Los_Angeles","original_application_version": "2","in_app": [  //所有订单都可能存在,主要是非订阅订单{"quantity": "1","product_id": "xxxx","transaction_id": "xxxx","original_transaction_id": "xxx","purchase_date": "2022-07-04 03:25:29 Etc/GMT","purchase_date_ms": "1656905129000","purchase_date_pst": "2022-07-03 20:25:29 America/Los_Angeles","original_purchase_date": "2022-07-04 03:25:30 Etc/GMT","original_purchase_date_ms": "1656905130000","original_purchase_date_pst": "2022-07-03 20:25:30 America/Los_Angeles","expires_date": "2022-07-11 03:25:29 Etc/GMT","expires_date_ms": "1657509929000","expires_date_pst": "2022-07-10 20:25:29 America/Los_Angeles","Web_order_line_item_id": "xxx","is_trial_period": "false","is_in_intro_offer_period": "false","in_app_ownership_type": "PURCHASED"}]},"latest_receipt_info": [  //订单订阅集合,从上往下订单时间倒序,第一个为最新的支付订单{"quantity": "1","product_id": "xxx",  //订单产品id,apple后台支付配置的参数"transaction_id": "xxx",  //apple当前订单号"original_transaction_id": "xxx",  //apple原始订单号,该用户在该产品第一笔支付订单,可当做同一批订单朔源"purchase_date": "2022-11-25 08:19:27 Etc/GMT", //订单时间"purchase_date_ms": "1669364367000","purchase_date_pst": "2022-11-25 00:19:27 America/Los_Angeles","original_purchase_date": "2022-07-04 03:25:30 Etc/GMT",  //最初购买时间"original_purchase_date_ms": "1656905130000","original_purchase_date_pst": "2022-07-03 20:25:30 America/Los_Angeles","expires_date": "2023-11-25 08:19:27 Etc/GMT",  //订阅过期时间"expires_date_ms": "1700900367000","expires_date_pst": "2023-11-25 00:19:27 America/Los_Angeles","web_order_line_item_id": "xxx","is_trial_period": "false",  //是否是试用订单"is_in_intro_offer_period": "false","in_app_ownership_type": "PURCHASED","subscription_group_identifier": "xxx"}],"latest_receipt": "------------加密串------------","pending_renewal_info": [{"auto_renew_product_id": "xxx","product_id": "xxx","original_transaction_id": "xxx","auto_renew_status": "0"}],"status": 0  //状态成功

}

  2.apple支付回调通知接入

回调通知配置:苹果后台可配置生产环境和沙箱环境的APPLE回调通知地址

接入文档:responseBodyV1 | Apple Developer Documentation

提示:接入apple支付回调apple提供了v1和v2两种类型,v2需要多一步加解密的操作

功能说明:该通知主要是订单状态的变更等,包括续订,付费通知,取消订阅,退款等通知

可进行订单处理

通知类型说明:

INITIAL_BUY

首次购买

REFUND

退款

CANCEL

取消订阅

DID_RENEW

自动续订

INTERACTIVE_RENEWAL

应用界面或appstore手动续订

DID_RECOVER

恢复订阅

回调请求参数示例

{"notification_type":"DID_RENEW",  //通知类型,该类型为续订通知"auto_renew_product_id":"xxx","password":"xxx",  //共享密钥,可以验证是否真实通知"environment":"Sandbox","original_transaction_id":xxx,"unified_receipt":{"status":0,"environment":"Sandbox","latest_receipt_info":[  //第一笔为最新的通知订单{"quantity":"1","product_id":"xxx","transaction_id":"xxx", //当前订单号"purchase_date":"2022-06-08 09:51:55 Etc/GMT","purchase_date_ms":"1654681915000","purchase_date_pst":"2022-06-08 02:51:55 America/Los_Angeles","original_purchase_date":"2022-06-08 04:36:20 Etc/GMT","original_purchase_date_ms":"1654662980000","original_purchase_date_pst":"2022-06-07 21:36:20 America/Los_Angeles","expires_date":"2022-06-08 09:54:55 Etc/GMT","expires_date_ms":"1654682095000","expires_date_pst":"2022-06-08 02:54:55 America/Los_Angeles","web_order_line_item_id":"xxx","is_trial_period":"false","is_in_intro_offer_period":"false","original_transaction_id":"xxx", //原始订单号,该产品首次的订单号"in_app_ownership_type":"PURCHASED","subscription_group_identifier":"xxx"},{"quantity":"1","product_id":"xxx","transaction_id":"xxx","purchase_date":"2022-06-08 09:48:03 Etc/GMT","purchase_date_ms":"xxx","purchase_date_pst":"2022-06-08 02:48:03 America/Los_Angeles","original_purchase_date":"2022-06-08 04:36:20 Etc/GMT","original_purchase_date_ms":"1654662980000","original_purchase_date_pst":"2022-06-07 21:36:20 America/Los_Angeles","expires_date":"2022-06-08 09:51:03 Etc/GMT","expires_date_ms":"1654681863000","expires_date_pst":"2022-06-08 02:51:03 America/Los_Angeles","web_order_line_item_id":"xxx","is_trial_period":"false","is_in_intro_offer_period":"false","original_transaction_id":"xxx","in_app_ownership_type":"PURCHASED","subscription_group_identifier":"xxx"}],"pending_renewal_info":[{"auto_renew_status":"1","auto_renew_product_id":"xxx","product_id":"xxx","original_transaction_id":"xxx"}]},"bvrs":"xxx","bid":"com.xxx","auto_renew_status":"true"

}

接入问题说明

1.latest_receipt_info集合订单按时间倒序排序,所以第一笔为最新的订单

2.ios收据为账户维度,即收据和通知获取的数据为该账户的历史订单集合,非当前支付

3.ios订单未返回金额等参数,需要自己做处理

4.ios退款通知不支持订阅类型

5.apple支付为全球性支付,需要自己处理货币转换

6.同一个产品包括同产品组,在同一个账户支付会生成一个原始订单号,可根据该订单号溯源

7.订单校验只适用于恢复订阅和收据校验,具体支付处理按通知为主

8.状态码21007为测试环境的收据请求到了正式环境

扫描二维码推送至手机访问。

版权声明:本文由网站APP-h5开发APP-跨平台开发工具发布,如需转载请注明出处。

本文链接:http://n.6-l.cn/ping-guo-ding-yue-zh-thj.html

分享给朋友:

“苹果订阅支付必须走苹果支付接入详细教程” 的相关文章

ios打包成功但是提交审核失败

在iOS开发中,打包成功但提交审核失败可能是由于多种原因造成的。下面我将详细介绍可能的原因和解决方法。1. App功能问题:苹果审核团队对App的功能要求非常严格。如果你的App存在任何不符合苹果审核指南的功能,比如违反用户隐私政策、包含未经许可的功能或内容、存在虚假信息等,都会导致审核失败。解决方...

apk反编译签名工具常用的推荐

APK反编译签名工具是一种用于对Android应用进行逆向工程的工具。通过使用这种工具,开发者可以分析已经编译的APK文件,并获得应用程序的源代码、资源文件和其他相关信息。同时,该工具还能够用于检查APK的签名,以确保应用程序的完整性和安全性。APK反编译签名工具的原理是通过解析APK文件的文件结构...

ios用xcode开发怎么打包

开发 iOS 应用程序时,使用 Xcode 软件来进行打包是很常见的。本文将详细介绍使用 Xcode 进行 iOS 应用程序打包的原理和步骤。1. 前提条件在开始之前,需要确保你已经:- 安装了最新版本的 Xcode 软件。- 拥有一个有效的 iOS 开发者账号。2. 创建一个应用程序首先,你需要在...

ios离线打包超详细的教程

在iOS开发中,离线打包是指将项目文件转换为二进制文件并下载到本地设备中进行安装和运行。与在线下载需要依赖网络连接不同,离线打包能够脱离网络环境,更加方便稳定地进行测试和分发。本文将从原理和详细步骤两个方面,为大家介绍iOS离线打包的方法。一、原理介绍:离线打包的原理是将iOS项目的源代码、资源文件...

网页可以生成app吗?安全吗?

是的,网页可以生成APP,这种类型的APP被称为“Web应用程序”(Web App)或“渐进式Web应用程序”(Progressive Web App,简称PWA)。这类应用在安全性、性能和兼容性等方面可以与原生APP相媲美,同时又具有一定的跨平台优势。接下来,我们将了解一下Web应用程序的原理和详...

uniapp如何打包ios

Uniapp 是一种跨平台开发框架,可以用于同时开发iOS和Android应用。在这篇文章中,我将详细介绍如何使用Uniapp打包iOS应用的原理和步骤。Uniapp的原理是通过将一份通用的代码进行转译,并生成对应的iOS和Android平台的代码。因此,开发者可以使用相同的代码和逻辑来开发不同平台...