跳到主要内容

开发人员快速接入文档

接入Demo找商务获取

第一步 SDK客户端配置

SDK当前最新版本1.5.4.18,建议使用最新的版本号替换掉示例代码中的 X.X.X.X

信息

1、查看历史版本 支付SDK版本

2、V1.5.4.7、V1.5.4.8、V1.5.4.9、V1.5.4.10、V1.5.4.11、V1.5.4.12、V1.5.4.15 属于内部小程序定制版,接入前先咨询商务人员

在Android Studio项目的根build.gradle中加入maven配置

buildscript {
 
 
    repositories {
        ...
        maven{ url 'https://mvn.shalltry.com/repository/maven-public'}
    }
    ...
}
allprojects {
    repositories {
        ...
        maven{ url 'https://mvn.shalltry.com/repository/maven-public'}
    }
}

在app的build.gradle文件中配置

dependencies {
    ...
    api("com.transsion.pay:paysdk:X.X.X.X")
    ...
}

动态权限申请

建议在应用开启时,动态申请好以下权限,这样可以使支付流程更流程,如果不申请好,SDK也会在使用  到指定功能时自己申请

android.permission.READ_PHONE_STATE
android.permission.SEND_SMS
信息

1、支付SDK集成了短信发送功能用于支持短信支付,该方式需要应用获取较为敏感的权限,如果您的业务场景不需要使用运营商话费扣费,可以不用获取android.permission.SEND_SMS权限

2、在初始化过程中,支持了单一支付方式的初始化,mode-可选PaySDKManager.MODE_BOTH、PaySDKManager.MODE_PAYNICORN、PaySDKManager.MODE_SMS,如果您的业务只需要在线支付,可以传PaySDKManager.MODE_PAYNICORN,此时不需要获取用户android.permission.READ_PHONE_STATE权限

第二步 程序启动时(Application)初始化

ap_id、cp_id、api_key 找商务获取

代码示例:

PaySDKManager.getsInstance().initAriesPay(context, ap_id, cp_id,api_key,
new InitResultCallBack() {
@Override
public void onSuccess(List<SupportPayInfoEntity> list, boolean supportOnlinePay, CountryCurrencyData countryCurrencyData) {
//List<SupportPayInfoEntity> list 短代和线上订阅商品展示金额集合(返回什么展示什么、只需要关注金额price)
//for (SupportPayInfoEntity supportPayInfoEntity : list) {
//在线订阅金额集合subPriceList
//List subPriceList = supportPayInfoEntity.priceEntities.stream()
// .filter((PriceEntity priceEntity) -> priceEntity.isSupportSub())
// .collect(Collectors.toList());
//短代金额集合smsPriceList
//List smsPriceList = supportPayInfoEntity.priceEntities.stream()
// .filter((PriceEntity priceEntity) -> priceEntity.isSupportNormal())
// .collect(Collectors.toList());
//}
//获取金额
//for (SupportPayInfoEntity supportPayInfoEntity : list) {
// for (PriceEntity priceEntity : supportPayInfoEntity.priceEntities) {
// showLog("金额:" + priceEntity.price);
// }
//}
//-supportOnlinePay 为true 代表支持在线支付功能
//-countryCurrencyData 代表国家相关信息
// 只需要关注(支付要用到的参数)-国家code-countryCurrencyData.countryCode、支付币种countryCurrencyData.currency
// 线上支付最小金额countryCurrencyData.minAmount、线上支付最大金额countryCurrencyData.maxAmount
}

@Override
public void onFail(int code) {
}
});
}

第三步:发起支付

发起在线支付或者短代支付

代码示例:

    private void startPay(){
//非必填字段可以传空
StartPayEntity startPayEntity = new StartPayEntity();
startPayEntity.amount = 10;//短代初始化返回金额、线上支付支持的最小最大金额之间任意值
startPayEntity.countryCode = countryCurrencyData.countryCode;//初始化返回countryCurrencyData对象
startPayEntity.currency = countryCurrencyData.currency;
startPayEntity.orderNum = "orderNum";//商户订单号-自己维护
//StartPayEntity.PAY_MODE_ONLINE: 在线支付,StartPayEntity.PAY_MODE_SMS:短代支付,StartPayEntity.PAY_MODE_ALL:全部支付方式
startPayEntity.payMode = StartPayEntity.PAY_MODE_SMS;
startPayEntity.type = 0 ;
//AHA商户快游戏增加字段
//startPayEntity.apiKey = "";
//startPayEntity.cpId = "";
try {
//payOrderNum 支付订单号
String payOrderNum=PaySDKManager.getsInstance().startPay(activity, startPayEntity, new StartPayCallBack() {
@Override
public void onOrderCreated(OrderEntity orderEntity) {
//订单创建成功,进入开始支付,如果后续因为崩溃等原因没有收到结果,可以根据这 里的订单号查询订单结果
}

@Override
public void onPaySuccess(OrderEntity orderEntity) {
//支付成功
}

@Override
public void onPaying(OrderEntity orderEntity) {
//本地查询超时,后续游戏去服务端确认
}

@Override
public void onPayFail(int code, OrderEntity orderEntity) {
//支付失败
}
});
} catch (Exception e) {
e.printStackTrace();
}
}

注:在支付失败时,会返回响应的result码给到游戏,游戏可以根据对应的返回码作出相应的用户提示

发起订阅支付

