百度申请完域名怎么建设网站,在沈阳做一个展示网站多少钱,顺义区专业网站制作网站建设,响应式网站设计尺寸一、说明
由于本人在开发ios订阅类型支付接入的时候#xff0c;遇到了很多坑#xff0c;也查了不少资料#xff0c;逐步完善了整个ios订阅支付服务端接入的功能#xff0c;在这里写下总结和一些注意事项的记录#xff0c;方便未来需要重新接入或者避免一些不必要的坑,这里…一、说明
由于本人在开发ios订阅类型支付接入的时候遇到了很多坑也查了不少资料逐步完善了整个ios订阅支付服务端接入的功能在这里写下总结和一些注意事项的记录方便未来需要重新接入或者避免一些不必要的坑,这里主要讲的是服务端的接入。 二、接入原因
客户端实现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, //订单产品idapple后台支付配置的参数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为测试环境的收据请求到了正式环境