支付流程说明
注意:接入登录和支付后如果有关类找不到,需要接入核心库和网络库
1 | implementation 'com.github.muyishuangfeng:YKCore:1.0.0' |
为了保证支付的安全,sdk采用了Android支付平台(Google Play和OneStore)验证和LT服务器验证两种方式,业务流程图如下:
GooglePlay 接入
(1)、客户端调用支付模块代码,由SDK向LT服务器发起一个订单请求;
(2)、拿到服务器给的订单ID后,SDK发起Google Play支付;
(3)、Google Play支付返回结果后,拿到Google Play支付成功的token信息;
(4)、SDK把Google play返回的订单号token等信息发给服务端,LT服务器向Google Play服务器校验;
(5)、服务端对Google play服务器响应数据做处理和校验订单的合法性;
(6)、通过服务器验证的结果来确定支付的结果;
(7)、支付成功回调 支付成功回调的使用方法: 需要CP服务器建立一个API供乐推服务调用 回调地址所接受的参数格式
1 | METHOD: POST |
Google Play 网络库接入说明
1、接入前提
1、手机必须支持Google 服务2、手机必须有Google服务的套件,并且Google Play 服务账号和Google Play 账号必须保持一致(要不会导致Google 支付调不起来)
3、VPN必须保持打开状态
2、在project 下的build 导入仓库地址
maven { url "https://jitpack.io" }
3、在moudle下面的build文件下添加网络库依赖
implementation 'com.github.muyishuangfeng:YKGooglePlay:1.0.2'
4、在moudle的build文件夹下的android —>defaultConfig 相关配置
defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } }
1、初始化参数说明
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
debug | boolean | 否 | 是否开启debug模式 |
goodsID | String | 是 | 服务器配置的id |
requestCode | int | 是 | 支付请求码 |
productID | String | 是 | 内购商品唯一ID |
googlePlay | boolean | 是 | 是否添加GooglePlay支付 |
payTest | int | 是 | 是否是沙盒测试:1是,0否 |
publicKey | String | 是 | Google console配置的公钥 |
Target | int | 是 | 是否开启Google Play支付 |
RechargeObject | bean | 是 | 支付配置的参数 |
OnRechargeListener | Interface | 是 | 支付回调接口 |
2、支付调用方式
1、初始化(刚进入应用或者支付页面的时候配置)
private void init() { YKGameOptions options = new YKGameOptions.Builder(this) .debug(true) .publicKey(base64EncodedPublicKey) .payTest(0) .goodsID(productID, mGoodsID) .googlePlay(true) .requestCode(selfRequestCode) .build(); YKGameSdk.init(options); }
- 2、接口回调(可以写成匿名内部类的方式也可以写成全局方式)
OnRechargeListener mOnRechargeListener = new OnRechargeListener() {
@Override
public void onState(Activity activity, RechargeResult result) {
switch (result.state) {
case RechargeResult.STATE_RECHARGE_SUCCESS://支付成功回调
mTxtResult.setText(result.getResultModel().getCode() + "======");
break;
case RechargeResult.STATE_RECHARGE_START://支付开始回调
Log.e(TAG, "开始支付");
break;
case RechargeResult.STATE_RECHARGE_FAILED://支付失败回调
Log.e(TAG, "支付错误" + result.getErrorMsg());
break;
}
}
};
- 3、支付开始
RechargeObject result = new RechargeObject();
result.setUserToken(mUserToken);//用户token
result.setOrderID(mOrderID);//订单号
result.setSku(productID);//商品
result.setGoodsID("16");//商品ID(在服务器配置)
result.setPublicKey(base64EncodedPublicKey);//公钥
result.setPayTest(1);//是否是沙盒测试
RechargeManager.recharge(GooglePlayActivity.this, Target.RECHARGE_GOOGLE,
result, mOnRechargeListener);
4 、Google play 配置参考
Google Play 配置参考5、结果码(具体以接口回调结果为准)
1、 STATE_RECHARGE_START 开始支付
2、 STATE_RECHARGE_SUCCESS 支付成功
3、 STATE_RECHARGE_FAILED 支付失败
4、order create failed:user token is empty 订单创建失败:原因是乐推token为空或者未登录
OneStore 接入
前提:
手机上必须支持OneStore服务并且安装OneStore客户端
接入说明
如果在project下的build文件下添加了 远程依赖,请忽略2、4配置,直接看3
2、在project 下的build 导入仓库地址
maven { url "https://jitpack.io" }
3、在moudle下面的build文件下添加网络库依赖
implementation 'com.github.muyishuangfeng:YKOneStore:1.0.0'
4、在moudle的build文件夹下的android —>defaultConfig 相关配置
defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } }
参数说明
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
debug | boolean | 否 | 是否开启debug模式 |
userToken | String | 是 | 用户token,没有赋值时不能支付 |
orderID | String | 是 | 订单号 |
goodsType | String | 商品类型 | 商品类型(管理型商品(inapp), 包月自动支付商品(auto) |
goodsID | String | 是 | 服务器配置的id |
packageId | String | 是 | 每个应用的包名 |
requestCode | int | 是 | 支付请求码 |
productID | String | 是 | 内购商品唯一ID |
oneStore | boolean | 是 | 是否添加OneStore支付 |
payTest | int | 是 | 是否是沙盒测试:1是,0否 |
publicKey | String | 是 | OneStore后台配置的公钥 |
Target | int | 是 | 是否开启OneStore支付 |
RechargeObject | bean | 是 | 支付配置的参数 |
OnRechargeListener | Interface | 是 | 支付回调接口 |
2、支付调用方式
1、初始化(刚进入应用或者支付页面的时候配置)
private void init() { YKGameOptions options = new YKGameOptions.Builder(this) .debug(true) .publicKey(PUBLIC_KEY) .goodsType("inapp") .payTest(1) .oneStore() .goodsID(productID, "11") .googlePlay(true) .requestCode(selfRequestCode) .build(); YKGameSdk.init(options); }
2、接口回调(可以写成匿名内部类的方式也可以写成全局方式)
OnRechargeListener mOnRechargeListener = new OnRechargeListener() { @Override public void onState(Activity activity, RechargeResult result) { BaseEntry entry=result.getBaseEntry(); if (entry!=null){ if (entry.getCode()== YKGameValues.ONE_STORE_FAILED){ Log.e("successOne",entry.getResult()); } } switch (result.state) { case RechargeResult.STATE_RECHARGE_SUCCESS: mTxtResult.setText(result.getResultModel().getCode() + "======"); break; case RechargeResult.STATE_RECHARGE_START: Log.e(TAG, "开始支付"); break; case RechargeResult.STATE_RECHARGE_RESULT: if (result.getResult() != null) { switch (result.getResult()) { case RESULT_BILLING_NEED_UPDATE: { Log.e(TAG, "RESULT_BILLING_NEED_UPDATE"); break; } case RESULT_CLIENT_UN_CONNECTED: { Log.e(TAG, "RESULT_CLIENT_UN_CONNECTED"); break; } case RESULT_CLIENT_CONNECTED: { Log.e(TAG, "RESULT_CLIENT_CONNECTED"); break; } case RESULT_PURCHASES_REMOTE_ERROR: { Log.e(TAG, "RESULT_PURCHASES_REMOTE_ERROR"); break; } case RESULT_PURCHASES_SECURITY_ERROR: { Log.e(TAG, "RESULT_PURCHASES_SECURITY_ERROR"); break; } case RESULT_CLIENT_NOT_INIT: { Log.e(TAG, "RESULT_CLIENT_NOT_INIT"); break; } case RESULT_BILLING_OK: { Log.e(TAG, "RESULT_BILLING_OK"); break; } case RESULT_CONNECTED_NEED_UPDATE: { Log.e(TAG, "RESULT_BILLING_OK"); break; } case RESULT_BILLING_REMOTE_ERROR: { Log.e(TAG, "RESULT_BILLING_REMOTE_ERROR"); break; } case RESULT_BILLING_SECURITY_ERROR: { Log.e(TAG, "RESULT_BILLING_SECURITY_ERROR"); break; } case IAP_ERROR_UNDEFINED_CODE: { Log.e(TAG, "IAP_ERROR_UNDEFINED_CODE"); break; } } } break; case RechargeResult.STATE_RECHARGE_FAILED: Log.e(TAG, "支付错误" + result.getErrorMsg()); break; } } };
- 3、支付开始
RechargeObject result = new RechargeObject();
result.setOrderID("123456");//订单号
result.setUserToken("1111111");//用户token
result.setSku(productID);//商品
result.setGoodsID("11");//商品ID(服务器配置的)
result.setmGoodsType("inapp");//支付类型
result.setPublicKey(PUBLIC_KEY);//公钥
result.setPayTest(1);//是否是沙盒测试
RechargeManager.recharge(OneStoreActivity.this, Target.RECHARGE_ONE_STORE,result, mOnRechargeListener);
结果码
- 5、结果码(具体以接口回调结果为准)
1、ONE_STORE_FAILED 支付失败
2、ONE_STORE_SUCCESS 支付成功
3、 STATE_RECHARGE_START 开始支付
4、 STATE_RECHARGE_SUCCESS 支付成功
5、order create failed:user token is empty 订单创建失败:原因是乐推token为空或者未登录
6、 STATE_RECHARGE_FAILED 支付失败(具体结果码参考下面的结果码)
RESULT_PAY_OK(0, "Payment success") 支付成功
RESULT_USER_CANCELED(1, "User cancel") 用户取消
RESULT_SERVICE_UNAVAILABLE(2, "service unavailable") 未连接上服务器
RESULT_BILLING_UNAVAILABLE(3, "billing unavailable") 不支持oneStore支付
RESULT_ITEM_UNAVAILABLE(4, "item unavailable") 商品不可用
RESULT_DEVELOPER_ERROR(5, "developer error")开发账户异常
RESULT_CONNECTED_SUCCESS(6, "PurchaseClient connect success") 连接成功
RESULT_DISCONNECT_ERROR(7, "PurchaseClient Disconnect") 连接失败
RESULT_CONNECTED_NEED_UPDATE(8, "Connected need update") oneStore客户端需要更新
RESULT_BILLING_OK(9, "Billing success") 支持支付
RESULT_BILLING_REMOTE_ERROR(10, "Billing Remote Connection Failed") 查询是否支持oneStore服务时提示远端服务器连接异常(未连接到服务器)
RESULT_BILLING_SECURITY_ERROR(11, "Billing Apply State exceptions")查询是否支持oneStore服务时提示支付状态异常
RESULT_BILLING_NEED_UPDATE(12, "Billing need update")查询是否支持oneStore服务时提示oneStore客户端需要更新
RESULT_PURCHASES_OK(13, "Purchases success")查询购买信息成功
RESULT_PURCHASES_REMOTE_ERROR(14, "Purchases Remote Connection Failed")查询购买信息时提示oneStore远程服务器连接异常(未连接到服务器)
RESULT_PURCHASES_SECURITY_ERROR(15, "Purchases Apply State exceptions")查询购买信息时提示支付状态异常
RESULT_PURCHASES_NEED_UPDATE(16, "Purchases need update")查询购买信息时提示oneStore客户端需要更新
RESULT_CONSUME_OK(17, "Consume success")消费成功
RESULT_CONSUME_REMOTE_ERROR(18, "Consume Remote Connection Failed")购买时提示远端服务器连接异常(未连接到oneStore)
RESULT_CONSUME_SECURITY_ERROR(19, "Consume Apply State exceptions")购买时提示支付状态异常
RESULT_CONSUME_NEED_UPDATE(20, "Consume need update")购买时提示oneStore客户端需要更新
RESULT_SIGNATURE_FAILED(21, "Signature failed")签名异常
RESULT_PURCHASES_FLOW_OK(22, "Purchases Flow success")购买成功
RESULT_PURCHASES_FLOW_REMOTE_ERROR(23, "Purchases Flow Remote Connection
Failed")购买时提示远端服务器连接异常(未连接到服务器)
RESULT_PURCHASES_FLOW_SECURITY_ERROR(24, "Purchases Flow Apply State
exceptions")购买时提示支付状态异常
RESULT_PURCHASES_FLOW_NEED_UPDATE(25, "Purchases Flow need update")购买时提
示oneStore需要更新