最近项目中需要接入海外SDK,进行支付,故选择Google Play支付。
1.首先要注意的是,Google官方控制台的项目创建和配置,配置出现问题的话会导致,支付调不起来。(配置教程,网上很多暂时就不搞了)
2.创建好项目不要忘了设置测试账号,测试账号很重要,测试账号最好是绑定国外的卡。如果是绑定中国大陆的信用卡,可能测试的时候你会发现,你这个账号好像并不能使用,因为谷歌在中国是不可以进行支付的。(原因是你的卡会有地址信息展示,国内的不可以,你可以试着改到国外)
3.谷歌账号的地区,一定要是国外的,中国不允许谷歌支付,会出现 code码为3 的情况(也可以切换地区)
4.目前谷歌官方推荐的是google play结算 方法,(网上很多都是之前的那种老方法)
下边是调用支付时返回的code码,看这个code码对比自己的错误。2020-12-04说下 code码为6 的情况,一般是由于网络原因。先检测网络是否翻墙,再Google Play商店是否能正常打开
//BILLING_RESPONSE_RESULT_OK 0 成功
//BILLING_RESPONSE_RESULT_USER_CANCELED 1 用户按上一步或取消对话框
//BILLING_RESPONSE_RESULT_SERVICE_UNAVAILABLE 2 网络连接断开
//BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE 3 所请求的类型不支持 Google Play 结算服务 AIDL 版本
//BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE 4 请求的商品已不再出售
//BILLING_RESPONSE_RESULT_DEVELOPER_ERROR 5 提供给 API 的参数无效。此错误也可能说明应用未针对 Google Play 结算服务正确签名或设置,或者在其清单中缺少必要的权限。
//BILLING_RESPONSE_RESULT_ERROR 6 API 操作期间出现严重错误
//BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED 7 未能购买,因为已经拥有此商品
//BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED 8 未能消费,因为尚未拥有此商品
5.弹出 “无法购买您想要的商品” ,“此版本的应用未配置为通过google play结算” 这种错误提示,原因有:一、由于 versionCode版本 与Google后台上传的安装包的版本不一致(这个千万要注意,上传的包和你本地测试的那个包不一致就会出现问题),二、签名不一致(部分人喜欢让谷歌来管理自己的证书,好多就会导致本地打包测试出现错误,将自己修改后的东西重新上传下包,以后再进行测试就不需要了)
6.支付验证时(支付 验证 json文件和谷歌离线推送的json文件是两个不同的json文件),需要将 Server account 所对应的邮件添加到测试组上
下面我就贴下支付管理类的代码,
public class AppGooglePay implements PurchasesUpdatedListener {
private static String TAG = "AppGooglePay";
//支付权限 key
private static final String BASE64_PUBLIC_KEY = "改为你自己的值BASE64";
//未初始化标记
public static final int BILLING_MANAGER_NOT_INIT = -1;
/*客户端*/
private BillingClient billingClient;
private final Activity mActivity;
//监听
private final BillingUpdatesListener mBillingUpdatesListener;
//是否连接成功
private boolean mIsServiceConnected;
//客户端当前状态
private @BillingClient.BillingResponseCode
int curBillingClientResponseCode = BillingClient.BillingResponseCode.SERVICE_DISCONNECTED;
//商品列表
private final List<Purchase> PurchaseList = new ArrayList<>();
//消耗令牌
private Set<String> mTokensToBeConsumed;
//监听 接口
public interface BillingUpdatesListener {
void onBillingClientSetupFinished();
void onConsumeFinished(String token, @BillingClient.BillingResponseCode int result);
void onPurchasesUpdated(List<Purchase> purchases);
void onFailedHandle(@BillingClient.BillingResponseCode int result);
}
/*
* 初始化
* */
public AppGooglePay(Activity activity, final BillingUpdatesListener updatesListener){
mActivity = activity;
mBillingUpdatesListener = updatesListener;
billingClient = BillingClient.newBuilder(mActivity).enablePendingPurchases().setListener(this).build();
Log.d(TAG, "开始设置信息");
startServiceConnection(new Runnable() { //连接 GooglePlay服务器
@Override
public void run() {