开发文档
虫虫支付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.7 | 2023.6 | 1.修复多次回调退出登录问题;2.增加未成年防沉迷退出接口;3.修复其他已知bug |
1.8.8 | 2023.8 | 1.优化交互 |
1.8.9 | 2023.11 | 1.优化订单详情 |
1.9.0 | 2023.11 | 1.支持折扣与代金券或福利币迭代使用;2.福利卡权益调整;3.优化交互。 |
1.9.1 | 2024.2 | 1.增加客服、礼包、活动、返利入口;2.订单支付支持使用折前使用代金券;3.个人信息增加显示QQ、微信;4.优化其他已知问题。 |
1.9.2 | 2024.5 | 1.修复已知BUG |
1.9.3 | 2024.6 | 1.隐私合规整改 |
1.9.4 | 2024.6 | 1.隐私合规整改 |
1.9.5 | 2024.7 | 1.支持创建小号 |
1.9.6 | 2024.10 | 1.增加悬浮球可隐藏;2.优化小号切换流程 |
-
虫虫支付SDK接入(网游版)使用说明
-
- 1. 引言
-
2. SDK相关
- 2.1 SDK流程图
- 2.2 SDK使用准备
-
2.3 接口使用说明
- 2.3.1 SDK 可选个人信息的配置示例
- 2.3.2 SDK初始化接口(必选接口)
-
2.3.3 游戏主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.4 用户登录接口(必选接口)
- 2.3.5 用户账号(主动调用)退出接口(必选接口)
- 2.3.6 用户账号退出回调接口(必选接口)
- 2.3.7 退出APP接口(必选接口)
- 2.3.7.1 退出APP接口(必选接口)
- 2.3.7.2 退出APP对话框方法(必接接入)
- 2.3.7.3 未成年防沉迷退出方法(可选接入)
- 2.3.8 支付接口(必选接口)
- 2.3.9 用户是否登录接口
- 2.3.10 用户角色信息上报接口
-
2.3.11 小号切换监听(1.9.6版本已移除) - 2.3.12 隐私协议
- 2.3.13 申请权限(targetSDKVersion >= 23时 必选接口)
- 3. 服务端相关接口及说明
- 4. 常见问题
-
1. 引言
1.1部分名词解释
名词 | 解释 |
---|---|
app_id | 游戏唯一标识,用于区分不同游戏的唯一标准。在虫虫开发者平台应用中心创建游戏时获取 |
developer_key | 开发者标识,在虫虫开发者平台申请通过后自动分配 |
1.2用户信息与隐私策略
注意:在为用户提供服务前请阅读 《隐私政策》和《合规指南》,了解SDK对个人信息收集范围、处理目的以及权限使用情况。请您向用户提供服务时,告知相关信息并取得用户同意。
2. SDK相关
2.1 SDK流程图
暂无
2.2 SDK使用准备
2.2.1 导入资源
2.2.1,1 导入jar包
将SDK包内的libs目录下的文件(夹)放到应用工程的libs目录下。
2.2.1,1 导入res
将SDK包内的res目录下的文件(夹)放到应用工程的res目录下。
2.2.1,3 添加assets目录下的文件
将assets目录下的文件(夹)复制到应用工程assets目录下。
2.2.2 添加SDK提供的Activity引用:
在游戏AndroidManifest.xml文件的application中添加由SDK提供的如下代码(注:1.9.3有更新):
`
<activity
android:name="com.lion.ccpay.app.ActivityAndRebateActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.RebateDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.MyRebateDetailActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.MyRebateListActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name="com.lion.ccpay.app.CustomerServiceActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize|stateHidden"/>
<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.welfare.WelfareCardBuyActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/lion_transparent"
android:windowSoftInputMode="adjustResize"/>
<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.CCPayUserInformationActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
<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.user.GetGameCouponActivity"
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.bindphone.BindPhoneQrCodeActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="locked"
android:windowSoftInputMode="adjustPan" />
<activity
android:name="com.lion.ccpay.app.bindphone.SYAuthBindActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="locked"
android:windowSoftInputMode="adjustPan" />
<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.FullScreenWebViewActivity"
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"/>
<activity
android:name="com.chuanglan.shanyan_sdk.view.CmccLoginAuthActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@android:style/Theme.Translucent" />
<activity-alias
android:name="com.cmic.gen.sdk.view.GenLoginAuthActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="false"
android:launchMode="singleTop"
android:targetActivity="com.chuanglan.shanyan_sdk.view.CmccLoginAuthActivity"
android:taskAffinity=""
android:theme="@android:style/Theme.Translucent" />
<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" />
<!-- 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" />
<receiver
android:name="com.lion.ccpay.receiver.NetStateReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<service
android:name="com.lion.ccpay.utils.record.ScreenRecorderService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="mediaProjection" />
<provider
android:name="com.lion.ccpay.utils.FileProvider"
android:authorities=".fileProvider"
android:exported="false"
tools:replace="android:authorities"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>`
2.2.3 添加游戏的SDK信息的meta-data:
<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" />
<meta-data
android:name="android.webkit.WebView.EnableSafeBrowsing"
android:value="false" />
2.2.4 添加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/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文件中添加如下(注:1.9.3有更新)uses-permission:
<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.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"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<queries>
<package android:name="com.lion.market"/>
<package android:name="com.tencent.mm"/>
<package android:name="com.eg.android.AlipayGphone"/>
</queries>
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 <= 32)的范围;
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
2.2.8 混淆编译:
-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 可选个人信息的配置示例
1、IMEI采集开关
CCPayCollectionControl.setCollectionImeiAndImsiEnable(boolean enable);
方法说明:
配置IMEI信息采集开关,默认为true,false不允许采集
2、IMSI采集开关
CCPayCollectionControl.setCollectionImeiAndImsiEnable(boolean enable);
方法说明:
配置IMSI信息采集开关,默认为true,false不允许采集
3、MAC采集开关
CCPayCollectionControl.setCollectionMacEnable(boolean enable);
方法说明:
配置MAC信息采集开关,默认为true,false不允许采集
2.3.2 SDK初始化接口(必选接口)
请务必在游戏的Application中调用以下代码
@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.3 游戏主Activity初始化接口(必选接口)
1、CCPaySdk.getInstance().init(this)
该方法用于需要在游戏主Activity中的onCreate中调用,只需调用一次
CCPaySdk.getInstance().init(this);
2、public void onCreate(Activity activity)
该方法用于需要在游戏主Activity中的onCreate中调用
CCPaySdk.getInstance().onCreate(this);
3、public void onResume(Activity activity)
该方法用于需要在游戏主Activity中的onResume中调用
CCPaySdk.getInstance().onResume(this);
4、public void onPause(Activity activity)
该方法用于需要在游戏主Activity中的onPause中调用
CCPaySdk.getInstance().onPause(this);
5、public void onStop(Activity activity)
该方法用于需要在游戏主Activity中的onStop中调用
CCPaySdk.getInstance().onStop(this);
6、public void onDestroy(Activity activity)
该方法用于需要在游戏主Activity中的onDestroy中调用
CCPaySdk.getInstance().onDestroy(this);
7、public void onRestart(Activity activity)
该方法用于需要在游戏主Activity中的onRestart中调用
CCPaySdk.getInstance().onRestart(this);
8、public void onActivityResult (Activity activity, int requestCode, int resultCode, Intent data)
该方法用于需要在游戏主Activity中的onActivityResult中调用
CCPaySdk.getInstance().onActivityResult(requestCode, resultCode, data);
9、public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
该方法用于需要在游戏主Activity中的onRequestPermissionsResult中调用
/**
* 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.4 用户登录接口(必选接口)
CCPaySdk.getInstance().login(Activity activity, boolean gotoLoginIng, SdkLoginListener loginListener)
该方法用于登录,游戏内下线后登录,游戏内切换账号后登录,游戏内退出后登录。
参数 | 参数说明 |
---|---|
autoLogin | 如果是游戏刚进去的时候,请设置成true,请便于可以直接登录(如果已登录的用户), 如果要弹出登录框,则改成false。 |
loginListener | 登录的回调接口 |
1.9.6版本开始SDK登录成功,SDK内部会自动调用悬浮球显示,开发者无需在登录成功回调内手动调用显示悬浮球
CCPaySdk.getInstance().showFloating(MainActivity.this);
调用用例:
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()--->用户出生日期
//登录成功调用
CCPaySdk.getInstance().onResume(MainActivity.this);
CCPaySdk.getInstance().submitExtraData(getPlayUserInfo(PlayUserInfo.TYPE_ENTER_GAME));
}
@Override
public void onLoginFail(String message) {
ToastUtils.showLongToast(activity, "登录失败~");
}
@Override
public void onLoginCancel() {
ToastUtils.showLongToast(activity, "登录取消~");
}
});
2.3.5 用户账号(主动调用)退出接口(必选接口)
CCPaySdk.getInstance().logout(Activity activity);
游戏内下线、退出,该方法只是清除了账号登录的缓存(并非清除掉记录账号的数据),请接入方自行处理下线的逻辑
2.3.6 用户账号退出回调接口(必选接口)
CCPaySdk.getInstance().setOnLoginOutListener(SdkLogoutListener loginOutListener) ;
监听虫虫SDK个人中心调用切换账号、修改密码。注:这里只处理了账号信息相关,请接入方自行处理游戏内注销逻辑
1.9.6版本开始退出登录SDK内部会调用 登录弹窗,开发者无需再次调用登录。
调用用例:
CCPaySdk.getInstance().setOnLoginOutListener(new SdkLogoutListener() {
@Override
public void onLoginOut() {
ToastUtils.showLongToast(activity, "账号注销了~");
}
});
2.3.7 退出APP接口(必选接口)
2.3.7.1 退出APP接口(必选接口)
CCPaySdk.getInstance().killApp(Activity activity);
退出应用时必须调用
2.3.7.2 退出APP对话框方法(必接接入)
CCPaySdk.getInstance().exitApp(Activity activity, boolean b, SdkExitAppListener listener);
退出应用时调用
调用用例:
CCPaySdk.getInstance().exitApp(this, true, new SdkExitAppListener() {
@Override
public void onExitApp() {
CCPaySdk.getInstance().killApp(activity);
//处理游戏APP退出业务
finish();
}
});
2.3.7.3 未成年防沉迷退出方法(可选接入)
CCPaySdk.getInstance().setUnderageLogoutOrKillAppListener(SdkUnderageLogoutOrKillAppListener listener);
默认不设置将退出宿主APP
调用用例:
CCPaySdk.getInstance().setUnderageLogoutOrKillAppListener(new SdkUnderageLogoutOrKillAppListener() {
@Override
public void onLogoutOrKillApp() {
//可选择不退出APP, 切记先退出账号, 再拉起登录弹框
CCPaySdk.getInstance().logout(activity);
login(false);
}
});
2.3.8 支付接口(必选接口)
2.3.8.1 新版本(1.6.6)
新版本(1.6.6及以上版本)的支付接口重新调整了,添加了支付时候角色信息传入,详情看demo,不支持1.6.6以下版本兼容,请修改
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 | 支付回调接口 |
调用用例:
CCPaySdk.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.8.2 老版本(1.6.6以下版本不支持兼容,请修改))
2.3.9 用户是否登录接口
CCPaySdk.getInstance().isLogin();
2.3.10 用户角色信息上报接口
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.11 小号切换监听(1.9.6版本已移除)
CCPaySdk.getInstance().setOnChoiceSubsidiaryListener(new SdkChoiceSubsidiaryListener() {
@Override
public void onAccountChanged(SdkUser user) {
}
});
2.3.12 隐私协议
CCPaySdk.getInstance().showDlgPrivacyAgreement(activity, new OnPrivacyPermissionListener() {
@Override
public void onAgree() {
//隐私协议同意,申请权限
//CCPaySdk.getInstance().requestPermission
}
@Override
public void onDisagree() {
//开发者可根据自己需求做处理
//finish();
//ToastUtils.showLongToast(activity, "退出游戏");
}
});
2.3.13 申请权限(targetSDKVersion >= 23时 必选接口)
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步骤的应用回调地址,参考设置
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、除了签名校验,商品名称、商品价格、商户订单号要做好和游戏服务器的检验。
示例:
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 用户登录状态验证接口(字符串)
http://android-api.ccplay.cn/api/v2/payment/matchUserIdAndToken?user_id=123&token=123
请求方式:GET
请求参数:token用户登录token,user_id用户id
返回结果:success表示已登录 fail表示未登录
3.3 订单状态查询接口
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 订单信息查询接口
https://android-api.ccplay.cn/api/v2/payment/orderDetail?transaction_no=2024092416401441637098940&developerKey=48ac9dbef7d54b3aa41f4f1e019b
请求方式:GET
请求参数:developerKey开发者key
请求参数:transaction_no 虫虫订单号
返回结果:查询失败的情况会输出错误消息;查询成功的情况会返回如下JSON字段:
参数 | 参数说明 |
---|---|
createDatetime | 创建时间 |
partnerTransactionNo | 商户订单号 |
productId | 商品id 可为空 |
togetherCouponMoney | 共同承担优惠卷金额 |
welfareMoney | 福利金额 |
cpCouponMoney | 平台优惠卷金额 |
couponMoney | 优惠卷金额 |
transactionNo | 虫虫订单号 |
packageId | 虫虫游戏id |
orderPrice | 订单原价 |
3.5 实名认证信息接口
列表接口测试地址: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.5.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 | 手机号 |
例如:
接口参数:
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.5.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 | 手机号 |
例如:
接口参数:
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.用户登录状态验证接口(字符串)
https://android-api.ccplay.com/api/v2/payment/checkUser?token=123456
请求方式:GET
请求参数:token用户登录token
返回结果:success表示已登录 fail表示未登录
3.订单状态查询接口
https://android-api.ccplay.com/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 |