google内购-订阅模式

Android 从零开始了解Google订阅服务(一) 一、官方文档 Google Play 结算系统概览 https://developer.android.google.cn/google/play/billing 如果看看上面文档介绍,还是蒙蒙的,可以继续看下 订阅流程https://medium.com/androiddevelopers/subscriptions-101-for-android-apps-b7005a7e93a6如果你看仔细看完上面两个链接的内容,就可以到此结束了。如果因为某些原无法观看,可以继续往下看。 二、订阅流程简单.. 阅读详情

1.订单有变化接收google推送的接口,据此可以实现续订订单

/**
	 * 接收google推送接口
	 * @param body
	 * @param request
	 * @param response
	 * @return
	 */
	@ApiOperation(value = "google回调接口", notes = "google回调接口")
	 @RequestMapping(value = "googleNotify")
	    public String googleNotify(@RequestBody(required = false) byte[] body,HttpServletRequest request, HttpServletResponse response) {
	        logger.info("googleNotify==【google play 实时开发通知入口.......】");
	        String paramStr = null;
	            try {
	                //获取返回的内容,是一个字节数组
	                paramStr = new String(body, "utf-8");
	                //回调具体内容见下方
	                logger.info("googleNotify== params:"+paramStr);
	                googleService.googleNotify(paramStr);
	            } catch (Exception e) {
	                e.printStackTrace();
	            }
	        return "0";
	    }



