开发文档
#虫虫支付SDK接入(网游版)使用说明
版本 | 修改日期 | 修改内容 |
---|---|---|
1.5 | 2016.5 | 优化登录,微信支付 |
1.6 | 2017.1 | 优化登录,支付 |
1.6.1 | 2017.3 | 优化SDK |
1.6.2 | 2017.3 | 修改部分游戏截图UI卡住的问题 |
1.6.3 | 2017.4 | 修改个人中心显示不全不能滑动;修复社区点击崩溃的BUG |
1.6.4 | 2017.4 | 修改当Activity为FragmentActivity支付回调时回调不了;增加防沉迷和身份认证模块 |
1.6.5 | 2017.5 | 修改一键注册的问题;优化支付; |
1.6.6 | 2017.9 | 修改初始化接口,支付接口,退出接口; |
1.6.7 | 2017.11 | |
1.7.0 | 2018.7 | 修改一键登录;修改悬浮窗停留3秒隐藏一半;注意:相对1.6.6和1.6.7接口没改动,只需替换res和lib |
1.7.1 | 2018.9 | 增加了账号注销申请功能 |
1.7.2 | 2019.4 | 增加了登录返回实名认证信息 |
1.7.3 | 2019.4 | 更新银联支付SDK;增加权限申请方法 |
1.7.4 | 2019.5 | 修改支付前的实名认证成功机型调起支付界面和取消的回调 |
1.7.5 | 2019.12 | 优化手机QQ支付提示;优化实名认证操作 |
1.7.6 | 2019.12 | 增加防沉迷模块,优化实名认证;优化一键注册、绑定手机号码; |
1.7.7 | 2020.3 | 优化礼包领取功能;修复部分机型界面显示不全的bug; |
1.7.8 | 2020.7 | 登录功能改版,增加手机号一键登录;新增登录前强制实名认证、实名信息回传接口;优化部分体验问题; |
1.7.9 | 2021.5 | 新增海外实名入口;支持上报行为数据;增加权限申请方法;优化部分体验问题 |
1.8.0 | 2021.10 | 1.修复弹窗重叠点击会闪退的问题 2.修复其他已知bug |
1.8.1 | 2022.03 | 1.优化一键登录SDK |
1.8.2 | 2022.04 | 1.修复已知bug |
1.8.4 | 2022.09 | 1. 1.新增【领券】,支持领取代金券 2.新增转游中心,领取转游福利 3.优化其他已知问题。 |
1.8.5 | 2023.01 | 1.支付支持使用福利币、福利代金券。 2.个人中心增加“福利币”,可购买福利卡以获得福利币或福利代金券 |
1.8.6 | 2023.05 | 1.修复其他已知bug |
1.8.7 | 2023.06 | 1.修复多次回调退出登录问题; 2.增加未成年防沉迷退出接口;3.修复其他已知bug |
1.8.8 | 2023.05 | 1.优化交互体验 |
1.9.0 | 2023.11 | 1.支持折扣与代金券或福利币迭代使用; 2.福利卡权益调整; 3.优化交互。 |
1. 引言1.1部分名词解释2. SDK相关2.1 SDK流程图2.2 SDK使用准备2.2.1 导入资源2.2.1,1 导入jar包2.2.1,1 导入res2.2.1,3 添加assets目录下的文件2.2.2 添加SDK提供的Activity引用: 2.2.3 添加游戏的SDK信息的meta-data:2.2.4 添加QQ支付Activity,其中qqPay游戏ID内容为[qqPay]+[你的APP_ID]:2.2.5 添加SDK需要的uses-permission: 2.2.6 添加银联支付libs: 2.2.6.1 Eclipse配置:2.2.6.2 Android studio配置:2.2.7 配置user-sdk: 2.2.8 混淆编译: 2.3 接口使用说明2.3.1 SDK初始化接口(必选接口)2.3.2 游戏主Activity初始化接口(必选接口)1、CCPaySdk.getInstance().init(this)2、public void onCreate(Activity activity)3、public void onResume(Activity activity)4、public void onPause(Activity activity)5、public void onStop(Activity activity)6、public void onDestroy(Activity activity)7、public void onRestart(Activity activity)8、public void onActivityResult (Activity activity, int requestCode, int resultCode, Intent data)9、public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)2.3.3 用户登录接口(必选接口)2.3.4 用户账号(主动调用)退出接口(必选接口)2.3.5 用户账号退出回调接口(必选接口)2.3.6 退出APP接口(必选接口)2.3.6.1 退出APP接口(必选接口)2.3.6.2 退出APP对话框方法(必接接入)2.3.6.3 未成年防沉迷退出方法(可选接入)2.3.7 支付接口(必选接口)2.3.7.1 新版本(1.6.6)2.3.7.2 老版本(1.6.6以下版本不支持兼容,请修改))2.3.8 用户是否登录接口2.3.9 用户角色信息上报接口2.3.10 隐私协议2.3.11 申请权限(targetSDKVersion >= 23时 必选接口)3. 服务端相关接口及说明3.1 支付返回结果回调(POST)3.2 用户登录状态验证接口(字符串)3.3 订单状态查询接口3.4 实名认证信息接口3.4.1 获取应用下已实名用户信息列表接口(每页返回500条数据)3.4.2 根据用户ID获取应用认证信息接口4. 常见问题
1. 引言
1.1部分名词解释
名词 | 解释 |
---|---|
app_id | 游戏唯一标识,用于区分不同游戏的唯一标准。在虫虫开发者平台应用中心创建游戏时获取 |
developer_key | 开发者标识,在虫虫开发者平台申请通过后自动分配 |
2. SDK相关
2.1 SDK流程图
暂无
2.2 SDK使用准备
2.2.1 导入资源
2.2.1,1 导入jar包
将SDK包内的libs目录下的文件(夹)放到应用工程的libs目录下。
2.2.1,1 导入res
xxxxxxxxxx
将SDK包内的res目录下的文件(夹)放到应用工程的res目录下。
2.2.1,3 添加assets目录下的文件
xxxxxxxxxx
将assets目录下的文件(夹)复制到应用工程assets目录下。
2.2.2 添加SDK提供的Activity引用:
在游戏AndroidManifest.xml文件的application中添加由SDK提供的如下代码:
x<activity
android:name="com.lion.ccpay.app.WelfareActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.GiftDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.MyGiftActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.GameBtRebateActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.user.GameCouponActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyGameCardActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyOrderCCSdkActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyOrderForRechargeCCActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyRechargeCardActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletChangeLogActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletChangeLogDetailActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletCouponActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletRechargeCCActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.CCPayUserCenterActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name="com.lion.ccpay.app.SystemMsgListActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.SystemMsgItemActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.HelpActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.community.CommunityPlateDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.community.CommunitySubjectDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.community.CommunityChoicePhotoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.community.CommunityChoiceCameraPhotoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.community.CommunitySubjectFloorDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.community.CommunitySubjectSearchActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.community.CommunityPostNormalActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.UserCenterActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.ApplyDeleteActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.MyOrderSpecialServiceActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.ScreenShotListActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.MyScreenshotDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.VideoRecordListActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.RequestSRCPerActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity
android:name="com.lion.ccpay.app.RequestScreenshotActivity"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<receiver
android:name="com.lion.ccpay.receivers.ClickNotificationReceiver"
android:exported="true"
android:process=":ccplay" />
<service
android:name="com.lion.ccpay.service.CCPaySDkService"
android:exported="true"
android:process=":ccplay" />
<activity
android:name="com.lion.ccpay.app.user.MyOrderBasePayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.OrderInfoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/lion_transparent"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.WebViewActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/lion_transparent"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.user.UserAuthActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:theme="@android:style/Theme.Dialog" />
<activity
android:name="com.lion.ccpay.app.user.UserAntiAddictSystemActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.user.UserOverSeasAntiAddictSystemActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan"/>
<!-- alipay sdk begin -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" /> <!-- alipay sdk end -->
<activity
android:name="com.lion.ccpay.app.ChoicePhotoActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:windowSoftInputMode="adjustResize|stateHidden" /> <!-- 银联 -->
<uses-library
android:name="org.simalliance.openmobileapi"
android:required="false" />
<activity
android:name="com.unionpay.uppay.PayActivity"
android:configChanges="orientation|keyboardHidden"
android:excludeFromRecents="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.unionpay.UPPayWapActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/dialogStyle" />
<activity-alias
android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:targetActivity="com.chuanglan.shanyan_sdk.view.CmccLoginActivity"
android:theme="@style/dialogStyle" />
<activity
android:name="com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:theme="@style/dialogStyle" />
<activity
android:name="com.chuanglan.shanyan_sdk.view.CTCCPrivacyProtocolActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTop"
android:screenOrientation="behind"
android:theme="@style/dialogStyle" />
<receiver
android:name="com.lion.ccpay.receiver.NetStateReceiver"
android:exported="true" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
2.2.3 添加游戏的SDK信息的meta-data:
xxxxxxxxxx
<meta-data
android:name="developer_key"
android:value="游戏developer_key" />
<meta-data
android:name="app_id"
android:value="游戏app_id" />
<!--全面屏配置-->
<meta-data
android:name="android.max_aspect"
android:value="2.3" />
2.2.4 添加QQ支付Activity,其中qqPay游戏ID内容为[qqPay]+[你的APP_ID]:
xxxxxxxxxx
<activity
android:name="com.lion.ccpay.app.user.QQPayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/lion_transparent"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="qqPay游戏ID" />
</intent-filter>
</activity>
2.2.5 添加SDK需要的uses-permission:
在游戏AndroidManifest.xml文件中添加如下uses-permission:
xxxxxxxxxx
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS"/>
2.2.6 添加银联支付libs:
添加Open Mobile API时,请到SDK目录下的add-ons的文件夹或到这里(Open Mobile API的官网见:)下载一下对应jar包和配置文件,解压后放到sdk的add-ons里,具体步骤如下:
1、解压并放到adt/sdk/add-ons文件夹:
2、打开文件夹中的source.properties文件,修改最后一个的ApiLevel,默认为19,请改为自己实际使用的api号,比如截图用了23。
2.2.6.1 Eclipse配置:
重启eclipse后就能看到target里新出现了open mobile的api。
2.2.6.2 Android studio配置:
SDK里有Open Mobile Api的话直接选这个就可以:
没有的话gradle配置里配一下编译的时候带Open Mobile Api的jar(参考:http://stackoverflow.com/questions/41158758/how-to-build-an-android-sdk-to-be-able-to-use-libraries-located-in-sdk-add-ons):
2.2.7 配置user-sdk:
minSdkVersion为8,targetSdkVersion为(17 <= targetSdkVersion <= 22)的范围;
xxxxxxxxxx
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
2.2.8 混淆编译:
xxxxxxxxxx
-keepattributes *Annotation*
-keep class com.lion.ccpay.** { *;}
-keep class com.lion.ccsdk.** { *;}
-keepattributes JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keep class com.lion.ccpay.js.*{ public *;}
-keepclassmembers public class com.lion.ccpay.js.CcPayJs{
<fields>;
<methods>;
public *;
private *;
}
-keepclassmembers public class com.lion.ccpay.js.WxPayJs{
<fields>;
<methods>;
public *;
private *;
}
-keep class com.sagittarius.sdk.base.bean.** { *;}
-keep class android.** {*;}
-keep class com.UCMobile.** {*;}
-keep class com.alipay.** {*;}
-keep class com.dataeye.** {*;}
-keep class com.lion.android.http.** {*;}
-keep class com.nostra13.universalimageloader.** {*;}
-keep class com.ta.** { *;}
-keep class com.tencent.** { *;}
-keep class com.unionpay.** { *;}
-keep class com.ut.** { *;}
-keep class com.xbfxmedia.player.** { *;}
-keep class org.** {*;}
-keep class com.alibaba.fastjson.** {*;}
-keep class cn.** {*;}
2.3 接口使用说明
2.3.1 SDK初始化接口(必选接口)
请务必在游戏的Application中调用以下代码
xxxxxxxxxx
@Override
public void onCreate() {
super.onCreate();
CCPaySdk.getInstance().onCreate(this);
}
@Override
public void attachBaseContext(Context base) {
super.attachBaseContext(base);
CCPaySdk.getInstance().attachBaseContext(this, base);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
CCPaySdk.getInstance().onConfigurationChanged(this, newConfig);
}
@Override
public void onTerminate() {
CCPaySdk.getInstance().onTerminate();
}
2.3.2 游戏主Activity初始化接口(必选接口)
1、CCPaySdk.getInstance().init(this)
该方法用于需要在游戏主Activity中的onCreate中调用,只需调用一次
xxxxxxxxxx
CCPaySdk.getInstance().init(this);
2、public void onCreate(Activity activity)
该方法用于需要在游戏主Activity中的onCreate中调用
xxxxxxxxxx
CCPaySdk.getInstance().onCreate(this);
3、public void onResume(Activity activity)
该方法用于需要在游戏主Activity中的onResume中调用
xxxxxxxxxx
CCPaySdk.getInstance().onResume(this);
4、public void onPause(Activity activity)
该方法用于需要在游戏主Activity中的onPause中调用
xxxxxxxxxx
CCPaySdk.getInstance().onPause(this);
5、public void onStop(Activity activity)
该方法用于需要在游戏主Activity中的onStop中调用
xxxxxxxxxx
CCPaySdk.getInstance().onStop(this);
6、public void onDestroy(Activity activity)
该方法用于需要在游戏主Activity中的onDestroy中调用
xxxxxxxxxx
CCPaySdk.getInstance().onDestroy(this);
7、public void onRestart(Activity activity)
该方法用于需要在游戏主Activity中的onRestart中调用
xxxxxxxxxx
CCPaySdk.getInstance().onRestart(this);
8、public void onActivityResult (Activity activity, int requestCode, int resultCode, Intent data)
该方法用于需要在游戏主Activity中的onActivityResult中调用
xxxxxxxxxx
CCPaySdk.getInstance().onActivityResult(requestCode, resultCode, data);
9、public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
该方法用于需要在游戏主Activity中的onRequestPermissionsResult中调用
xxxxxxxxxx
/**
* targetSDKVersion >= 23时,必须要Override这个方法
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
CCPaySdk.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
}
2.3.3 用户登录接口(必选接口)
xxxxxxxxxx
CCPaySdk.getInstance().login(Activity activity, boolean gotoLoginIng, SdkLoginListener loginListener)
该方法用于登录,游戏内下线后登录,游戏内切换账号后登录,游戏内退出后登录。
参数 | 参数说明 |
---|---|
autoLogin | 如果是游戏刚进去的时候,请设置成true,请便于可以直接登录(如果已登录的用户), 如果要弹出登录框,则改成false。 |
loginListener | 登录的回调接口 |
调用用例:
xxxxxxxxxx
CCPaySdk.getInstance().login(this, autoLogin, new SdkLoginListener() {
@Override
public void onLoginSuccess(SdkUser user) {
ToastUtils.showLongToast(activity, "登录成功\n"
+ "uid:" + user.uid + "\ntoken:" + user.token
+ "\nuserName:" + user.userName
+ "\n是否实名:" + user.isAuthenticated()
+ "\n出生日期:" + user.getBirthday());
//uid--->用户ID
//token--->登录的凭证
//userName--->用户昵称
//isAuthenticated()--->用户是否实名
//getBirthday()--->用户出生日期
}
@Override
public void onLoginFail(String message) {
ToastUtils.showLongToast(activity, "登录失败~");
}
@Override
public void onLoginCancel() {
ToastUtils.showLongToast(activity, "登录取消~");
}
});
2.3.4 用户账号(主动调用)退出接口(必选接口)
xxxxxxxxxx
CCPaySdk.getInstance().logout(Activity activity);
游戏内下线、退出,该方法只是清除了账号登录的缓存(并非清除掉记录账号的数据),请接入方自行处理下线的逻辑
2.3.5 用户账号退出回调接口(必选接口)
xxxxxxxxxx
CCPaySdk.getInstance().setOnLoginOutListener(SdkLogoutListener loginOutListener) ;
监听虫虫SDK个人中心调用切换账号、修改密码。注:这里只处理了账号信息相关,请接入方自行处理游戏内注销逻辑
调用用例:
xxxxxxxxxx
CCPaySdk.getInstance().setOnLoginOutListener(new SdkLogoutListener() {
@Override
public void onLoginOut() {
ToastUtils.showLongToast(activity, "账号注销了~");
login(false);
}
});
2.3.6 退出APP接口(必选接口)
2.3.6.1 退出APP接口(必选接口)
xxxxxxxxxx
CCPaySdk.getInstance().killApp(Activity activity);
退出应用时必须调用
2.3.6.2 退出APP对话框方法(必接接入)
xxxxxxxxxx
CCPaySdk.getInstance().exitApp(Activity activity, boolean b, SdkExitAppListener listener);
退出应用时调用
调用用例:
xxxxxxxxxx
CCPaySdk.getInstance().exitApp(this, true, new SdkExitAppListener() {
@Override
public void onExitApp() {
CCPaySdk.getInstance().killApp(activity);
//处理游戏APP退出业务
finish();
}
});
2.3.6.3 未成年防沉迷退出方法(可选接入)
xxxxxxxxxx
CCPaySdk.getInstance().setUnderageLogoutOrKillAppListener(SdkUnderageLogoutOrKillAppListener listener);
默认不设置将退出宿主APP
调用用例:
xxxxxxxxxx
CCPaySdk.getInstance().setUnderageLogoutOrKillAppListener(new SdkUnderageLogoutOrKillAppListener() {
@Override
public void onLogoutOrKillApp() {
//可选择不退出APP, 切记先退出账号, 再拉起登录弹框
CCPaySdk.getInstance().logout(activity);
login(false);
}
});
2.3.7 支付接口(必选接口)
2.3.7.1 新版本(1.6.6)
新版本(1.6.6及以上版本)的支付接口重新调整了,添加了支付时候角色信息传入,详情看demo,不支持1.6.6以下版本兼容,请修改
xxxxxxxxxx
CCPaySdk.getInstance().pay4OLGame(Activity activity, String orderId, String productId, String productName, String currentMoney, String ext, PlayUserInfo playUserInfo, SdkPayListener payListener);
用于游戏内固定金额购买
参数 | 参数说明 |
---|---|
activity | 当前Activity |
orderId | 订单号 |
productId | 计费点(数值),productId与productName传一个即可,如果同时传,优先判断productId |
productName | 商品名称 |
currentMoney | 支付金额;(单位:元),例如:6,0.06 |
ext | 扩展参数;如果不需要,设置为空字符串("") |
playUserInfo | 用户角色信息,不能为空 |
payListener | 支付回调接口 |
调用用例:
xCCPaySdk.getInstance().pay4OLGame(activity, partnerTransactionNo, productId, productName, money, ext, playUserInfo, new SdkPayListener() {
@Override
public void onPayResult(int status, String tn, String money) {
String text = "";
switch (status) {
case SdkPayListener.CODE_SUCCESS://支付成功
text = "支付成功\n";
break;
case SdkPayListener.CODE_FAIL://支付失败
text = "支付失败\n";
break;
case SdkPayListener.CODE_CANCEL://支付取消
text = "支付取消\n";
break;
case SdkPayListener.CODE_UNKNOWN://支付结果未知
text = "支付结果未知\n";
break;
case SdkPayListener.CODE_CANCEL_USER_AUTH://取消实名认证
text = "取消实名认证\n";
break;
}
ToastUtils.showLongToast(activity, text + "status:" + status + "\ntn:" + tn + "\nmoney:" + money);
}
});
2.3.7.2 老版本(1.6.6以下版本不支持兼容,请修改))
2.3.8 用户是否登录接口
xxxxxxxxxx
CCPaySdk.getInstance().isLogin();
2.3.9 用户角色信息上报接口
xxxxxxxxxx
CCPaySdk.getInstance().submitExtraData(getPlayUserInfo(PlayUserInfo.TYPE_EXIT_GAME));
//测试数据
//必须调用该方法
//该方法将调用的时机分为几种类型: 1:选择服务器 2:创建角色 3:进入游戏 4:等级提升 5:退出游戏
public PlayUserInfo getPlayUserInfo(int type) {
PlayUserInfo playUserInfo = new PlayUserInfo();
playUserInfo.setDataType(type);
playUserInfo.setServerID(1);
playUserInfo.setServerName("天龙八部");
if (PlayUserInfo.TYPE_SELECT_SERVER != type) {
playUserInfo.setMoneyNum(500);
playUserInfo.setRoleCreateTime(1498115418);
playUserInfo.setRoleGender(1);
playUserInfo.setRoleID("123");
playUserInfo.setRoleLevel(20);
playUserInfo.setRoleLevelUpTime(1498115418);
playUserInfo.setRoleName("嘟嘟小灰");
playUserInfo.setVip("1");
}
return playUserInfo;
}
2.3.10 隐私协议
xxxxxxxxxx
CCPaySdk.getInstance().showDlgPrivacyAgreement(activity, new OnPrivacyPermissionListener() {
@Override
public void onAgree() {
//隐私协议同意,申请权限
//CCPaySdk.getInstance().requestPermission
}
});
2.3.11 申请权限(targetSDKVersion >= 23时 必选接口)
xxxxxxxxxx
CCPaySdk.getInstance().requestPermission(2000, new OnPermissionsListener() {
@Override
public void onSuccess(int code) {
//申请权限成功调用
}
@Override
public void onFail(int code) {
//申请权限失败调用()
}
@Override
public void onCancel() {
//申请权限取消调用
}
@Override
public boolean onShowTipDialog() {
return true;//是否显示提示对话框
}
@Override
public String getPermissionTip() {
return null;//自定义显示提示对话框内容
}
});
targetSDKVersion >= 23时,必须要调用申请权限,SDK需要用到的权限(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE,Manifest.permission.CAMERA),最好是在登录之前调用。
3. 服务端相关接口及说明
3.1 支付返回结果回调(POST)
支付回调是在开发者后台的集成SDK步骤的应用回调地址,参考设置
xxxxxxxxxx
orderPrice=0.20&packageId=102067&partnerTransactionNo=123456789&productId=102300&sign=0a202819fc6eb9bf3bbf08783e566555&statusCode=0000&transactionNo=2016092218022982230858632
参数 | 参数 | 参数说明 |
---|---|---|
transactionNo | string | 虫虫支付订单号 |
partnerTransactionNo | string | 商户订单号 |
statusCode | string | 订单状态(0000表示支付成功,0002表示支付失败) |
productId | int | 支付商品的Id |
orderPrice | float | 订单金额(单位:元) |
packageId | int | 游戏ID |
productName | String | 支付商品的名称;1.6SDK新增字段,SDK的支付方法的productName参数原样返回 |
extParam | string | 扩展字段;1.6SDK新增字段,SDK的支付方法的extParam参数原样返回 |
userId | int | 用户ID;1.6SDK新增字段,用于校验下单是否一致 |
sign | string | 回调签名,接收到虫虫游戏回调请求时,先进行验签,再进行自己的业务处理 |
签名算法:MD5(参数1=值1&参数2=值2&签名密钥)。 将除了sign本身的参数,返回的参数(参数意义参考以上表格)按照a-z排序,将参数=值以&拼接起来,最后拼接&,再拼接签名密钥后进行MD5计算。 “签名密钥”在应用详情->集成SDK页面获取。 注意: 1、空字符串的参数不要拼接上,不参与签名。 2、除了签名校验,商品名称、商品价格、商户订单号要做好和游戏服务器的检验。
示例:
xxxxxxxxxx
var str = MD5(orderPrice=0.20&packageId=102067&partnerTransactionNo=123456789&productId=102300&statusCode=0000&transactionNo=2016092218022982230858632&{签名密钥})
if str == sign {
print(验签成功!)
} else {
print(验签失败!)
}
回调响应:返回格式字符串;成功返回success,失败返回fail
3.2 用户登录状态验证接口(字符串)
xxxxxxxxxx
http://android-api.ccplay.cn/api/v2/payment/matchUserIdAndToken?user_id=123&token=123
请求方式:GET 请求参数:token用户登录token,user_id用户id 返回结果:success表示已登录 fail表示未登录
3.3 订单状态查询接口
xxxxxxxxxx
http://android-api.ccplay.cn/api/v2/payment/orderStatus/?transaction_no=2016082317594588393112974&developerKey=94d1712b9e5047afa436665604002b71
请求方式:GET 请求参数:developerKey开发者key 请求参数:transaction_no虫虫订单号 返回结果:查询失败的情况会输出错误消息;查询成功的情况会返回如下JSON字段:
参数 | 参数说明 |
---|---|
statusCode | 订单状态(0000表示支付成功,0002表示支付失败) |
partnerTransactionNo | 商户订单号 |
packageId | 游戏ID |
orderPrice | 订单金额(单位:元) |
transactionNo | 虫虫支付订单号 |
productId | 支付商品的Id |
3.4 实名认证信息接口
列表接口测试地址:http://android-release.ccplay.cn/api/v3/sdk/auth/userDataList 列表接口正式地址:http://android-api.ccplay.cn/api/v3/sdk/auth/userDataList
单条用户接口测试地址:http://android-release.ccplay.cn/api/v3/sdk/auth/userDataDetail 单条用户接口测试地址:http://android-api.ccplay.cn/api/v3/sdk/auth/userDataDetail
接口以HTTP协议进行POST请求 sign用于参数安全性验证,算法:将所有非空参数按a-z排序以&拼接,再拼接&开发者密钥,再进行MD5。
3.4.1 获取应用下已实名用户信息列表接口(每页返回500条数据)
调用模式 | HTTP POST | ||||
模块编码 | http://android-api.ccplay.cn/api/v3/sdk/auth/userDataList | ||||
接口参数 | package_id | Int | 应用ID | ||
developer_user_id | Int | 开发者ID | |||
page | Int | 页码 | |||
sign | string | 签名 | |||
返回数据 | results | array | real_name | String | 姓名 |
user_id | Int | 用户ID | |||
id_card_number | String | 身份证号 | |||
phone | String | 手机号 |
xxxxxxxxxx
例如:
接口参数:
package_id=102067
developer_user_id=20000
page=1
参数按a-z排序以&拼接,再拼接&开发者密钥MD5之后,sign=663a5d4e29bea1c51557c7e2b0853039
请求为:
http://android-release.ccplay.cn/api/v3/sdk/auth/userDataList?package_id=102067&developer_user_id=20000&sign=663a5d4e29bea1c51557c7e2b0853039&page=1
3.4.2 根据用户ID获取应用认证信息接口
调用模式 | HTTP POST | ||||
模块编码 | http://android-api.ccplay.cn/api/v3/sdk/auth/userDataDetail | ||||
接口参数 | package_id | Int | 应用ID | ||
developer_user_id | Int | 开发者ID | |||
user_id | Int | 用户ID | |||
sign | string | 签名 | |||
返回数据 | results | bean | real_name | String | 姓名 |
user_id | Int | 用户ID | |||
id_card_number | String | 身份证号 | |||
phone | String | 手机号 |
xxxxxxxxxx
例如:
接口参数:
package_id=102067
developer_user_id=20000
user_id=2442302
参数按a-z排序以&拼接,再拼接&开发者密钥MD5之后,sign=f5d2cea003069a13eec0063f49503ded
请求为:
http://android-release.ccplay.cn/api/v3/sdk/auth/userDataDetail?package_id=102067&developer_user_id=20000&user_id=2442302&sign=f5d2cea003069a13eec0063f49503ded
4. 常见问题
快速接入
按照下面步骤执行,即可完成SDK的基本接入.
第一步:获取developer_key 和 获取app_id
请参考「接入前准备工作」,如已创建应用请至「应用管理」中获取。
第二步:导入SDK
解压ZIP包将SDK核心jar包合并到目标应用的构建路径中,本SDK目前支持Android2.3及以上的系统版本,虫虫SDK开发环境的配置流程如下(参考下图demo开发环境配置,导入demo工程请以utf-8编码):
导入如下资源文件:
导入jar包
将SDK包内的libs目录下的文件(夹)放到应用工程的libs目录下。
添加assets目录下的文件
将assets目录下的文件(夹)复制到应用工程assets目录下。
配置应用工程的AndroidManifest.xml,具体配置参见SDK包内的demo-src目录下的demo源代码。
添加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
添加activity
<activity
android:name="com.lion.ccpay.app.SystemMsgListActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.SystemMsgItemActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.HelpActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.community.CommunityPlateDetalActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.community.CommunitySubjectDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.community.CommunityChoicePhotoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.community.CommunityChoiceCameraPhotoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.community.CommunitySubjectFloorDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.community.CommunitySubjectSearchActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.community.post.CommunityPostNormalActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.UserCenterActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.WebViewActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.GameAvaliableCouponActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/transparent" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletCouponActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletChangeLogActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.user.MyRechargeCardActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.user.MyGameCardActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletRechargeCCActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletOrderInfoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletOrderInfoPayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.lion.ccpay.app.user.MyWalletChangeLogDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<!-- alipay sdk begin -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
<!-- alipay sdk end -->
<!-- 银联 -->
<activity
android:name="com.unionpay.uppay.PayActivity"
android:configChanges="orientation|keyboardHidden"
android:excludeFromRecents="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<activity
android:name="com.unionpay.UPPayWapActivity"
android:configChanges="orientation|keyboardHidden|fontScale"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<receiver android:name="com.lion.ccpay.receivers.PackageInstalledReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
<data android:scheme="package" />
</intent-filter>
</receiver>
添加QQ支付Activity,其中qqPay游戏ID内容为[qqPay]+[你的APP_ID]
<activity
android:name="com.lion.ccpay.app.user.QQPayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/transparent"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="qqPay游戏ID" />
</intent-filter>
</activity>
添加meta-data
<meta-data
android:name="developer_key"
android:value="你的developer_key" />
<meta-data
android:name="app_id"
android:value="你的APP_ID" />
混淆编译
-optimizationpasses 5
-ignorewarnings
-allowaccessmodification
#-dontpreverify
#开启侵入性重载混淆
-overloadaggressively
#指定不去忽略非公共的库类。
-dontskipnonpubliclibraryclasses
#指定不去忽略包可见的库类的成员。
-dontskipnonpubliclibraryclassmembers
#确定统一的混淆类的成员名称来增加混淆
-useuniqueclassmembernames
#混淆时不会产生形形色色的类名
-dontusemixedcaseclassnames
-target 1.6
-useuniqueclassmembernames
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-adaptresourcefilenames **.properties
-adaptresourcefilecontents **.properties,META-INF/MANIFEST.MF
-verbose
#jar包里面的类不混淆
-keep class com.lion.ccpay.** { *;}
-keep class android.support.v4.** {*;}
-keep class com.UCMobile.** {*;}
-keep class com.alipay.** {*;}
-keep class com.dataeye.** {*;}
-keep class com.loopj.android.http.** {*;}
-keep class com.nostra13.universalimageloader.** {*;}
-keep class com.ta.utdid2.** { *;}
-keep class com.tencent.** { *;}
-keep class com.unionpay.** { *;}
-keep class com.ut.device.** { *;}
-keep class com.xbfxmedia.player.** { *;}
-keep class org.apache.** {*;}
Application用法
-
如果没有自定义Application但没有继承CCPayApplication,请实现红框内方法
-
如果继承了其他Application,请实现下图中的方法
-
如果继承了CCPayApplication,则自行处理
-
如果无任何继承,则如下图配置
调用api方法 (参照demo)
名称 | 接口 |
---|---|
初始化SDK(必须调用) | CCPaySdk.getInstance().init(Activity) |
登录SDK(必须调用) | CCPaySdk.getInstance().login(OnLoginCallBack) |
游戏内下线、切换账号、退出 | CCPaySdk.getInstance().onOffline() |
游戏内下线、切换账号、退出后登录 | CCPaySdk.getInstance().login(false, OnLoginCallBack) |
虫虫助手个人中心修改密码监听(必须调用) | CCPaySdk.getInstance().setOnAccountPwdChangeListener(OnChangeAccountListener) |
虫虫助手个人中心账号注销监听(必须调用) | CCPaySdk.getInstance().setOnLoginOutAction(OnLoginOutAction) |
支付(必须调用) | CCPaySdk.getInstance().pay(productId,partnerTransactionNo,OnPayAction) |
自定义金额支付 | CCPaySdk.getInstance().pay(productId,partnerTransactionNo,money,OnPayAction) |
onResume添加(必须调用) | Stats.onResume(Activity) |
onPause添加(必须调用) | Stats.onPause(Activity) |
退出应用(必须调用) | CCPaySdk.getInstance().onLogOutApp() |
-
1. CCPaySdk.getInstance().init(Activity)
1.1 初始化SDK,在程序开始时调用(主要用于登录对话框显示及悬浮窗的显示)
-
2. CCPaySdk.getInstance().login(boolean, OnLoginCallBack);
2.1 用于登录,游戏内下线后登录,游戏内切换账号后登录,游戏内退出后登录
2.2 boolean:表示是否跳过输入用户名密码,直接登录
2.3 OnLoginCallBack:用户登录时回调的接口
@Override public void onLoginSuccess(String uid, String token, String userName) { //uid--->用户ID //token--->登录的凭证 //userName--->用户昵称 } @Override public void onLoginCancel() { //登录取消 } @Override public void onLoginFail() { //登录失败 }
-
3. CCPaySdk.getInstance().onOffline();
3.1 游戏内下线、退出,该方法只是清除了账号登录的缓存(并非清除掉记录账号的数据),请接入方自行处理下线的逻辑
-
4. CCPaySdk.getInstance().setOnAccountPwdChangeListener(OnAccountPwdChangeListener);
4.1 虫虫SDK个人中心调用修改密码
4.2
CCPaySdk.getInstance().setOnAccountPwdChangeListener(new OnAccountPwdChangeListener() { @Override public void onAccountPwdChange() { CCPaySdk.getInstance().onOffline();//调用下线处理 } });
-
5. CCPaySdk.getInstance().setOnLoginOutAction(OnLoginOutAction);
5.1 虫虫SDK个人中心调用注销。注:这里只处理了账号信息相关,请接入方自行处理游戏内注销逻辑
5.2
CCPaySdk.getInstance().setOnLoginOutAction(new OnLoginOutAction() { @Override public void onLoginOut() { ToastUtils.showLongToast(mContext, "账号注销了~"); } });
-
6. CCPaySdk.getInstance().onLogOutApp()
6.1 用于退出程序后SDK缓存释放
-
7. Stats.onResume(Context),Stats.onPause(Context);
7.1 用过DataEye统计
-
8. CCPaySdk.getInstance().pay(productId,partnerTransactionNo,OnPayAction)
8.1 用于游戏内固定金额购买
8.2 productId:商品ID
8.3 partnerTransactionNo:订单号
8.4 OnPayAction:回调接口
@Override public void onPayResult(int status, String tn, String money) { //tn--->订单号 //money--->金额 switch (status) { case OnPayListener.CODE_SUCCESS://支付成功 break; case OnPayListener.CODE_FAIL://支付失败 break; case OnPayListener.CODE_CANCEL://支付取消 break; case OnPayListener.CODE_UNKNOW://支付结果未知 break; } }
-
9. CCPaySdk.getInstance().pay(productId,partnerTransactionNo,money,OnPayAction)
9.1 用于游戏内自定义金额购买
9.2 productId:商品ID
9.3 partnerTransactionNo:订单号
9.4 money:金额
9.5 OnPayAction:回调接口
@Override public void onPayResult(int status, String tn, String money) { //tn--->订单号 //money--->金额 switch (status) { case OnPayListener.CODE_SUCCESS://支付成功 break; case OnPayListener.CODE_FAIL://支付失败 break; case OnPayListener.CODE_CANCEL://支付取消 break; case OnPayListener.CODE_UNKNOW://支付结果未知 break; } }
-
10. 如果游戏内的登录界面与游戏界面不是同一个界面的情况下
10.1 请在登录成功的回调内调用CCPaySdk.getInstance().closeFw()关闭悬浮窗
10.2 请在游戏界面内调用CCPaySdk.getInstance().init(Activity);
10.3 调用CCPaySdk.getInstance().showFw();显示悬浮窗
11. CCPaySdk.getInstance().isLogined():判断用户是否登录
服务端接入回调
1.支付返回结果回调
orderPrice=0.20&packageId=102067&partnerTransactionNo=123456789&productId=102300&sign=0a202819fc6eb9bf3bbf08783e566555&statusCode=0000&transactionNo=2016092218022982230858632
参数 | 参数说明 |
---|---|
transactionNo | 虫虫支付订单号 |
partnerTransactionNo | 商户订单号 |
statusCode | 订单状态(0000表示支付成功,0002表示支付失败) |
productId | 支付商品的Id |
orderPrice | 订单金额 |
packageId | 游戏ID |
sign | 回调签名,开发者在接收到虫虫游戏回调请求时,先进行验签,再进行自己的业务处理。 |
签名算法:MD5(参数1=值1&参数2=值2&签名密钥)。
将除了sign本身的参数,按照a-z排序,将参数=值以&拼接起来,最后拼接&,再拼接签名密钥后进行MD5计算。
“签名密钥”在应用详情->集成SDK页面获取。
注意:空字符串的参数不要拼接上,不参与签名。
回调响应:返回格式字符串;成功返回success,失败返回fail
2.用户登录状态验证接口(字符串)
http://android-api.ccplay.cn/api/v2/payment/checkUser?token=123456
请求方式:GET
请求参数:token用户登录token
返回结果:success表示已登录 fail表示未登录
3.订单状态查询接口
http://android-api.ccplay.cn/api/v2/payment/orderStatus/?transaction_no=2016082317594588393112974&developerKey=94d1712b9e5047afa436665604002b71
{
"statusCode": "0000",
"partnerTransactionNo": "ewl58",
"packageId": 103717.0,
"orderPrice": "498.00",
"transactionNo": "2016082317594588393112974",
"productId": 104743.0
}
请求方式:GET
请求参数:developerKey开发者key
请求参数:transaction_no虫虫订单号
返回结果:查询失败的情况会输出错误消息;查询成功的情况会返回如下JSON字段:
参数 | 参数说明 |
---|---|
statusCode | 订单状态(0000表示支付成功,0002表示支付失败) |
partnerTransactionNo | 商户订单号 |
packageId | 游戏ID |
orderPrice | 订单金额 |
transactionNo | 虫虫支付订单号 |
productId | 支付商品的Id |