vonfly
vonfly
  • 发布:2024-01-27 21:14
  • 更新:2024-01-29 11:22
  • 阅读:329

【报Bug】uniapp 苹果内购买订阅产品成功 再取消后为什么无法复购?

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows10 v2009 build19045.3930

HBuilderX类型: 正式

HBuilderX版本号: 3.99

手机系统: iOS

手机系统版本号: iOS 15

手机厂商: 苹果

手机机型: iPhone 6s Plus

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

购买订阅产品,按照正常支付流程没有问题,但是第一次购买订阅产品成功后,手动在App Store中手动取消产品订阅,再回到app内中复购则无法成功拉起支付,并且transaction 中username字段会出现丢失的情况

// 开发者服务器创建订单返回username信息  
  const orderId = await this.createOrder({  
          productId: this.productId  
   });  

 // 请求苹果支付  
  const transaction = await this._iap.requestPayment({  
            productid: this.productId,  
            manualFinishTransaction: true,  
            username: username + orderId  
    });

预期结果:

可以重新拉起订阅产品的支付

实际结果:

无法拉起,并会存在username丢失问题

bug描述:

uniapp内部使用苹果内购(IAP),购买消耗类产品可以成功拉起支付并支付成功。支付订阅产品的时候首次可以支付成功,但是在App Store中手动取消产品订阅,再回到app内中复购则无法成功拉起支付,使怎么回事呢?

支付环境:沙盒环境

2024-01-27 21:14 负责人:无 分享
已邀请:
DCloud_iOS_WZT

DCloud_iOS_WZT

username对于苹果那边不是用来关联订单号的 而是用来防刷的 在苹果那边就是有丢失的场景
username为空时需要添加其他关联机制来处理 参考https://shalliy.github.io/2018/07/31/iOS%E5%86%85%E8%B4%AD%EF%BC%88IAP%EF%BC%89%E9%82%A3%E4%BA%9B%E4%BA%8B/

https://tech.gotokeep.com/post/2018/12/in-app-purchase/

  • vonfly (作者)

    订阅产品复购问题这个如何处理呢?就是用户在App Store中手动取消产品订阅,再回到app内中复购则无法成功拉起支付的问题

    2024-01-29 11:26

  • DCloud_iOS_WZT

    回复 vonfly: 用restore 每次点击购买前先restore看有没有历史

    2024-01-29 11:34

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 我现在的逻辑是初次进入支付页面的时候,也会用restore。处理逻辑为transactionState 为1的情况就会关闭订单,但是订阅产品会出现transactionState 为3的情况 这个时候支付也没有办法拉起

    2024-01-29 11:55

  • DCloud_iOS_WZT

    回复 vonfly: 为3的时候标识已经购买过了 你拿到这个票据去服务器校验

    2024-01-29 12:19

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 我现在拿到3的场景为 首次订阅成功后 我手动在苹果手机 设置->App Store->沙盒账户里面取消了订阅,再回到app内购买连续包月产品 这个时候就无法拉起支付了

    2024-01-30 17:18

  • DCloud_iOS_WZT

    回复 vonfly: 取消订阅是指到期后不自动续费了 而不是这次支付的产品退款

    2024-01-30 18:16

  • DCloud_iOS_WZT

    回复 vonfly: https://uniapp.dcloud.net.cn/api/plugins/payment.html#%E6%B2%99%E7%AE%B1%E8%B4%A6%E5%8F%B7


    看下沙箱账号 上面的注意事项 沙箱环境重复购买商品 需要清除购买记录或重新添加沙盒测试账号

    2024-01-30 18:19

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 想确认下 透传的username是每笔订单都不一样,还是可以和用户身份挂钩,就是同一个用户每笔订单的username都是一样的?

    2024-02-06 11:11

  • DCloud_iOS_WZT

    回复 vonfly: 你可以用来当做订单号传 但是要处理好 username丢失的场景,苹果官方对于这个字段定义 是用来防刷的不是用来绑定业务的 可以参考苹果官网和https://tech.gotokeep.com/post/2018/12/in-app-purchase/

    2024-02-18 12:40

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 有ios 版的hello uniapp iap的支付代码demo吗,想参考一下

    2024-02-18 18:42

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 我后续的测试发现了一个问题,就是订阅产品首次购买后transactionState为1,交易成功了,也通过了苹果服务器的校验。但是后面再进入订阅产品购买页面使用restoreCompletedTransactions api检测未关闭的订单时候发现之前购买的订阅产品记录还有,并且transactionState 变为了3 是什么意思呢?

    2024-02-20 11:11

  • DCloud_iOS_WZT

    回复 vonfly: 你自己没有finish订单吧

    2024-02-20 12:54

  • DCloud_iOS_WZT

    回复 vonfly: 3是已购

    2024-02-20 12:55

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 确认是已经关闭了的,因为购买消耗类产品成功后再使用restoreCompletedTransactions api检测是返回的空数组,但是购买订阅的产品就是不行。

    2024-02-20 13:46

  • DCloud_iOS_WZT

    回复 vonfly: 这个没问题 订阅类的会有存在的历史记录 怕你换设备查不到

    2024-02-20 15:06

  • vonfly (作者)

    回复 DCloud_iOS_WZT: 苹果手机 设置->App Store->沙盒账户里面取消了订阅,再回到app内购买订阅产品 这个时候就无法拉起支付了,会直接返回支付的结果,同时复购也没有真正成功是怎么回事呢?

    2024-02-20 15:45

  • PenGuin1

    回复 vonfly: 请问解决了吗 我碰到了一样的问题

    2024-11-05 17:08

  • vonfly (作者)

    回复 PenGuin1: 官方的处理机制应该是有问题

    2024-11-11 09:47

要回复问题请先登录注册