代码示例:

    private void startOnLineSubPay(){
//非必填字段可以传空
StartPayEntity startPayEntity = new StartPayEntity();
startPayEntity.amount = 10;//初始化返回金额
startPayEntity.countryCode = countryCurrencyData.countryCode;//初始化返回countryCurrencyData对象
startPayEntity.currency = countryCurrencyData.currency;
startPayEntity.orderNum = "orderNum";//商户订单号-自己维护
startPayEntity.cycle = "";//传空
startPayEntity.email = "";//取不到-传空
startPayEntity.phone = "";//取不到-传空
startPayEntity.payMethod = "";//取不到-传空
startPayEntity.orderDescription = "order description";//必传 不能为空 内容cp主自己定义
startPayEntity.netPaySp = "";//传空
try {
String subOrderNum=PaySDKManager.getsInstance().startOnLineSubPay(activity, startPayEntity, new StartPayCallBack() {
@Override
public void onOrderCreated(OrderEntity orderEntity) {
//订单创建成功,进入开始支付,如果后续因为崩溃等原因没有收到结果,可以根据这 里的订单号查询订单结果
}

@Override
public void onPaySuccess(OrderEntity orderEntity) {
//支付成功
}

@Override
public void onPaying(OrderEntity orderEntity) {
//本地查询超时,后续游戏去服务端确认
}

@Override
public void onPayFail(int code, OrderEntity orderEntity) {
//支付失败
}
});
} catch (Exception e) {
e.printStackTrace();
}
}

注意: subOrderNum 订单号自行保存,查询订单需要该订单号

支付结果码表说明

下方从1开始的错误都是系统返回类型,属于系统处理短信发送失败时返回的错误码

result说明
101支付次数超过日限或者月限
102无效的IMSI(SIM卡无效或者未插入SIM卡等)
103无效的ap_id(为空)
104无效的cp_id(为空)
105无效的api_key(为空)
106无法匹配 代码(mcc、mnc不匹配)
107无效的金额(金额为0或者当前支付金额无法匹配代码)
108上一次支付还未结束
110没有读取手机信息的权限 READ_PHONE_STATE
111没有发送短信的权限 SEND_SMS
112支付失败
113没有在清单文件注册AriesPayBroadcastReceiver广播(废弃)
114用户取消了支付
115短信发送超时
116支付配置出错
117支付过于频繁
118需要初始化
124没有匹配的支付方式
125没有合适的计费点
128严格模式下,把查询到的支付中作为支付失败
129支付中没有网络
130发送短信时,取消支付
888没有找到本地国家信息
1发送出错(比如号码不接收等)
2无线了广播被明确地关闭(比如开启飞行模式)
3没有提供pdu(短信系统不正常)
4服务当前不可用(短信服务不可用)
5已达到发送队列限制(比如短信过长)
6结果错误FDN检查失败
7拒绝高级短代码(比如二次校验短信发送被拒绝时)
8拒绝高级短代码(比如二次校验短信发送被拒绝时)
其他未知错误,小于100是系统发送短信错误

订单查询接口

线上订阅查询接口

代码示例:

   PaySDKManager.getsInstance().queryOnlineSubOrderStatus(orderNum, apiKey, cpid, new OrderQuery() {
@Override
public void onSuccess(OrderResultEntity orderQueryEntity){
//订阅成功
}

@Override
public void orderError(OrderResultEntity orderQueryEntity, String code, String errorMessage) {
//网络错误导致-订阅失败
}

@Override
public void onPaying(OrderResultEntity orderQueryEntity) {
//订阅中-未确认结果
}

@Override
public void orderFail(OrderResultEntity orderQueryEntity) {
//订阅失败
}
});

注意:可以在orderError()/onPaying()/orderFail()回调中处理下一次订阅支付

第四步 Firebase接入

1、按照Firebase官方文档-使用Firebase控制台设置工作流方案接入Firebase官方地址

2、google-services.json 文件找商务获取

3、支付SDK埋点数据回调接口

代码示例:

     PaySDKManager.getsInstance().setStatisticsSynchroListener(new StatisticsSynchroListener() {
        @Override
            public void track(String event, Bundle bundle) {
        FirebaseAnalytics.getInstance(activity).logEvent(event, bundle);
         if (event.equals(PaySDKStatistics.ARIES_EVENT_INIT_NAME)) {
         FirebaseAnalytics.getInstance(context).setUserProperty("mccmnc", PayUtil.getSimOperator(context);
         FirebaseAnalytics.getInstance(context).setUserProperty("AP_ID", bundle.getString("ap_id"));
         FirebaseAnalytics.getInstance(context).setUserProperty("CP_ID", bundle.getString("cp_id"));
         FirebaseAnalytics.getInstance(context).setUserProperty("API_KEY", bundle.getString("appkey"));
        }
  }
});

测试模式

短代测试设置

主要是为了短代功能部分的测试设计,因为在开发时是没有指定国家指定运营商的SIM卡的,可以通过  下面的方法来模拟

SMSTestUtil.setTestMode(true)//设置true时表示开启测试模式,并且是双卡模式,默认关闭
SMSTestUtil.setTestMCCMNC("62160");// 这 里 设 置 的 是 第 一 张 卡 的 mccmnc
SMSTestUtil.setTestMCCMNC2("62120");// 这 里 是 设 置 第 二 张 卡 的 mccmnc 
//比如想要模拟尼日利亚的Airtel运营,那么就是设置62120
//那么模拟其他运营商时,找到对应运营商的mccmnc并设置即可

在线支付测试模式

应用默认为测试模式,在需要上线时需要联系商务,切换为正式模式