有海外开发者向我们提问:我在应用中集成了华为应用内支付SDK(测试购买订阅型商品),按照文档说明,在服务器去请求验证购买Token接口的时候返回了{"responseCode":"6","responseMessage":"rights invalid"}。此错误在文档FAQ中有提到:建议优先检查获取AccessToken时的appid和实际请求参数purchaseToken关联的appid是否同一个。我只有一组项目,一组客户端ID及客户端秘钥,因此按理说appid应该是相同的。我不知道是哪里有问题? 我该怎么配置。

问题详情见链接:https://stackoverflow.com/questions/64613379/huawei-in-app-purchase-token-verification-unexpected-error-rights-invalid

解决方案

  1. 根据开发者提供的代码显示他的接口用错了,他使用的是Order服务购买Token校验,应该使用Subscription服务验证购买Token

Order服务购买Token校验只针对非订阅型商品,包括消耗型商品和非消耗型商品。应用可以调用本接口向华为支付服务器校验支付结果中的购买令牌,确认支付结果的准确性。

Subscription服务验证购买Token只针对订阅型商品。此接口用于校验购买的商品,判断商品是否已经成功购买,是否在有效期内。

Order服务验证购买Token请求示例如下:

POST /applications/purchases/tokens/verify
Content-Type: application/json; charset=UTF-8
Authorization: Basic QVQ6Q1YzQ1NPbVlBaGwrZUtRWExtMTBVV2pyWXZHTVF4MmYvcVMya1B0ZElLY3UwaFJrdFNTMmxwdk1FQkIyYldXWGt0REVaR3I4UjFUTTRLMVlmNXdwWU80RG04THdXQWxjaFhEYjBMUjBNTUJtWnFYcGFtazc3THN3UnFJbkhHK28xekdqRzNSMg==
Accept: application/json
Content-Length: 143
{
"purchaseToken": "00000173741056a37eef310dff9c6a86fec57efafe318ae478e52d9c4261994d64c8f6fc8ea1abbdx5347.5.3089",
"productId": "prd1"
}

Subscription服务验证购买Token请求示例如下:

POST /sub/applications/v2/purchases/get
Content-Type: application/json; charset=UTF-8
Authorization: Basic QVQ6Q1YzQ1NPbVlBaGwrZUtRWExtMTBVV2pyWXZHTVF4MmYvcVMya1B0ZElLY3UwaFJrdFNTMmxwdk1FQkIyYldXWGt0REVaR3I4UjFUTTRLMVlmNXdwWU80RG04THdXQWxjaFhEYjBMUjBNTUJtWnFYcGFtazc3THN3UnFJbkhHK28xekdqRzNSMg==
Accept: application/json
Content-Length: 171
{
"purchaseToken": "00000173741056a37eef310dff9c6a86fec57efafe318ae478e52d9c4261994d64c8f6fc8ea1abbdx5347.5.3089",
"subscriptionId": "1581789719266.D40972AC.3089"
}
  1. 订阅商品的验证如下:

参数:subscriptionId;purchaseToken

接口Url: {rootUrl}/sub/applications/v2/purchases/get

rootURL

中国站点: https://subscr-drcn.iap.hicloud.com

德国站点: https://subscr-dre.iap.hicloud.com

新加坡站点: https://subscr-dra.iap.hicloud.com

俄罗斯站点: https://subscr-drru.iap.hicloud.com

AppTouch 德国站点: https://subscr-at-dre.iap.dbankcloud.com

AppTouch新加坡站点: https://subscr-at-dra.iap.dbankcloud.com

上述介绍了App集成应用内支付SDK后验证购买Token接口时返回“rights invalid”的解决方案,那么有人可能要问了,华为应用内支付究竟是什么呢?有什么功能?

关于HMS IAP Kit

华为应用内支付服务(In-App Purchases,IAP)为APP提供便捷的应用内支付体验和简便的接入流程。App通过集成IAP SDK,再调用IAP SDK接口启动IAP收银台,即可实现应用内支付。聚合多种支付通道,支持全球支付,为应用提供便捷的应用内支付体验,通过应用内支付服务,用户可以在应用内购买各种类型的商品或服务,包括普通虚拟商品和订阅商品服务,助力开发者的商业变现。

快速体验华为应用内支付服务教程和开发实例请参见快速入门指南

Stack Overflow 与HMS

