概述
腾讯游戏统一使用米大师(Midas)进行支付。米大师(Midas)是腾讯官方提供的移动端支付SDK,能够提供Q币,Q卡,财付通,银行卡,微信支付,手机充值卡,话费等支付渠道。提供原生的android和iap(苹果官方版)支付SDK,和一整套的支付服务,包括营销活动的支持。这里只做简要的介绍,详情请参考米大师wiki。
接入向导
1 前置条件
1)完成MSDK登录的接入
在进行支付时需要填入一些票据信息如手Q的appid,appkey,微信的appid;pf,pfkey,openid,pay_token(手Q登录时需要) accessToken(微信登录时需要)这些信息都是在登录成功后获取到的。请参考登录功能和 如何获取票据信息。此外您还需要传入offerid,offerid请到http://midas.qq.com申请。在申请时请注意:需要有项目组公用QQ账号,申请支付ID时不建议使用私人QQ。
2)完成米大师的其他要求
详情请参考接入米大师准备工作。
2 配置游戏支付信息
需要在米大师的计费接入网站配置游戏的基本信息以及支付信息:
管理员账号,产品经理,开发负责人,以及运维负责人的RTX;
手Q的appid,appkey,微信的appid;
应用名称,游戏币名称以及兑换比例;
计费方式:充值游戏币或者是直接购买道具;
详情请参考andorid支付配置详情。
配置完这些信息之后就可以开始sdk的接入以及联调了。
3 米大师SDK接入与联调
主要分为三大步:
1)导入MidasSDK文件
2)配置AndroidManifest.xml
3)调用Midas支付接口
详见SDK的接入
4 米大师服务器接口接入与联调
米大师提供给了服务器调用的支付接口,包括查询游戏币余额,充值,寄售,营销等。详情请查看米大师后台API说明。
5 支付上线注意事项
需要提交审核,并切换正式环境。请参考如何上线-Android。
SDK的接入
1 导入MidasSDK文件
首先到Midas官网下载AndroidSDK。
1)将MidasSDK\libs\MidasPluginXX.jar 拷入Android应用项目工程的assets目录。
2)将MidasSDK\asset\MidasPay.zip拷入Android应用项目工程的assets目录。
3)将MidasSDK\res\anim下的4个资源拷贝到应用项目的res\anim目录下。
4)微信支付渠道集成。如果已经集成微信的相关支付包如MSDK,则可以不拷入libammsdk.jar;否则,就需要拷入libammsdk.jar包(在libs目录下),以便能够使用微信支付渠道。
5)qq钱包渠道集成。需要拷入mqqopenpay.jar包(在libs目录下)。
6)登录jar包引入说明
对于微信平台需要调用SDK内登录或者手Q平台自研应用调用SDK内登录,需要wlogin_sdk.jar。如果应用中已经包含了wlogin_sdk.jar,则共用即可。对于不需要调用内登陆的应用,如大厅平台则可以删除下面截图红框中的包(在libs目录下),midas 1.3.9版本,使用的是wtlogin的5.2版本;但是midas同时兼容wtlogin的低版本。
7)特别注意:MidasPaySample的libs下的armeabi目录和x86目录下的libwtecdh.so库,是wtlogin新版本(5.x以上)所需要的so库,如果游戏使用的是低版本的wtlogin(4.x),那么删除wlogin_sdk.jar包和armeabi目录和x86目录下的so库即可
2 配置AndroidManifest.xml
1) App权限声明,请加入以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
2) 加入Activity声明
<activity
android:name="com.tencent.midas.proxyactivity.APMidasPayProxyActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize”
android:screenOrientation="landscape" />
<activity
android:name="com.tencent.midas.wx.APMidasWXPayActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true" />
<activity
android:name="com.tencent.midas.qq.APMidasQQWalletActivity"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="qwallet100703379"/>
</intent-filter>
</activity>
<activity android:name="com.tencent.midas.jsbridge.APWebJSBridgeActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden"/>
3) 其他配置
android:targetSdkVersion大于等于13,则设置
android:configChanges="orientation|keyboardHidden|screenSize
android:targetSdkVersion小于13,则设置
android:configChanges="orientation|keyboardHidden
详情请参考米大师ANDROID SDK接入。
3 调用Midas支付接口
此处仅提供将代币支付/道具支付的简单说明已经实例,方便您快速了解接入大致步骤,详情还需参考米大师SDK接口说明。
1) 调用Midas SDK初始化接口
a)功能描述
初始化Midas SDK。
b)接口声明
public static void init(Activity activity, APMidasBaseRequest request)
说明:在游戏初始化时调用该接口初始化SDK,在使用Midas其它接口之前必须先至少调用一次init初始化操作。
c)参数说明
参数名称 | 类型 | 说明 |
---|---|---|
gameActivity | Activity | 游戏Activity |
request | APMidasBaseRequest | 米大师支付请求 |
d)返回值
无
e)示例代码
APMidasGameRequest initRequest = new APMidasGameRequest();
LoginRet lr = new LoginRet();
WGPlatform.WGGetLoginRecord(lr);
initRequest.offerId = WeGame.getInstance().offerId;
initRequest.openId = lr.open_id;
if(lr.platform == WeGame.QQPLATID){
initRequest.openKey = lr.getTokenByType(TokenType.eToken_QQ_Pay);
initRequest.sessionType = "kp_actoken";
initRequest.sessionId = "openid";
}else if(lr.platform == WeGame.WXPLATID){
initRequest.openKey = lr.getTokenByType(TokenType.eToken_WX_Access);
initRequest.sessionType = "wc_actoken";
initRequest.sessionId = "hy_gameid";
}
initRequest.pf = WGPlatform.WGGetPf("");
initRequest.pfKey = WGPlatform.WGGetPfKey();
APMidasPayAPI.init(mainActivity, initRequest);
2) 环境参数设置
a)功能描述
环境参数设置:test 支付沙箱环境,release支付现网环境。建议应用在接入时先在沙箱环境测试通过后,切换至release再发布。
b)接口声明
public static void setEnv(String env)
c)参数说明
参数名称 | 类型 | 说明 |
---|---|---|
env | String | 支付环境 |
d)返回值
无
e)示例代码
APMidasPayAPI.setEnv(APMidasPayAPI.ENV_TEST);
3) 调用支付接口进行支付
a)功能描述
开启充值模块界面,引导用户完成 充值游戏币,充值数额由支付SDK提供默认值,用户可修改。(注意:该方法需运行在主线程)IAPMidasPayCallBack是支付的回调,返回支付结果,具体使用方法参见以下例子。注意请根据平台填写对应的sessionType,在示例中已经给出了说明。
b)接口声明
public static void launchPay(Activity activity, APMidasBaseRequest request,IAPMidasPayCallBack callBack)
c)参数说明
参数名称 | 类型 | 说明 |
---|---|---|
activity | Activity | 支付时的游戏Activity |
request | APMidasBaseRequest | Midas支付request |
callBack | IAPMidasPayCallBack | Midas支付回调接口 |
d)返回值
无
e)示例代码
APMidasGameRequest request = new APMidasGameRequest();
request.offerId = offerId;
request.openId = userId;
request.openKey = userKey;//手Q为 paytoken,微信为accesstoken
request.sessionId = sessionId;
request.sessionType = sessionType;//手Q为"kp_actoken"、微信为"wc_actoken"
request.zoneId = "1";
request.pf = pf;
request.pfKey = pfKey;
request.acctType = "common";
request.saveValue = "";//未指定数量,这里直接进入购买数量选择列表
request.resId = R.drawable.sample_yuanbao;
APMidasPayAPI.launchPay(gameActivity, request,
new IAPMidasPayCallBack(){
@Override
public void MidasPayCallBack(APMidasResponse arg0) {
Log. d("MSDK_PAY", "支付sdk回调应用" );
switch(response.resultCode){
case APMidasResponse.PAYRESULT_ERROR:
Log. d("MSDK_PAY", "支付出错" );
break;
case APMidasResponse.PAYRESULT_CANCEL:
Log. d("MSDK_PAY", "用户取消" );
break;
case APMidasResponse.PAYRESULT_SUCC:
Log. d("MSDK_PAY", "支付成功" );
}
}
@Override
public void MidasPayNeedLogin() {
Log. d("MSDK_PAY", "登录票据过期,请重新登录" );
}
});
4) 日志打印开关
a)功能描述
打开日志开关,Midas将会打印支付日志,方便调试。
b)接口声明
public static void setLogEnable(boolean logEnable)
c)参数说明
参数名称 | 类型 | 说明 |
---|---|---|
logEnable | boolean | true:打开,false:关闭 |
d)返回值
无
e)示例代码
APMidasPayAPI.setLogEnable(true);
常见问题
如果您在接入MIDAS ANDROID SDK时,发现解压Miads的安装包中存在微信SDK(libammsdk.jar)、和mid相关SDK(mid-***.jar)并且与MSDKLibrary里面的相关jar包冲突的话,删除对应的jar包即可。
其他支付问题详见米大师Android-FAQ。