跳到主要内容

详细接入文档

接入Demo找商务获取

1.1 场景说明

Paynicorn平台为广大开发者提供了聚合支付SDK开发工具包,可以帮助开发者缩短开发周期,提升开发体验,满足接入方不同场景下差异化的支付方式需求,通过集成支付SDK可以一站接入全球主流的本地化支付方式,包括:在线支付、短信支付、订阅支付等形式。

在线支付

应用场景:

适用于具备网络通信的场景,用户通过电子钱包、信用卡、银行转账、短信等方式进行在线支付。

具体操作流程:

步骤一:用户进入商户APP,选择商品下单、确认购买,进入支付环节,见图1.1;
步骤二:用户进入到paynicorn收银台界面,选择合适的在线支付方式,见图1.2;
步骤三:用户在支付页面输入支付要素,例如账户手机号、邮箱等信息,确认发起支付,见图1.3;
步骤四:用户返回商户APP,APP端根据获取的支付结果,释放服务或者产品。

product_showcase     payment_method_selection_page     payment_confirmation_page
图1.1商品展示页           图1.2支付方式选择页        图1.3支付确认页

短代支付

应用场景:

适用于不具备网络通信的场景,用户通过向电信运营商发送扣费短信,扣除用户手机卡内话费余额完成支付。

具体操作流程:

步骤一:用户进入商户APP,选择商品下单、确认购买,进入支付环节,见图2.1;
步骤二:用户确认短信发送,见图2.2;
步骤三:用户发送支付短信,见图2.3、图2.4;
步骤四:用户返回商户APP,APP端根据获取的支付结果,释放服务或者产品。

img_2_1     img_2_2     img_2_3     img_2_4
图2.1商品展示页           图2.2短信发送确认页        图2.3短信发送页        图2.4短信发送结果

订阅支付

应用场景:

适用于需要周期性扣款的场景,用户成功完成订阅后,按照固定时间周期扣除用户手机卡话费余额完成支付。

具体操作流程:

步骤一:用户进入商户APP,选择商品下单、确认购买,进入支付环节,见图3.1;
步骤二:用户在支付页面输入支付要素,确认发起支付,见图3.2;
步骤三:用户确定订阅信息,见图3.3;
步骤四:用户发送扣费短信,见图3.4;
步骤五:用户返回商户APP,APP端根据获取的支付结果,释放服务或者产品。 步骤六:根据用户订阅信息,按照订阅时间周期扣费,商户根据每期扣费结果,释放服务或者产品。

img_3_1     img_3_2     img_3_3     img_3_4
图3.1商品展示页             图3.2支付确认页        图3.3订阅信息确认页        图3.4发送扣费短信

1.2 接入支付方式判断

img_8_1

接入方根据网络条件、业务需求等因素,选择接入合适的支付方式,后续将会持续优化更新,以适用更多场景,敬请期待...

1.3 接入前准备

参考: 接入前的准备工作

1.4 接入说明

1.4.1 接入内容

SDK接入需要两部分的接入:
第一部分是Android客户端,建议接入工具为 AndroidStudio;
第二部分是服务端接入,接口为主,语言不限具体详见:服务端接入文档。

1.4.2 接入过程

img_4_1

1.4.3 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 属于内部小程序定制版,接入前先咨询商务人员

1.4.4 SDK客户端配置

在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")
    ...
}

1.5.0.0版本后支持增加登入模块,或者去掉任意一个支付方式