作为全球最大的编程问答社区,Stack Overflow上每天都会有来自全球各地不同国家的开发者在上面提问各种编程问题。我们也在Stack Overflow上开了专栏:Stack Overflow 欢迎大家在上面提问在集成HMS Core过程中遇到的各种编程问题。

欲了解更多详情,请参阅:

华为应用内支付服务官网

应用内支付开发指南

示例代码

华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

接入华为应用内支付,验证购买Token接口,返回“rights invalid”的更多相关文章

  1. 【FAQ】接入华为应用内支付服务常见问题解答

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  2. iOS- 给App添加内购& 验证购买iOS7新特性

    1.内购——应用内购买 我所说的内购——也可以说是应用内购买 大家都知道通过苹果应用程序商店有三种主要赚钱的方式: 1.直接收费(与国内大部分用户的消费习惯相悖,如果要收费,直接收高的,别收6块钱) ...

  3. 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...

  4. 【FAQ】干货满满,接入HMS Core应用内支付服务过程中一些常见问题总结(2)来啦

    HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.该服务支持客户端和服务端两种开发形式,具体可以参考官方文档 上次,我们分享和总 ...

  5. 【FAQ】应用内支付服务无法拉起支付页面常见原因分析和解决方法

    华为应用内支付服务(In-App Purchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种 ...

  6. SDK接入(2)之Android Google Play内支付(in-app Billing)接入

    SDK接入(2)之Android Google Play内支付(in-app Billing)接入 继上篇SDK接入(1)之Android Facebook SDK接入整理完Facebook接入流程之 ...

  7. SDK接入(3)之iOS内支付(In-App Purchase)接入

    SDK接入(3)之iOS内支付(In-App Purchase)接入 继整理了Android平台的SDK接入过程.再来分享下iOS平台的内支付(In-App Purchase)接入,作为笔者在游戏开发 ...

  8. Google play billing(Google play 内支付) 上篇

    写在前面: 最近Google貌似又被全面封杀了,幸好在此之前,把Google play billing弄完了,现在写篇 博客来做下记录.这篇博客一是自己做个记录,二是帮助其他有需要的人.因为现在基本登 ...

  9. Google play billing(Google play 内支付)

    准备工作 1. 通过Android SDK Manager下载extras中的Google Play services和Google Play Billing Library两个包. 2. 把下载的. ...

随机推荐

  1. Android Binder 进程间通讯机制梳理

    什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一.Binder的设计采用了面向对象的思想,在Binder通信模型的四 ...

  2. 64. Minimum Path Sum 动态规划

    description: Given a m x n grid filled with non-negative numbers, find a path from top left to botto ...

  3. linux中如何添加用户并赋予root权限详解

    #adduser username 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ## Allow root to run any commands anyw ...

  4. python使用笔记12--操作mysql数据库

    1.创建连接 1 import pymysql 2 connect = pymysql.connect(host='127.0.0.1', 3 user='root', 4 password='123 ...

  5. 短视频:用快影制作3D音乐视频

    用快影制作3D音乐视频1打开快影点击开始剪辑导入一张风景照片,按住照片向后拉到自己需要的时长2点击画中画,点击新增,画中画,导入一张照片3点击模板,选择圆形,调整圆形的大小,摆放到上面合适的位置,按照 ...

  6. modelsim 独立仿真vivado的IP核及仿真脚本

    Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...

  7. 6 Java基础整理 第六-八章

    1.封装 封装的目的是简化编程和增强安全性. 简化编程是指,封装可以让使用者不必了解具体类的内部实现细节,而只是要通过提供给外部访问的方法来访问类中的属性和方法 增强安全性是指,封装可以使某个属性只能 ...

  8. python 连接mysql数据库操作

    import pymysql.cursors # 连接数据库 connect = pymysql.Connect( host='localhost', port=3306, user='root', ...

  9. python基础之读取xml

    python怎么操作xml文件详细介绍链接:https://www.jb51.net/article/50812.htm 从结构上来说,xml很像常见的HTML超文本标记语言.不过超文本语言被设计用来 ...

  10. 旧VC项目dpiAware支持

    起因 工作原因,需要维护一款VS2008 SP1开发的MFC项目, 发现WIN10高分辨率下显示模糊,不考虑升级VC版本情况下尝试解决 尝试 新版本VC中Manifest Tool>Input ...