有海外开发者向我们提问:我在应用中集成了华为应用内支付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. 分享一份550多个Linux命令的文档,按照命令首字母索引排序

    输入一个命令,让我给你一个关于它的完美解释! 众所周知,Linux命令是IT人必须掌握的一个技能,有了它,我们可以部署和维护各种各样的服务和应用.但是,大部分的Linux命令我们不一定记得住,而别是各 ...

  2. python mysql类

    import pymysql class MysqlHelper(object): conn = None def __init__(self, host, username, password, d ...

  3. 从0到1认识XHTML

    XHTML概念 XHTML是一种可扩展超文本标记语言,与HTML(超文本标记语言)类似,不过在语法上更加严格.XHTML是以XML(是一种必须正确标记且格式良好的标记语言)应用方式定义的HTML,与h ...

  4. java03类与对象相关问题

    1.使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向他查询"你已经创建了几个对象" 1 package 第四五周; 2 3 public ...

  5. final修饰符(2)

    final局部变量 系统不会对局部变量进行初始化,局部变量必须又程序员显示初始化,因此使用final修饰局部变量,可以在声明时指定默认值,也可以在后面的代码中对该final变量赋初始值,但只能赋值一次 ...

  6. fork、父进程和子进程

    进程 什么是进程?进程是一个运行中的程序实体,拥有独立的堆栈.内存空间和逻辑控制流. 这是标准的进程概念.让我们通过操作系统的fork函数看看这个抽象的概念是怎么在进程的实现中体现出来的. 构成要素 ...

  7. 国产深度学习框架mindspore-1.3.0 gpu版本无法进行源码编译

    官网地址: https://www.mindspore.cn/install 所有依赖环境 进行sudo make install 安装,最终报错: 错误记录信息: cat     /tmp/mind ...

  8. CAS 原理 应用

    原子CAS操作 原子操作指令里,有原子加,原子减,cas到底是什么呢? 首先看一段代码, bool compare_and_swap(int *accum, int *dest, int newval ...

  9. JS 实现一个 LRU 算法

    LRU 是 Least Recently Used 的缩写,即最近最少使用,是一种常用的页面置换算法,选择内存中最近最久未使用的页面予以淘汰. 可用的 NodeJS 库见node-lru-cache ...

  10. 【Web动画】科技感十足的暗黑字符雨动画

    本文将使用纯 CSS,带大家一步一步实现一个这样的科幻字符跳动背景动画.类似于这样的字符雨动画: 或者是类似于这样的: 运用在一些类似科技主题的背景之上,非常的添彩. 文字的竖排 首先第一步,就是需要 ...