@Override
    @Transactional(rollbackFor = Exception.class)
    public void googleNotify(String paramStr) {
        if (StringUtils.isNotBlank(paramStr)){
            JSONObject paramJson = new JSONObject();
            try {
                paramJson = JSONObject.parseObject(URLDecoder.decode(paramStr,"utf-8"));
                /**
                 * paramJson数据格式如下
                 * "message": {
                 *         "data": "ewogICAgInZlcnNpb24iOiAiMS4wIiwKICAgICJwYWNrYWdlTmFtZSI6ICLljIXlkI0iLAogICAgImV2ZW50VGltZU1pbGxpcyI6ICLml7bpl7TmiLMo5q+r56eSKSIsCiAgICAic3Vic2NyaXB0aW9uTm90aWZpY2F0aW9uIjogewogICAgICAgICJ2ZXJzaW9uIjogIjEuMCIsCiAgICAgICAgIm5vdGlmaWNhdGlvblR5cGUiOiA0LAogICAgICAgICJwdXJjaGFzZVRva2VuIjogIuaUr+S7mOS7pOeJjCIsCiAgICAgICAgInN1YnNjcmlwdGlvbklkIjogIuiuoumYheeahOWVhuWTgWlkIgogICAgfQp9",
                 *         "messageId": "消息id",
                 *         "message_id": "消息id",
                 *         "publishTime": "2019-11-14T03:58:43.608Z",
                 *         "publish_time": "2019-11-14T03:58:43.608Z"
                 *     },
                 */
                JSONObject msgJson = paramJson.getJSONObject("message");
                String data = msgJson.getString("data");
                logger.info("googleNotify data :"+paramStr);
                //data 是由base64加密,解密即可
                String developerNotificationStr = new String(Base64.getDecoder().decode(data), "UTF-8");
                JSONObject developerNotificationJson = JSONObject.parseObject(developerNotificationStr);
                /**
                 * developerNotificationJson数据格式如下
                 * subscriptionNotification订阅类型
                 * oneTimeProductNotification一次性类型
                 *  {
                 *      "version":"1.0",
                 *       "packageName":"包名",
                 *       "eventTimeMillis":"时间戳(毫秒)",
                 *       "subscriptionNotification":{
                 *          "version":"1.0",
                 *          "notificationType":4,
                 *          "purchaseToken":"支付令牌",
                 *          "subscriptionId":"订阅的商品id"
                 *      }
                 *  }
                 */
                String packageName = developerNotificationJson.getString("packageName");
                JSONObject subscriptionNotificationJson = developerNotificationJson.getJSONObject("subscriptionNotification");
                logger.info("订阅后的收到的通知信息"+subscriptionNotificationJson.toJSONString());
                String purchaseToken = subscriptionNotificationJson.getString("purchaseToken");
                String subscriptionId = subscriptionNotificationJson.getString("subscriptionId");
                /**
                 * subscriptionNotification订阅类型
                 * notificationType    int
                 * 通知的类型。它可以具有以下值:
                 * (1) SUBSCRIPTION_RECOVERED - 从帐号保留状态恢复了订阅。
                 * (2) SUBSCRIPTION_RENEWED - 续订了处于活动状态的订阅。
                 * (3) SUBSCRIPTION_CANCELED - 自愿或非自愿地取消了订阅。如果是自愿取消,在用户取消时发送。
            
Google 开发者平台配置回调 操作步骤:登录之后选择app ,找到Pub/Sub,进入,添加主题。 阅读详情

相关推荐

Java服务端实现Google Pay支付功能

全网最全代码、最清晰服务端处理Google Pay,最清晰讲解Google Pay集成逻辑。

jack2350536098的博客 1万+

android 实现google 订阅支付

在 Android 上实现 Google Play 订阅支付是一项系统工程。2026 年的支付架构已全面转向“订阅 2.0”,即的模式。

u011324501的专栏 647

google订阅开发

前言 本文主要说的是服务端关于开发google订阅的相关工作,结合了google api的调用通过服务账号和配置google实时开发者通知,来接收google订阅通知 一.准备工作 创建开发者账号下服务账号 官方推荐服务端到服务端调用使用服务账号进行,步骤如下 1.在 Google Play 管理中心转到 API 访问权限页面。 2.点击服务帐号下的创建服务帐号。 3.按照页面上的说明创建您的服务帐号。 4.在 Google Developers Console 中创建服务帐号后,请点击完成。API 访问权

大魔王技术之家 3820

Publisher/Subscriber 订阅-发布模式原理解析

Publisher/Subscriber 订阅-发布模式原理解析

weixin_47692652的博客 4705

Android订阅服务的正确姿势:Google Play Billing Library实现指南

在Google Play平台上,订阅服务是一种常见的盈利模式,它允许用户定期支付以获得持续的服务或内容更新。为了实现这一功能,我们需要使用Google Play Billing Library来处理订阅的创建、管理和验证。

m0_62153576的博客 371

Unity集成Google Play内购V4完整源码实战项目

Google Play Billing Library V4 是谷歌推出的最新一代应用内支付解决方案,旨在提升交易安全性、简化集成流程并增强对订阅类商品的支持。相比V3版本,V4引入了更清晰的异步API设计,采用和等现代化接口,提升了购买流程的稳定性与用户体验。同时,V4强化了对动态交付、促销优惠和家庭共享等高级特性的支持,为开发者提供更灵活的商业化能力。其模块化设计也便于在Unity等跨平台引擎中进行封装与扩展。

weixin_32456485的博客 984

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3304

ESP32固定翼航模硬件设计与飞行力学解析

固定翼无人机是嵌入式控制与空气动力学交叉实践的经典载体,其飞行稳定性本质源于重心、气动中心与控制面的物理耦合关系。理解静稳定度(Static Margin)、升力系数调控、偏航力矩生成等基础原理,是实现可靠姿态控制的前提。在低成本工程约束下,材料刚度、结构弹性与电机-驱动协同设计共同决定了系统动态响应边界。ESP32平台凭借高精度PWM、低功耗双模无线及丰富GPIO,成为教学级航模开发的理想主控;而魔术贴基板、可调电池配重、柔性尾翼等创新结构,则将抽象的飞行力学概念转化为可测量、可调试的实体对象,广泛应用于

weixin_29859471的博客 365

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1163

SAP特殊采购类80实战:跨工厂生产配置避坑指南(附完整测试流程)

本文深入解析SAP特殊采购类80在跨工厂生产场景下的实战应用与配置要点。文章从核心业务逻辑出发,详细拆解了后台配置、主数据与BOM的“双工厂”思维模式,并提供了从创建需求到成品收货的完整测试流程。重点揭示了多层BOM下的需求传递陷阱及常见报错解决方案,旨在帮助SAP顾问及用户规避实施风险,实现资源的灵活调度与流程自动化。

wind6的博客 1139

mobaXterm连接vmWare虚拟机上的centOS7提示连接失败的解决方法

1.问题描述: mobaXterm安装后连接虚拟机vmWare上的centOS7发现连接不上,如下图所示: 2.解决方法 先是查了一下centOS的ip 开始错误的以为 virbr0: 后面的inet就是虚拟机的IP 实则不然(正确的ip是在ens33后面的inet中的ip,大佬们勿喷) 这个值需要配置一下的,具体配置过程如下: step1: 进入centOS下的/...

hss19214的博客 7890

Openclaw错误分析与解决方案之:Agent couldn’t generate a response.

Openclaw错误分析与解决方案之:Agent couldn't generate a response. Note: some tool actions may have already been executed — please verify before retrying.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1315

《派出你的AI同事:WorkBuddy案例实战》055:客服工单自动分类与话术生成

客服工单自动分类与话术生成 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 281

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: springboot发送email小工具
下一篇: Linux删除除了某个文件之外的其他所有文件
豆丁
博客等级 码龄14年 8粉丝 15原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值