单机支付SDK客户端文档

1. 申请支付接口

登录4399手机开放平台http://open.4399.cn,点击 [新建游戏] 填写相关信息完成游戏创建, 进入游戏详细页面,选择 [支付SDK] - [配置管理] 填写配置并提交申请。 

2. 环境搭建

下载SDK包

SDK下载地址: 点击这里

关联类库项目

假设现在你的工程目录名字叫project,下面将具体介绍如何将SDK接入project

① 将m4399RechargeSDK工程关联到project

② 将m4399RechargeSDK导入到eclipse

③ 右键点击m4399RechargeSDK工程名→PropertiesAndroid

④ 勾选Is Library→OK 

⑤ 右键点击project工程名→Properties→Add 

⑥ 在弹出的对话框中点选资源工程m4399RechargeSDK→OK 

若游戏仅支持部分指令集,需要在引入资源工程后将m4399RechargeSDK\lib\目录下未使用的指令集文件夹删除。 

 如游戏仅支持arm6(armeabi),即可将其余的x86、arm64-v8a、armeabi-v7a文件夹删除。 

配置Androidmanifest.xml 

添加SDK所需权限

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE"/>

注册SDK相关Activity&Service,注意必须放入元素区块内

<!-- For 4399 Recharge SDK -->
<activity
    android:name="cn.m4399.recharge.ui.activity.RechargeActivity"
        android:launchMode="singleTask"
        android:configChanges="orientation|screenSize|keyboardHidden"
        android:theme="@style/m4399ActivityTheme" />

<!--------以下为第三方支付SDK Activity&Service配置------------>
<activity android:name="com.alipay.sdk.app.H5PayActivity"
        android:screenOrientation="landscape"/>

注:第三方支付SDK的Activity需在AndroidManifest.xml中强制配置横竖屏,请游戏方根据游戏的横竖屏要求手工配置landscape|portrait

3. 代码实现

初始化SDK

初始化推荐在游戏初始化过程中进行,析构函数则在游戏退出前执行。

//获取SDK单例
mOpeCenter = SingleOperateCenter.getInstance();

//配置SDK
new OperateCenterConfig.Builder(this)
    .setDebugEnabled(true)  //发布游戏时,要设为false
    .setOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) //界面方向
    .setSupportExcess(true) //设置是否支持超出金额充值
    .setGameKey("70000")    //换成实际游戏的gamekey
    .setGameName("测试游戏")    //换成实际游戏的名字,原则上与游戏名字匹配
    .build();

//设置充值回调    
SingleRechargeListener singleRechargeListener = new SingleRechargeListener() {
    /**
     * 充值过程结束时SDK回调此方法
     *  
     * 充值过程结束并不代表订单生命周期全部完成,SDK还需要查询订单状态,游戏
     * 要根据订单状态决定是否发放物品等
     *
     * @param msg 表示充值结果的友好的文本说明
     */
    @Override
    public void onRechargeFinished(boolean success, String msg){
        Log.d(TAG, "Pay: [" + msg + "]");
    }

    /**
     * 充值过程成功完成后,SDK会查询订单状态,根据订单状态状态通知游戏发放物品
     * 
     * @param shouldDeliver
     *  是否要发放物品
     * @param o
     *  封装了最后提交的订单信息的对象,主要包含以下成员,各成员都有getter方法
     *  payChannel: 充值渠道
     *  orderId:        充值订单号
     *  je:     充值金额
     *  goods:      购买的物品
     *
     * @return 
     *  物品发放过程是否成功
     */
    @Override
    synchronized public boolean notifyDeliverGoods(boolean shouldDeliver, RechargeOrder o) {
        if (shouldDeliver) {
            Log.d(TAG, "单机充值发放物品, [" + o + "]");
            return true;
        } else {
            Log.d(TAG, "单机充值查询到的订单状态不正常,建议不要发放物品");
            return false;
        }
    }
};

//初始化SDK
mOpeCenter.init(MainActivity.this, singleRechargeListener);

是否支持处理超出部分金额也可单独设置

mOpeCenter.setSupportExcess(support);

能否支持处理超出部分金额指在使用SDK充值时,由于用户选择的充值渠道不同,可能造成实际充值金额超出游戏下单时传入的金额。如果游戏正确处理超出部分的金额,则本接口传入true。如果无法支持处理超出部分的金额,则传入false,SDK将会根据传入金额自动隐藏无法满足充值金额的渠道。

(例:开发者设置SupportExcess为false,充值时传入7元,此时4399一卡通中无7元面额的充值卡,此时4399一卡通的充值渠道将自动隐藏)。SupportExcess默认为false。

注:代码中MainActivity为当前Activity。下文的mOpeCenter指OperateCenter实例,通过getInstance()静方法获得。

充值接口

当用户需要充值时,可调用本接口启动充值中心界面。

mOpeCenter.recharge(MainActivity.this, je, productName);

je充值金额:是整数字符串,4399充值中心仅支持整数金额充值,最小充值金额1元,最大不超过50000元。

productName商品名称:最长不超过8个字符(尽量不要传入特殊字符,以免造成充值异常)。如果传入商品名,充值中心将直接显示该商品名称,如果充值金额大于下单时传入的je时,将显示商品名+XXX游戏币,相关游戏币的兑换比例在接入时提供给运营人员配置。

如果未传入商品名,则直接显示XXX游戏币。

如果开发者在调用充值接口时,想从游戏客户端传递一些信息到游戏服务端,即透传一些信息,可以用下面的接口:

// extra是透传的字段
public void recharge(Context context,String money,String productName,String extra)

析构

游戏退出时调用本接口,释放SDK资源以及保存相关数据。

mOpeCenter.destroy();

显示SDK版本

mOpeCenter.getVersion(); //查看SDK版本号

检查更新

SDK包含自动更新模块,SDK将检查后台是否有新版本游戏上线,如果有,则显示更新内容,并提示用户升级。

该升级为增量升级,后台在提交新版本游戏时自动制作拆分包,更新时用户只需下载APK文件中新旧版本有差异的部分。

相关更新内容和版本提交事宜,请联系4399相关运营对接人员。

4399SDK的增量升级为全自动增量更新(无需操作,默认初始化完成)

代码混淆

如果您的应用使用了混淆,请不要混淆SDK代码,请添加代码。

-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**

-dontwarn com.unipay.**
-keep class cn.m4399.operate.** {*;}
-keep class cn.m4399.recharge.** {*;}
-keepclassmembers class cn.m4399.recharge.R$* {*;}