【Google pay接入】获取refresh_token
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Google pay接入】获取refresh_token相关的知识,希望对你有一定的参考价值。
参考技术A 完整效果:https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=https://developers.google.com&client_id=111222333-aaabbbccc.apps.googleusercontent.com
输入之后,就会跳转到这个界面,就按照提示选择你的登录邮箱登录,之后一直continue,最后,url里就替换成了code和scope
替换成code和scope的效果
我们需要的有效数据是code的值,拿到code的值之后进行urldecode解码
使用postman或者curl,或者你熟悉的http工具,创建http请求,postman的请求大致如下:
地址: https://accounts.google.com/o/oauth2/token
请求方式:post
参数:
grant_type=authorization_code
code=获取到的code(需要看看code中是否有%号,如果有需要urldecode)
client_id=创建api项目是的clientId(客户端ID)
client_secret=创建api项目时的clientSecret(客户端密钥)
redirect_uri=创建api项目时的重定向地址
如果此处返回,这个错误
应该是你上一步获取的code过期了,重新执行一下第12步,获取新的code替换下就好。
之前申请得到的refresh_token的默认有效期是7天,需要在包过审之后,登录Google Cloud Platform后台,在OAuth consent screen中对应用的状态进行修改,改成In production状态(发布中),然后再重新获取一遍refresh_token
Google Pay支付遇到的问题
Google Pay
我们发现要显示的任何SKU,检查您的互联网连接并确保您的Google Developer Console设置正确。
应用未通过审核或应用内商品ID传入有误,要先测内部测试版(bate、alpha)通过,再正式测支付。
无法购买您要的商品
1.测试版 APK 请上传至 Alpha/Beta 任一渠道,并且登入加入测试的测试者帐号,下载 APK 后再进行测试。模拟器跟本地安装的测试结果是无法验证的。
在"APK"页面里,有一个“选择使用网址”,把这个网址给你的测试人员,让你的测试人员用他的google账号点进去,点那个“成为测试人员”(前提是你把他加进了测试人员列表), 只有这样才能测试商品支付。
2.请确认应用的 Manifest 中是否有添加正确的权限 (com.android.vending.BILLING)
3. 保证 versionCode 和版本号与你上传的apk的包的一样。
4.请确认测试用户都已添加至许可测试的区块
5. 保证后台和你传入的购买商品的 id 一致,请确认打包apk的包名以及签名皆一致。
6.打开手机的账号管理,把测试账号放在第一个位置,或者干脆删除其他非测试账号。
7.可能封闭式测试、内部测试同时开启造成测试用户乱序。
8.检查账号所在地是不是在开启地区/国家范围内(正常情况不需要)
9.其他可能性包括连结内购服务的装置不支援最新的 IAB version 3,可能只支援版本 2,这方面也请多加确认。(谷歌技术团队提醒)
[DF-AA-01]
从服务器检索信息时出错。[DF-AA-01]
1.谷歌服务未开启;
2.网络连接不到谷歌。
解决方案:设置 -> 应用设置 -> 授权管理 -> 自启动管理 -> 打开 "Google 服务框架"
[DF-AA-20]
从服务器检索信息时出错。[DF-AA-20]
1.应用没有在Google Play商店发布,至少是alpha版本;
2.应用或者开发者账号被封。
请点击:Goole Pay支付接入
支付失败、无法支付、购买无效
1.新增国家/地区,但是汇率未刷新。(刷新汇率即可,下面问题同样有效)
2.依照以下步骤清除装置上的缓存试试看是否问题仍持续发生。
- 打开设备的主设置应用。
- 点按应用或应用管理器(显示选项可能因设备而异)。
- 点按 Google Play 商店。
- 点按存储。
- 依次点按清除缓存 > 确定。
- 依次点按清除数据 > 确定。
- 点按后退箭头以返回主菜单。
- 选择下载内容或内容下载管理器。
- 依次点按清除缓存 > 确定。
- 依次点按清除数据 > 确定。
- 重新启动应用。
弹窗提示:我们这边除了点错误,请重试。
1、回传值是 5 且又遭遇 "this version of the application is not configured for billing" 的错误讯息,请同时确认以下排解资讯:
- AndroidManifest 文件中一定要包含 "com.android.vending.BILLING" 权限。
- APK 是在发布模式下构建的。
- APK 已使用发行证书签名 (重要提示:应用程式如果通过 “Google Play 应用签名计划”,仅在您直接从 Google Play 商店下载时才有效)。
- APK 至少要上传到 Play 控制台的 Alpha / Beta 测试轨道,且生效时间大约需要 24-48 小时。
- 欲测试的应用内商品必须上传到 Play 控制台 且其状态均需要为 "有效"。
- 测试帐号须正确添加至 Play 控制台的「许可测试」页面上。
onPurchasesUpdated方法中,BillingResult.getResponseCode() == BillingClient.BillingResponseCode.DEVELOPER_ERROR
2、因Android Studio提示A newer version of com.android.billingclient:billing than 3.0.0 is available: 3.0.3,我就将支付升级,结果无法识别api
官方文档上的是implementation 'com.android.billingclient:billing:3.0.0',
将 implementation 'com.android.billingclient:billing:3.0.3'改为 implementation 'com.android.billingclient:billing:3.0.0'
原因:谷歌还不支持3.0.3使用时谷歌自己会报错
官方文档不一定都对,例如:facebook官方文档的版本一直是 implementation 'com.facebook.android:facebook-android-sdk:[5,6)'
实际上已经过去无数版本目前的版本是 implementation 'com.facebook.android:facebook-android-sdk:9.1.1'
所以接入SDK还是结合文档加实际情况多方面考虑排查问题。
支付返回CODE(BillingResponseCode)
public @interface BillingResponseCode
int SERVICE_TIMEOUT = -3;//服务超时
int FEATURE_NOT_SUPPORTED = -2;//不支持功能
int SERVICE_DISCONNECTED = -1;//服务单元已断开
int OK = 0;//成功
int USER_CANCELED = 1;//用户按上一步或取消对话框
int SERVICE_UNAVAILABLE = 2;//网络连接断开
int BILLING_UNAVAILABLE = 3;//所请求的类型不支持 Google Play 结算服务 AIDL 版本
int ITEM_UNAVAILABLE = 4;//请求的商品已不再出售。
int DEVELOPER_ERROR = 5;//提供给 API 的参数无效。此错误也可能说明应用未针对结算服务正确签名或设置,或者在其清单中缺少必要的权限。
int ERROR = 6;//API 操作期间出现严重错误
int ITEM_ALREADY_OWNED = 7;//未能购买,因为已经拥有此商品
int ITEM_NOT_OWNED = 8;//未能消费,因为尚未拥有此商品
无法用于此购买交易
如果买家所用付款方式无效(如使用过期的信用卡、交易金额超出运营商代扣额度上限等),也会导致交易失败。买家需要改用其他有效的付款方式,才能购买您的应用或应用内商品。
检查付款是否通过
如果您的付款没有正确通过,您将不会收到您尝试购买的应用内购买。检查它是否通过网络上的 Play 商店应用或 Google Play:
使用 Play 商店应用:
1.在您的 Android 手机或平板电脑上,打开 Google Play 商店应用谷歌播放。
2.点按菜单菜单 接着 帐户。
3.点击购买历史记录以查看您的订单。
使用网络浏览器:
1.在您的计算机上,转到您的Google Play 帐户。
2.向下滚动到购买历史记录。
3.寻找应用内购买。
重启设备
有时重启设备有助于解决应用内购买问题。重新启动:
1.在您的移动设备上,按住电源按钮。
2.点击关机或重启(根据您的设备,此文本可能会有所不同)。
3.如果需要,再次按住电源按钮以重新打开设备。
4.等待设备启动备份。
5.重新打开应用程序或游戏并检查应用程序内购买是否已交付。
更新 Play 商店应用
当您运行最新版本的 Play 商店时,应用内购买效果最佳。要更新应用程序:
1.在您的 Android 手机或平板电脑上,打开 Google Play 商店应用谷歌播放。
2.点击菜单菜单 接着 设置 设置 接着 Build version或Play Store version。
构建版本或 Play 商店版本通常位于设置列表的底部。
3.该应用程序将更新,或通知您您的版本是最新的。
确保日期和时间正确
如果您最近更改了设备上的日期和时间,请确保日期和时间正确:
1.在 Android 手机或平板电脑上,打开设备的“设置”应用设置。
2.点按日期和时间。
3.查找“自动日期和时间”和“自动时区”并检查它们是否已打开或关闭。然后按照下面的相关步骤操作。
如果“自动日期和时间”和“自动时区”关闭
1.打开日期和时间以及时区设置。
2.等待几分钟,然后检查您的问题是否已解决。
3.如果不是,请尝试重新启动设备并再次检查。
如果打开“自动日期和时间”和“自动时区”
如果这两个设置都打开,则日期和时间可能不是您的问题。检查您的连接并重新启动您的设备,或尝试其他故障排除步骤。
Google Play 接受的付款方式注意事项
信用卡或借记卡
注意:通过 Google Play 接受的卡片类型可能会有所不同。如果您的卡在您认为应该时无法使用,请联系您的银行或发卡机构寻求帮助。使用信用卡或借记卡时,您可能会注意到帐户上的临时授权。
手机计费
注意: 当您注册手机帐单时,您可能会在手机上看到以“DCB”或“DCB_Association”开头的 SMS(文本消息)。该消息会自动生成并发送,以完成您 Google Play 帐户的手机帐单注册。
手机计费疑难解答
如果您没有看到运营商代扣选项,请记住:
- 手机帐单仅可使用 Google Play 商店应用程序进行。它在计算机或移动浏览器上的 Google Play 网站上不可用。
- 您在运营商处的帐户必须信誉良好。
- 如果您使用带有双 SIM 卡的设备,请确保将正确的 SIM 卡放入插槽 1,并将插槽 2 留空。
- 移动电话计费在有 root 权限的设备上不可用。
- 某些移动电话运营商不能用于支付订阅费用。
请咨询您的运营商以确保:
- 您没有超过运营商的每月支出限额。
- 您的设备和服务计划允许购买高级内容。
- 您的设备可以使用手机计费。
取消的购买
未成功获得运营商授权的购买将立即取消。如需有关不成功的移动电话账单购买的帮助,请联系您的移动服务提供商。
电子钱包
您可以使用 Touch 'n Go Wallet 在 Google Play 上购买应用程序和数字内容。您需要有足够余额的已注册Touch 'n Go 钱包帐户才能在 Google Play 上使用此服务。
查找您可以使用的付款方式
可用的付款方式因国家/地区而异。
Google Play登录报错
做Google Play登录获取不到用户信息Google Play登录
1.查看凿洞网络是否开启(12501)
2.查看代码是否有误
3.查看此应用是否加入Google Play应用签名计划
如果加入涉及三方的都要使用应用签名证书下的资料
例:google登录中开发者账号>API权限>关联的项目>选中你的关联项目
例:facebook中登录的keyhash要做调整
但是:打包时还是用原来的jks文件
使用firebase
Facebook登录
做Facebook登录获取不到用户信息
前提是测试时正常,发版后查看keyhash配制是否正确
提示:"登录错误:登录此应用程序时出错。请稍后再试。"
1.简单的临时解决方案是从您连接的Facebook应用程序中删除Deezer,并使用您的Facebook帐户重新连接到Deezer,该帐户无法更改您的密码。至少这适用于使用Facebook创建的Spotify帐户,现在也存在这个问题。
2.keyhash配制是否正确
keyhash可多个并存
web和app应用,或者打包电脑不同存在多个keyhash
web获取方式,直接打开会给一个keyhash
app应用:
1:keytool -exportcert -alias androiddebugkey -keystore "C:\\Users\\USERNAME\\.android\\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\\bin\\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\\bin\\openssl" base64
2:放在自己的Activity界面运行生成
try
PackageInfo info = getPackageManager().getPackageInfo(
"com.ceshi.demo",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures)
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.e("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
catch (PackageManager.NameNotFoundException e)
catch (NoSuchAlgorithmException e)
谷歌提问
让应用商店详情的介绍文字更改颜色
答:在编辑文字时,加入 html 的色彩编码。例如:<font color="blue">您的文字 </font>
参考链接:快去找吧
预注册数量没有变化
答:有一定的数量要求,未达到数量要求则会一直显示为0
预注册:
在后台的预注册数量数据,每日更新时间为PST 12点。若您在此时间吴看到任何数据更新,便代表预注册人数低于一定数值因而没显现出来,因此请您等待几小时后再查看。
相关推荐
Mycard支付
ONE store支付
Google Pay接入
aab打包
以上是关于【Google pay接入】获取refresh_token的主要内容,如果未能解决你的问题,请参考以下文章
Google Pay API - 在没有 JWT 的情况下向 Google Pay 应用程序插入通行证