dependencies {
...
api('com.transsion.pay:paysdk:X.X.X.X'){
exclude module: 'sms-lib'//去掉短代
// exclude module: 'paynicorn-lib'//去掉在线支付
}
//如果需要登录功能引入下面依赖
//implementation("com.transsion.pay:palmid-lib: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权限

1.5 客户端支付时序图

img_5_1

1.6 接口调用流程

第一步:程序启动时初始化

请求方法:initAriesPay
接口作用:对支付SDK进行初始化
请求参数:

参数必填类型说明
contextYContext上下文对象
ap_idYString渠道号
cp_idYString商户编号
api_keyYString商品编号/产品密钥
InitResultCallBackYinterface回调对象

代码示例:

PaySDKManager.getsInstance().setStrict(true);//设置严格模式,默认true,设置true后,经过多次查询后,支付中也会返回失败
//初始化有多种入参方式
//支持所有支付方式
PaySDKManager.getsInstance().initAriesPay(context, ap_id, cp_id,api_key,
new InitResultCallBack() {
@Override
public void onSuccess(List<SupportPayInfoEntity> list, boolean supportOnlinePay, CountryCurrencyData countryCurrencyData) {

}

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

//支持了单一支付方式的初始化,mode-可选StartPayEntity.PAY_MODE_SMS、StartPayEntity.PAY_MODE_ONLINE、StartPayEntity.PAY_MODE_ALL
PaySDKManager.getsInstance().initAriesPay(context, ap_id, cp_id,api_key,mode
new InitResultCallBack() {
@Override
public void onSuccess(List<SupportPayInfoEntity> list, boolean supportOnlinePay, CountryCurrencyData countryCurrencyData) {

}

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

onSuccess返回参数:

参数必填类型说明
listYList短代、线上订阅支持的金额列表
supportOnlinePayYboolean是否支持在线支付,true为支持
countryCurrencyDataY对象当前国家币种信息实体

onFail返回code参数:

结果code类型说明
1000int初始化成功
102int无效的IMSI(SIM卡无效/未插入SIM卡/M平台没有READ_PHONE_STATE权限)
103int无效的ap_id
104int无效的cp_id
105int无效的api_key

SupportPayInfoEntity对象说明:

参数类型说明
mccString运营商所属国家mcc,如460
mncString运营商吗,如20
simIndexint手机SIM卡编号
payTypeint支付类型,如StartPayEntity.PAY_MODE_ONLINE/StartPayEntity.PAY_MODE_SMS/StartPayEntity.PAY_MODE_ALL
priceEntitiesList金额币种列表
isOnlineMode()Methodtrue-在线支付模式
isSmsMode()Methodtrue-短代模式

PriceEntity对象说明:

参数类型说明
pricedouble金额
currencyString币种
keyCodesList计费点信息
modeint标识线上订阅
cycleString订阅周期
codeList支付方式code集合
isSupportSub()Methodtrue-支持订阅支付
isSupportNormal()Methodtrue-支持正常支付

注意:可以用方法isSupportSub()从原始数据list集合中过滤出线上订阅的金额集合、短代支付金额集合

CountryCurrencyData对象说明:

参数类型说明
countryCodeString国家code
currencyString币种
mccString运营商所属国家mcc,如460
usdRatedouble本位币对美金的汇率,1美金等于多少本位币
minAmountdouble在线支付可以使用的最低金额
maxAmountdouble在线支付可以使用的最高金额
smsMinAmountdouble短代支付最小金额
smsMaxAmountdouble短代支付最大金额
smsRandomAmountdouble短代支付随机金额
smsOptimalAmountdouble短代支付最优金额

第二步:币种转换(可选)

美元转本位币

请求方法:convertUsdToLocal
接口作用:提供币种汇率换算,调用方根据业务决定选择是否调用 请求参数:

参数必填类型说明
contextYContext上下文对象
contextYcontext商品集合
CurrencyConvertCallBackY对象interface

代码示例:

private void initConvert(){
//usd product prices
List<ConvertPriceInfo> priceEntities = new ArrayList<>();
for(int i = 0;i < 5;i++){
ConvertPriceInfo priceEntity = new ConvertPriceInfo();
priceEntity.productId = i+""; //productId
priceEntity.usdPrice = i; //product price :usd
priceEntities.add(priceEntity);
}

//convert
PaySDKManager.getsInstance().convertUsdToLocal(TestActivity2.this, priceEntities, new CurrencyConvertCallBack() {
@Override
public void convertResult(List<CurrencyConvertResultEntity> convertResultEntities) {
if(convertResultEntities.size() <= 0){
Log.i("MainActivity","not support country");
return;
}
for(CurrencyConvertResultEntity resultEntity:convertResultEntities){
Log.i("MainActivity","local currency price:" + resultEntity.toPrice + " " + resultEntity.toCurrency);
}
}
});
}

虚拟币转本位币

请求方法:convertVirtualToLocal
接口作用:虚拟币转本位币 请求参数:

参数必填类型说明
contextYContext上下文对象
contextYcontext商品集合
CurrencyConvertCallBackY对象interface

代码示例:

private void convertVirtualToLocal(){
//usd product prices
List<ConvertPriceInfo> priceEntities = new ArrayList<>();
for(int i = 0;i < 5;i++){
ConvertPriceInfo priceEntity = new ConvertPriceInfo();
priceEntity.productId = i+""; //productId
priceEntity.virtualPrice = i; //虚拟币金额
priceEntity.virtualCurrency = "AHA"; //虚拟币币种
priceEntities.add(priceEntity);
}

//convert
PaySDKManager.getsInstance().convertVirtualToLocal(TestActivity.this, priceEntities, new CurrencyConvertCallBack() {
@Override
public void convertResult(List<CurrencyConvertResultEntity> convertResultEntities) {
if(convertResultEntities.size() <= 0){
Log.i("MainActivity","not support country");
return;
}
for(CurrencyConvertResultEntity resultEntity:convertResultEntities){
Log.i("MainActivity","local currency price:" + resultEntity.toPrice + " " + resultEntity.toCurrency);
}
}
});
}

ConvertPriceInfo对象说明:

参数是否必填类型参数说明
productIdYString需要转换币种的商品id
usdPriceYDouble需要转换币种的商品美金价格
virtualPriceYDouble需要转换币种的商品虚拟币价格
virtualCurrencyYString需要转换的虚拟币币种

CurrencyConvertResultEntity对象说明:

参数是否必填类型参数说明
productIdYString需要转换币种的商品id
toCurrencyYString本位币币种码
toCountryCodeYString本位币所属国家码
fromPriceYDouble金额转换之前的美金金额
toPriceYDouble金额转换之后的本位币金额

第三步:发起支付

请求参数:

参数必填类型说明
contextYContext上下文对象
StartPayEntityYObject支付参数封装
StartPayCallBackYObject回调对象

StartPayEntity参数说明:

参数必填类型说明
amountYdouble商品价格
payModeNint支付模式码:StartPayEntity.PAY_MODE_ONLINE: 在线支付,StartPayEntity.PAY_MODE_SMS:短代支付,StartPayEntity.PAY_MODE_ALL:全部支付方式
netPaySpNString在线支付渠道码,用于指定在线支付的细节渠道, 来源于服务端回调数据
orderNumYString支付流水号(不能重复,用于支付交易处理)
referenceNoNString商户内部订单号(只透传,不处理,用于商户标记内部订单,可以通过支付侧的服务端回调接口、查询接口获取referenceNo,商户进行订单信息匹配)
currencyYString下单币种
countryCodeYString下单国家code
descriptionNString订单描述,会显示在收银台
matchDownNboolean设置为true-支持向下取支持金额的功能,当支付方式支持的金额小于发起支付的金额,开启这个功能可以匹配到该支付方式。默认为true
minDiscountRatioNdouble最小折扣
typeYint支付方式是否订阅,StartPayEntity.PAY_TYPE_SUB 为订阅,默认为普通支付
adjustModeNint(短代设置为-1、在线支付自行设置)设置adjustMode会根据设置 的mode,结合对应的币种来处理传入的金额各个位数取整,以防传入的金额渠道不支持导致无法支付。mode取值详见BigDecimal的各个mode,默认不设置。
emailNString邮箱
phoneNString手机号
payMethodNString订阅运营商code
cycleNString订阅周期
orderDescription订阅支付必传-Y、其它可以不传-NString订单描述会显示在收银台(内容cp主自己定义)
serviceConfigPriorityNboolean支付方式后台配置优先 默认true
memoNString额为参数

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

请求方法:startPay
接口作用:发起在线支付或者短代支付支付请求

代码示例:

    private void startPay(){
//非必填字段可以传空
StartPayEntity startPayEntity = new StartPayEntity();
startPayEntity.amount = 10;//商品金额
startPayEntity.countryCode = "NG";
startPayEntity.currency = "NGN";
startPayEntity.orderNum = "orderNum";//商户订单号
startPayEntity.payMode = StartPayEntity.PAY_MODE_SMS;//StartPayEntity.PAY_MODE_ONLINE: 在线支付,StartPayEntity.PAY_MODE_SMS:短代支付,StartPayEntity.PAY_MODE_ALL:全部支付方式
startPayEntity.type = sub ? StartPayEntity.PAY_TYPE_SUB : 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码给到游戏,游戏可以根据对应的返回码作出相应的用户提示

OrderEntity对象说明:

参数是否必填类型参数说明
orderNumYString平台订单号
cpOrderNumYString商户订单号
txnIdYStringpaynicorn订单号
payModeYint支付模式
netPaySpYString本次支付的渠道标识
netErrorMsgYString网络预下单失败的错误原因
subscriptionTimeYlong订阅时间
unSubscriptionTimeYlong退订时间
lastDeductionTimeYlong最近一次成功扣费时间
deductionCountYint成功扣费次数

发起订阅支付

请求方法:startOnLineSubPay
接口作用:发起订阅支付请求

代码示例:

    private void startOnLineSubPay(){
//非必填字段可以传空
StartPayEntity startPayEntity = new StartPayEntity();
startPayEntity.amount = 10;
startPayEntity.countryCode = "NG";
startPayEntity.currency = "NGN";
startPayEntity.orderNum = "orderNum";
startPayEntity.cycle = "";
startPayEntity.email = "";
startPayEntity.phone = "";
startPayEntity.payMethod = "";
startPayEntity.orderDescription = "内容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 订单号自行保存,查询订单需要该订单号

发起快捷支付

信息

用以纯粹S2S对接的渲染支付方式

打开支付页面示例

//传入的quickPayUrl为s2s返回的url地址
Intent intent = PaySDKManager.getsInstance().getQuickPayIntent(this, quickPayUrl);
startActivityForResult(intent, REQUEST_CODE);

返回结果

    //传入的quickPayUrl为s2s返回的url地址,相关code值如下,finish都代表支付行为完成,就可以利用订单号去查询订单结果
/*public static final int CODE_QUICK_PAY_INTENT_FINISH = 1;
public static final int CODE_QUICK_PAY_INTENT_CANCLE = -1;
public static final int CODE_QUICK_PAY_CONFIRM_FINISH = 2;
public static final int CODE_QUICK_PAY_CONFIRM_CANCLE = -2;
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
String result = data.getStringExtra(Consts.QUICK_PAY_KEY_RESULT);
int code = data.getIntExtra(Consts.QUICK_PAY_KEY_CODE, 0);

}
}

1.7 支付结果码表说明

下方从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是系统发送短信错误

1.8 订单查询接口

请求参数:

参数必填类型说明
orderNumYString订单号
apiKeyYString商品编号/产品密钥
cpidYString商户编号

OrderResultEntity对象说明:

参数类型参数说明
txnNumString交易流水
subscriptionTimelong订阅时间
unSubscriptionTimelong退订时间
deductionCountint成功扣费次数
lastDeductionTimelong最近一次成功扣费时间
messageString说明信息
orderNumString查询的订单号
txnTypeString支付类型
payMethodString支付方式
statusint订单状态 订阅失败-OrderResultEntity.PAY_RESULT_FAIL/订阅中-OrderResultEntity.PAY_RESULT_PAYING/订阅成功-OrderResultEntity.PAY_RESULT_SUCCESS/订阅取消OrderResultEntity.SUB_RESULT_CANCEL
referenceNoString商户内部订单号(只透传,不处理,用于商户标记内部订单,可以通过支付侧的服务端回调接口、查询接口获取referenceNo,商户进行订单信息匹配)

线上订阅查询接口

请求方法:queryOnlineSubOrderStatus
接口作用:线上订阅查询接口

代码示例:

   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()回调中处理下一次订阅支付

普通支付查询接口

请求方法:queryOrderStatus
接口作用:普通支付查询接口

代码示例:

  PaySDKManager.getsInstance().queryOrderStatus(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) {
//订单支付失败
}
});

1.9 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"));
        }
  }
});

1.10 计费点查询接口

1、接口地址

2、VAS短信点播支付计费点使用说明:

1、mcc 国家码、mnc 移动运营商网络码,mcc和mnc 确定支持的国家和运营商收费通道;
2、匹配到接口返回内容中每个运营商(mnc)下面可以使用的计费点金额money字段列表,权重(managerWeight)不为0的计费点是可以使用的计费点,权重值会因为渠道调整随时发生变化;
3、只有用户手机sim卡所属运营商和对应计费点的运营商完全匹配,才有可能保证交易成功,反之,则一定失败;
4、原则上扣费指令的发送建议调用支付SDK完成,不建议自己封装短信内容发送,可能造成交易无法匹配,最终无法结算的情况
5、needNetwork 值为1,说明该计费点使用前置条件必须网络畅通

1.11 测试模式

短代测试设置

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

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

在线支付测试模式

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

1.12支持游戏通过账号授权-获取authCode

根据authCode 调用paynicorn 服务端接口获取openId

    PaySDKManager.getsInstance().getAuthCode(Activity.this, new PaynicornAuthListener() {
@Override
public void authResult(PaynicornOauthRsp oauthRsp) {
if (oauthRsp.code == 200) {
String authCode = oauthRsp.authCode;
}
}
});

1.13 术语说明

在线支付:

依赖于网络,通过电子钱包、信用卡、银行转账、DCB模式短代等方式完成支付。

短代支付:

分为DCB模式、VAS模式。其中:DCB短代支付属于在线支付的一种,通过向电信运营商发送扣费短信,扣除话费余额的形式完成支付,但是需要依赖于网络通信实时获取支付结果;VAS短代支付不依赖于网络条件,向电信运营商发送扣费短信后,支付结果依赖于运营商通知。

订阅支付:

通过向电信运营商发送扣费短信,运营商按照约定周期性扣除话费余额的完成支付;

MCC:

3位国家码,存在同一个国家多个MCC码情况。

MNC:

移动运营商网络码,同一个运营商存在多个MCC码。

计费点:

通过发送某条扣费短信内容,电信运营商可以从话费余额中扣除相应金额,该金额即为计费点,计费点及其扣费短信内容由电信运营商制定。

1.13 更新日志

V1.5.1.7

1、增加话费充值入口

2、AHA 集成 Aries SDK ,提供VAS支付能力给到快游戏

3、优化CP接入效率

V1.5.1.6

1、短代流程优化

2、纯在线支付方式初始化去掉phone权限

V1.5.1.5

1、短代支付权限优化-拒绝权限跳转到系统界面授权-不授权不能支付

V1.5.1.4

1.优化代码

V1.5.2.3

1.支持虚拟币支付 2.支持账户授权 3.支付入参优化