游戏接入接口说明

1、注意事项

  1. 回调函数的参数大多数都是json格式字符串,会包含根据功能而变化的不同字段数据。少数为固定意义的字符串内容。
  2. sdk传入和传出的字符串参数都是宽字符字符串(wchar_t字符串)的指针,回调函数中每个字符后面的一个参数一般都是字符串的字符数。
  3. 注意,回调函数一般是在SDK的线程中调用。但项目或引擎的机制可能要求某些函数只能在游戏引擎的主线程去执行,比如UI相关的代码。需要使用者自行处理,比如将任务放到主线程的执行队列去执行,而不是在回调现成直接执行。
  4. sdk服务器在全球有多个地区节点(集群)。运营(dev)后台中产品的语言,也代表了它使用的SDK服务器的部署节点。比如“全民奇迹2(简体中文)”代表它是使用部署在中国大陆的sdk服务器。不同的SDK服务器节点是独立不互通的。
  5. 本文档所用的名词:
    • 游戏客户端:指游戏客户端,或者接入此SDK的应用程序客户端
    • 游戏服务器:游戏客户端连接的服务器;
    • SDK:一般指此掌趣客户端SDK,就是接入游戏客户端中的这部分。
    • SDK服务器:客户端SDK会连接SDK的服务器,账号、产品参数等都在SDK服务器中。
  6. 常规项目需要接入的接口:

    • 初始化流程
    • 登录流程
    • 设置游戏角色数据
    • 游戏大点日志接口
    • 充值接口
    • 特殊功能接口(有很多子功能,按需使用)
  7. 定制项目接口(一般项目不需要):

    • 官网账号注册接口
    • 官网登录接口
    • 实名身份验证
    • 用户协议

2、初始化流程

游戏客户端启动后,必须先执行“初始化流程”,初始化完成后(收到初始化成功的回调事件后)才能执行登录流程。

注意,必须在初始化成功后才能调用其它功能接口。

请先准备好处理SDK回调事件的回调函数指针,然后依次调用初始化接口的3个函数,进行SDK初始化。

  1. //初始化接口函数:
  2. intptr_t __stdcall SetGameEngineMessageListener(intptr_t initStructPtr);
  3. intptr_t __stdcall Ourpalm_Prepare(LPCTSTR jsonParams);
  4. intptr_t __stdcall Ourpalm_Init(LPCTSTR jsonParams);
  5. //回调接口
  6. typedef void (*fn_Ourpalm_Init_CallBack)(LPCTSTR jsonPtr, int len);

SDK初始化的过程,会连接SDK服务器,上传一些初始化信息,并获取此产品的一些配置参数、开关、token等。

初始化完成后,SDK会调用initStructPtr参数中的回调函数指,通知游戏客户端。

2.1、设置回调函数信息

【功能接口】进程启动后首先需要调用的SDK函数,设置回调函数指针

函数原型(c++):

  1. intptr_t __stdcall SetGameEngineMessageListener(intptr_t initStructPtr);

参数说明:

参数或返回值 意义 注解
initStructPtr ourpalm_sdk_init_params结构体的地址 包含所有回调函数的指针,用于sdk回调游戏程序的函数
返回值 ourpalm_sdk_functions_v1_struct结构体的地址 包含sdk提供的所有接口函数的指针,游戏可以调用这些接口函数

注: 接口函数定义请查看”ourpalm_sdk_base_def.h”中的定义

2.2、Ourpalm_Prepare

【功能接口】进程启动后第二个需要调用的SDK函数,根据不同的游戏引擎和使用场景,传入扩展参数让SDK初始化环境。

函数原型(c++):

  1. intptr_t __stdcall Ourpalm_Prepare(LPCTSTR jsonParams);

参数说明:

参数或返回值 意义 注解
jsonParams json字符串格式的扩展参数 必须为json字符串格式,默认值:”{}”
返回值 ourpalm_sdk_functions_v1_struct结构体的地址 包含sdk提供的所有接口函数的指针,游戏可以调用这些接口函数

jsonParams包含字段说明

字段key 数量类型 字段类型和含义 注解
gameType 字符串 游戏类型 固定值 “1”
gameVer 字符串 代码版本号 例如:”1.0”
gameResVer 字符串 资源版本号 例如:”1.0”
PackageName 字符串 包名/程序名 包名会包含在一些日志中,可以使用数字、字母和”.”,例如:”com.ourpalm.mu3”
disable_sdk_act_log 整数 禁用sdk初始化打点日志 (可选)安装器和启动器专用,只能是1
persistentDataPath 字符串 持久化存储路径 (可选)默认是主动态库所在文件夹
resourcePath 字符串 sdk配置文件和资源文件路径 (可选)默认是主动态库所在文件夹
GameWindowHwnd 字符串 游戏主窗口句柄(整数值转换为字符串) (可选)使用游戏引擎的API获取windows窗口句柄并传入sdk,以便sdk显示界面和WebView时能显示在游戏窗口前面
cef_sub_process 字符串 webview子进程路径 (废弃)UE4请传入UnrealCEFSubProcess.exe的完整路径
CommandLine 字符串 传入命令行参数 (可选)用于在编辑器中模拟渠道传入命令行参数,方便调试渠道功能
x_forwarded_for 字符串 模拟用户IP地址 (仅测试使用)测试SDK中和用户所在地区有关的功能时使用,例如: “5.147.48.38”

2.3、Ourpalm_Init

【功能接口】进程启动后第三个需要调用的SDK函数

函数原型(c++):

  1. intptr_t __stdcall Ourpalm_Init(LPCTSTR jsonParams)

参数说明:

参数或返回值 意义 注解
jsonParams json字符串格式的扩展参数 必须为json字符串格式,默认传:L”{}”
返回值 ourpalm_sdk_functions_v1_struct结构体的地址 包含sdk提供的所有接口函数的指针,游戏可以调用这些接口函数

jsonParams包含字段说明

字段key 数量类型 字段类型和含义 注解

代码示例

c#示例

  1. public static void SetCallbackListener()
  2. {
  3. IntPtr apiStructPtr = IntPtr.Zero;
  4. int initStructSize = Marshal.SizeOf<OurpalmSDKInitStruct>();
  5. OurpalmSDKInitStruct ourpalmSDKListener = new OurpalmSDKInitStruct()
  6. {
  7. InterfaceVersion = 1,
  8. Size = initStructSize,
  9. Ourpalm_GameLogCallback = LogMessageFromSDK,
  10. //新回调接口统一了安卓、IOS、PC回调的方式和数据结构,代替以上老回调接口。
  11. //如果使用此接口,则不要使用上面的PC版老回调接口
  12. Callback_SDK_Callback = Callback_SDK_Callback,
  13. };
  14. IntPtr initStructPtr = Marshal.AllocHGlobal(initStructSize);
  15. Marshal.StructureToPtr(ourpalmSDKListener, initStructPtr, false);
  16. apiStructPtr = SetGameEngineMessageListener(initStructPtr);
  17. if (apiStructPtr == IntPtr.Zero)
  18. {
  19. Debug.Log("SetGameEngineMessageListener result null");
  20. }
  21. else if ((int)apiStructPtr < 0x1000)
  22. {
  23. Debug.Log($"SetGameEngineMessageListener result {apiStructPtr}");
  24. }
  25. //释放
  26. Marshal.FreeHGlobal(initStructPtr);
  27. }
  28. Hashtable initParams = new Hashtable();
  29. initParams["gameVer"] = "1.0";
  30. initParams["gameResVer"] = "1.0";
  31. initParams["DevMode"] = DevMode ? 1 : 0;//1 测试环境模式,自动使用配置中初始化地址对应的测试环境初始化地址
  32. initParams["UseUnityWebview"] = "1";
  33. ...
  34. string initParamStr = MiniJSON.jsonEncode(initParams);
  35. SetCallbackListener();
  36. Ourpalm_Prepare(initParamStr);
  37. Ourpalm_Init("{}");

c++示例

  1. ourpalm_sdk_functions_v1_struct api = ourpalm_sdk_functions_v1_struct();
  2. fn_SetGameEngineMessageListener SetGameEngineMessageListener = (fn_SetGameEngineMessageListener)GetProcAddress(h_channels_dll_module, (LPCSTR)1); // 根据导出序号加载函数
  3. fn_Ourpalm_Prepare Ourpalm_Prepare = (fn_Ourpalm_Init)GetProcAddress(h_channels_dll_module, (LPCSTR)2); // 根据导出序号加载函数
  4. fn_Ourpalm_Init ourpalm_Init_Proc = (fn_Ourpalm_Init)GetProcAddress(h_channels_dll_module, (LPCSTR)3); // 根据导出序号加载函数
  5. fn_Ourpalm_OnApplicationQuit ourpalm_OnApplicationQuit = (fn_Ourpalm_OnApplicationQuit)(void*)GetProcAddress(h_channels_dll_module, (LPCSTR)4); // 根据导出序号加载函数
  6. if (nullptr == ourpalm_Init_Proc)
  7. {
  8. Logs::Info("[OurpalmSDK] Ourpalm_Init GetProcAddress @1 Faild, channels_dll_name={}", filename);
  9. return 0;
  10. }
  11. for (int i = 0; i < sizeof(api) / sizeof(void*) - 1; i++)
  12. {
  13. ((void**)&api)[i + 1] = (void*)GetProcAddress(h_channels_dll_module, (LPCSTR)(i + 5));
  14. }
  15. api.Ourpalm_SetLogs(true);
  16. pOurpalm_OnApplicationQuit = ourpalm_OnApplicationQuit;
  17. ourpalm_sdk_init_params initStruct = ourpalm_sdk_init_params();
  18. initStruct.Size = sizeof(ourpalm_sdk_init_params);
  19. initStruct.InterfaceVersion = 1;
  20. initStruct.Ourpalm_GameLogCallback = Console_Ourpalm_GameLogCallback;
  21. initStruct.Callback_SDK_Callback = Console_Callback_SDK_Callback;
  22. //下面这些接口使用Callback_SDK_Callback实现,不再需要注册单独的回调函数
  23. //initStruct.Ourpalm_Init_CallBack = Console_Ourpalm_Init_CallBack;
  24. //initStruct.Ourpalm_PaymentCallBack = Console_Ourpalm_PaymentCallBack;
  25. //initStruct.Ourpalm_InitSuccess = Console_Ourpalm_InitSuccess;
  26. //initStruct.Ourpalm_InitFail = Console_Ourpalm_InitFail;
  27. //initStruct.Ourpalm_LoginSuccess = Console_Ourpalm_LoginSuccess;
  28. //initStruct.Ourpalm_SwitchingAccount = Console_Ourpalm_SwitchingAccount;
  29. //initStruct.Ourpalm_LoginFail = Console_Ourpalm_LoginFail;
  30. //initStruct.Ourpalm_LogoutSuccess = Console_Ourpalm_LogoutSuccess;
  31. //initStruct.Ourpalm_LogoutFail = Console_Ourpalm_LogoutFail;
  32. //initStruct.Ourpalm_ExitGameCallBack = Console_Ourpalm_ExitGame;
  33. //initStruct.Ourpalm_PayInventorySuccess = Console_Ourpalm_PayInventorySuccess;
  34. //initStruct.Ourpalm_Notify = Console_Ourpalm_Notify;
  35. //initStruct.Callback_LoginEx = Callback_LoginEx;
  36. //initStruct.Callback_Register = Callback_Register;
  37. //initStruct.Callback_IdentityAuthentication = Callback_IdentityAuthentication;
  38. //initStruct.Callback_GetPROTOCOL = Callback_GetPROTOCOL;
  39. //initStruct.Callback_ConfirmationProtocol = Callback_ConfirmationProtocol;
  40. //initStruct.Callback_ShowUI = Callback_ShowUI;
  41. SetGameEngineMessageListener((intptr_t)&initStruct);
  42. configor::wjson initParams;
  43. initParams[L"gameType"] = L"1";
  44. initParams[L"gameVer"] = L"1.0";
  45. initParams[L"gameResVer"] = L"1.0";
  46. //initParams[L"CommandLine"] = _T(R"(ZhenHongZhiRen.exe "--parameters={"uid":"97591765","sid":"1","token":"YkU05_29d8c3fea2f14f05bba9eb92466d2f33","channel_id":4377,"sign":"5d45ad41f0016e3e20c3f23a5e91d20e"}")");
  47. initParams[L"DevMode"] = 0;//开发者模式,测试环境
  48. initParams[L"API_Version"] = 1;
  49. //initParams[L"disable_sdk_act_log"] = 1;
  50. //initParams[L"x_forwarded_for"] = L"109.167.134.253"; //ru:109.167.134.253//cn:115.171.85.30
  51. //initParams[L"GameWindowHwnd"] = L"0x00950B52";
  52. //initParams[L"GameWindowHwnd"] = L"auto";
  53. //initParams[L"cef_sub_process"] = L"D:\\debug\\WindowsNoEditor\\Engine\\Binaries\\Win64\\UnrealCEFSubProcess.exe";
  54. //initParams[L"cef_path"] = L"D:\\debug\\WindowsNoEditor\\Engine\\Binaries\\ThirdParty\\CEF3\\Win64";
  55. //准备初始化
  56. Ourpalm_Prepare(initParams.dump().c_str());
  57. //初始化SDK
  58. intptr_t** pfuncs = (intptr_t**)ourpalm_Init_Proc(initParams.dump().c_str());
  59. if (pfuncs != nullptr)
  60. {
  61. Logs::Info(L"[OurpalmSDK] Ourpalm_Init return length={},version={}", *(int*)pfuncs, ((fn_Ourpalm_GetVersion_Proc)(pfuncs[1]))());
  62. }
  63. else
  64. {
  65. return 0;
  66. }
  67. auto vs = v1->Ourpalm_GetVersion();
  68. auto serviceCode = v1->Ourpalm_Query_Data(L"9", L"");
  69. auto opid = (wchar_t*)v1->Ourpalm_Query_Data(DataHelper::itow((int)ESetDataType::opid).c_str(), L"");

游戏主窗口句柄获取方法

  1. //UE4获取方法
  2. ##if PLATFORM_WINDOWS
  3. TSharedPtr<FGenericWindow> NativeWindow = GEngine->GameViewport->GetWindow()->GetNativeWindow();
  4. auto Window = static_cast<FWindowsWindow*>(NativeWindow.Get());
  5. auto hWnd = Window->GetHWnd();
  6. ##endif // #if PLATFORM_WINDOWS
  7. //Unity获取方法
  8. //调用Windows api查找窗口

2.4、Ourpalm_Init_CallBack

【回调函数】游戏调用Ourpalm_Init后,SDK开始初始化,并在完成时调用此函数

注意:

? 几乎所有功能都必须在初始化完成后才能调用,否则会导致无效果、错误的结果、甚至是程序崩溃。

? 游戏项目应当检查返回的结果,判断是否成功。

? 特别的,有些时候我们需要显示用户协议和隐私协议,必须等用户确认后,再调用登陆接口(Ourpalm_Login)。

函数原型

  1. void (*fn_Ourpalm_Init_CallBack)(LPCTSTR jsonPtr, int len);

参数说明

jsonPtr为json字符串,包含初始化是否成功,是否需要显示用户协议等参数,里面的字段如下表所示

字段 用途 注解
success 初始化结果 0为失败,1为成功
desc 结果描述
protocolSwitch 是否开启了用户协议确认功能 0 关闭,1 开启.
channel 代表渠道 比如:“feihuo”、“qqgame”、“360game”

特别说明:如果protocolSwitch为”1”,开启用户协议确认功能,必须等用户确认后,再调用登陆接口(Ourpalm_Login)。

如有必要,还可增加其它和渠道相关的数据。

回调参数示例

  1. {"success":"1","desc":"","protocolSwitch":"1""channel":"360game"}

3、登录流程

3.1、流程介绍

SDK登录流程图
1 手机游戏客户端会调用掌趣sdk进行sdk初始化操作
2 掌趣sdk向掌趣用户中心服务器发起登录/注册的请求
3 掌趣用户中心服务器向掌趣sdk返回token、用户信息等等
4 掌趣sdk向游戏客户端返回登录结果,包含token和用户相关信息
5 游戏客户端上传用户信息到游戏服务器
6 服务器根据token向掌趣用户中心服务器获取用户信息
7 掌趣用户中心服务器向游戏服务器返回用户信息
8 游戏服务器向游戏客户端返回登录结果

游戏客户端调用SDK的登录接口,SDK内部会根据具体情况显示登录界面,或者直接完成登录。

SDK会调用回调事件中的登录回调回调函数,如果成功会给与登录token和userid,或者失败则给与失败信息。

3.2、登陆接口

函数原型

  1. int Ourpalm_Login(int type);

游戏客户端调用此接口,拉起当前产品渠道的登陆功能。此接口必须在Ourpalm_Init调用返回成功后再调用。

这可能会拉起渠道登陆界面(比如大多数国内的渠道),可能调起官网账号登陆界面,也可能是无UI无感知的“快速登录”。

参数说明

参数名 用途 注解
type 保留参数 固定传0

调用示例

  1. Ourpalm_Login(0);

回调函数

  1. //登录回调接口
  2. typedef void (*fn_Callback_LoginEx)(intptr_t handle, LPCTSTR json_str, int json_str_size);
  3. //下面是以前的登录回调接口,已废弃
  4. //tokenId 登陆sessionid,userInfo 掌趣账号
  5. void (*Ourpalm_LoginSuccess)(LPCTSTR tokenId, int tokenIdSize, LPCTSTR userInfo, int userInfoSize); //登陆成功回调
  6. //json内容为 {"code":"0","message":"失败","desc":""}
  7. void (*Ourpalm_LoginFail)(int code, LPCTSTR json, int jsonSize); //登陆失败回调

3.3、切换账号

PC版sdk中,切换账号的执行和登录接口基本相同,也是通过登录回调事件通知账号和token数据。

  1. void Ourpalm_SwitchAccount();

3.4、注销登录

一般不需要使用。

  1. int Ourpalm_Logout(int type);

4、用户协议(可选)

4.1、获取用户协议和隐私协议

获取协议内容接口。此接口必须在调用Ourpalm_Init接口后再调用,但可以不等待Ourpalm_Init的成功回调。

函数原型

  1. intptr_t GetPROTOCOL(LPCTSTR json_str);

参数说明

参数名 用途 注解
handle 界面句柄 保留未用
json_str 参数集合 暂不需要,保持默认值”{}”

调用示例

  1. GetPROTOCOL(L"{}")

回调函数原型

  1. void Callback_GetPROTOCOL(intptr_t handle, LPCTSTR json_str, int json_str_size);//回调函数,获取用户协议和隐私协议
  1. handle参数可以忽略,不使用
  2. json_str返回结果示例:
  3. {"success":"1", "code":"0", "desc":"描述", "data":{
  4. "privacyAgreementContentVersion": 1,
  5. "userAgreementContentVersion": 1,
  6. "url": "https://gscservice.gamebean.net/sdkui/js/getUserAgreementContentProviderCdn.htm?pcode=1000***&v=2"
  7. }
  8. "ConfirmUserAgreementVer":"0",
  9. "ConfirmPrivacyAgreementVer":"0",
  10. };
  11. success值为"1"表示成功,为"0"表示失败
  12. code为错误识别码,可能为数字,也可能为字符串类型形式,请按字符串处理
  13. desc为错误提示信息
  14. data中包含了协议的版本号和协议内容的获取地址,需要访问此地址获取具体的协议内容并显示
  15. ConfirmUserAgreementVer为用户之前已经确认同意的用户协议版本号
  16. ConfirmPrivacyAgreementVer为用户之前已经确认同意的隐私协议版本号

如果已经同意的协议和data中的协议版本号相同,则不需要主动弹窗显示

需要从“json_str”中返回的“url”,请求用户协议和隐私协议内容。

如果因为网络请求有延时,或者有其它原因,游戏项目也可以将内容放到自己的配置表中,而不使用此url联网获取内容,而只使用版本号。

访问url返回结果为json格式,格式如下所示

  1. {
  2. "success": "0",
  3. "reset": "1000",
  4. "desc": "成功",
  5. "data": {
  6. "userAgreementContent": "<P>欢迎使用北京掌趣科技股份有限公司(以下简称\"掌趣科技\"/\"本公司\")提供的游戏客户端软件产品(在本协议中简称为\"本软件产品\"),本协议是由服务使用人(以下称\"用户\")与掌趣科技就游戏客户端安装及使用所订立的协议。</P>......",
  7. "privacyAgreementContent": "<h1 align=\"center\">掌趣科技隐私保护指引</h1>\n<p>更新日期:2019年11月25日</p>\n......"
  8. }
  9. }

4.2、签署用户协议和隐私协议

签署用户协议和隐私协议,如果需要显示用户协议,则可使用此接口

函数原型

  1. intptr_t ConfirmationProtocol(LPCTSTR json_str);

函数原型

参数名 用途 注解
json_str 参数集合 需包含用户确认同意的用户协议的版本号和隐私协议的版本号

调用示例

  1. ConfirmationProtocol(L"{\"ConfirmUserAgreementVer\":\"1\", \"ConfirmPrivacyAgreementVer\":\"1\"}")

此函数无返回值,无回调通知。


5、设置游戏角色数据

因为很多功能和打点日志都需要常用的角色信息,特设置此接口,发送打点日志并将这几个常用数据保持到sdk中。

函数原型

  1. void Ourpalm_SetGameInfo(int type, LPCTSTR json)

函数原型

参数名 用途 注解
type 调用时机 1 创建角色,2 进入游戏
json 游戏角色数据 包含角色名、角色id、服务器id,服务器名、角色等级、角色vip等级等

代码示例

  1. //创建角色
  2. Dictionary<string,string> userInof = new Dictionary<string, string>();
  3. userInof.Add("roleID", "380135439");
  4. userInof.Add("roleName", "淡然之温文");
  5. userInof.Add("serverID", "270028");
  6. userInof.Add("gameServerName", "荣耀28");
  7. userInof.Add("rolelv", "1");
  8. userInof.Add("balance", "0");
  9. userInof.Add("partyName", "无帮派");
  10. userInof.Add("vip", "VIP0");
  11. userInof.Add("roleviplv", "0");
  12. userInof.Add("roleCTime", PlatSDKMgr.GetCreateRoleTime());
  13. string json = MUJson.jsonEncode(userInof);
  14. OurpalmSDKApi.API.Ourpalm_SetGameInfo(1, json);
  15. //进入游戏
  16. Hashtable userInof = new Hashtable();
  17. userInof.Add("appName", "奇迹S");
  18. userInof.Add("platuid", "Ourpalm0100010000000000000000000000000328587723");
  19. userInof.Add("roleID", "380135439");
  20. userInof.Add("roleName", "淡然之温文");
  21. userInof.Add("rolelv", "35");
  22. userInof.Add("serverID", "270028");
  23. userInof.Add("gameServerName", "荣耀28");
  24. userInof.Add("lv", "35");
  25. userInof.Add("balance", "0");
  26. userInof.Add("partyName", "");
  27. userInof.Add("vip", "VIP0");
  28. userInof.Add("roleviplv", "0");
  29. userInof.Add("roleCTime", PlatSDKMgr.GetCreateRoleTime());
  30. string json = MUJson.jsonEncode(userInof);
  31. OurpalmSDKApi.API.Ourpalm_SetGameInfo(2, json);

6、游戏打点日志接口

此接口用于发送游戏自定义日志,以及自定义的广告打点日志

函数原型

  1. void Ourpalm_SendGameInfoLog(LPCTSTR logID, LPCTSTR logKey, LPCTSTR json);

函数原型

参数名 用途 注解
logID 日志id 由平台定义,游戏自定义为”1003”
logKey 日志关键字 游戏自定义为”role-act”
json 日志内容 json格式字符串,Hashtable序列化而来。根据具体用途自定义包含哪些字段

注意事项

  1. - 这些参数值和结构,由平台定义,研发需按平台要求的结构传。
  2. - 注意1,确保启动游戏的时候正常调用了PCSDK初始化方法后,再调用发日志接口;启动游戏时调用的PCSDK初始化方法有别于安装时调用的方法,无须设置 disable_sdk_act_log 这个参数。
  3. - 注意2actId 为事件ID,只支持字母,数字,下划线命名,不支持中文。
  4. - 注意3actName 为事件名称,支持中文。
  5. - 注意4detail 为需要随本次发生事件一并记录的额外信息,可以是普通字符串,也可以是json字符串,不要包含竖线 | ,总长度不要超过 1000 个字符。

代码示例

  1. //发送安装器打点日志-->开始安装
  2. Hashtable userInof = new Hashtable();
  3. userInof.Add("roleLevel", ""); //固定写死
  4. userInof.Add("roleVipLevel", ""); //固定写死
  5. userInof.Add("actId", "installer_filename"); //固定写死
  6. userInof.Add("actName", "安装包文件名"); //固定写死
  7. userInof.Add("detail", "xadf2ssd"); //传入真正的安装包文件名
  8. string json = MUJson.jsonEncode(userInof);
  9. OurpalmSDKApi.API.Ourpalm_SendGameInfoLog("1003", "role-act", json);
  10. //发送游戏日志-->登陆场景加载成功
  11. Hashtable userInof = new Hashtable();
  12. userInof.Add("roleLevel", "0");
  13. userInof.Add("roleVipLevel", "0");
  14. userInof.Add("actId", "LoginSceneLoaded");
  15. userInof.Add("actName", "登陆场景加载成功");
  16. userInof.Add("detail", "begin");
  17. string json = MUJson.jsonEncode(userInof);
  18. OurpalmSDKApi.API.Ourpalm_SendGameInfoLog("1003", "role-act", json);

7 充值接口

7.1 流程介绍

SDK计费流程
1 base sdk向掌趣计费中心发起支付请求;
2 掌趣计费中心生成订单号,并向base sdk返回支付结果;
3 掌趣计费中心通知游戏服务器发货;
4 游戏服务器发送虚拟物品至玩家手机游戏客户端;
5 游戏服务器向计费中心返回发货结果;

7.2 支付接口

7.2.1 功能说明

调用自有支付功能或者第三方SDK的支付功能,实现游戏中的道具购买。
注意:对该接口中的商品名称和商品数量2个参数具体说明,如游戏中所卖商品在游戏界面显示为“100元宝”,当调用支付接口时,商品名称请传“元宝”,商品数量请传“100”,切记不可商品名称传“100元宝”,商品数量传“1”。

7.2.2 接口定义

  1. /*
  2. 调用自有支付功能或者第三方SDK的支付功能,实现游戏中的道具购买。
  3. 注意:
  4. 如游戏中所卖商品在游戏界面显示为“100元宝”,当调用支付接口时,商品名称请传“元宝”,商品数量请传“100”
  5. 如游戏中所卖商品在游戏界面显示为“月卡“,当调用支付接口时,商品名称请传“月卡”,商品数量请传“1”
  6. 如游戏中所卖“月卡”有多个,当调用支付接口时,商品名称建议传入月卡的金额。例如“30元月卡”、“50元月卡”等等,商品数量请传“1”
  7. 礼包类与月卡同理,请在商品名称尽量传入礼包对应的价格,例如:“30元礼包”,“50元礼包,商品数量请传“1”。
  8. 注意:掌趣官网包中支付宝等sdk支付方式,需要进行打包处理才可以支持。
  9. */
  10. public static void Ourpalm_Pay(string propId, string chargeCash, string currencyType, string propName, string propCount,
  11. string propDes, string Gameurl, string jsonExtendParams);

注:比旧版本新增的 userId、serverId、roleId等参数

7.2.3 参数说明

参数名称 重要性 类型 说明
propId 必须 String 游戏自定义的道具ID 必传。
chargeCash 必须 String 道具价格,单位为分。
currencyType 必须 String 货币类型(1人民币2美元3日元4港币5英镑6新加坡币7越南盾8台币9韩元)
propName 必须 String 道具名称
propCount 必须 String 道具数量
propDes 必须 String 道具描述
Gameurl 必须 String 游戏发放道具服务器地址,用户支付成功后掌趣计费中心会回调此地址告知游戏进行道具发放。
jsonExtendParams.userId 必须 String 掌趣SDK登录成功后返回的userId
jsonExtendParams.roleId 必须 String 玩家角色id
jsonExtendParams.rolelv 必须 String 角色等级,请传数字,如游戏中无角色等级可以传null
jsonExtendParams.serverId 必须 String 玩家登录的游戏服id
jsonExtendParams.gameServerName 必须 String 玩家登录的游戏服务器名
jsonExtendParams.roleviplv 必须 String 角色VIP等级,请传数字,如游戏中无角色VIP等级可以传null
jsonExtendParams.Params 可选 String 游戏自定义数据,支付成功后,计费中心会将此字段数据回传给游戏服务器。
jsonExtendParams.purchaseinfo 可选 String 买量BI要求的自定义数据,json字符串,需要携带礼包ID等。格式:”{\”package_id\”:\”1001\”}”

7.2.4 接口实例

  1. string propId = productId; //商品ID
  2. string chargeCash = amount; //价格(以分为单位)
  3. string propName = "商品名称";
  4. string propCount = "1";
  5. string propDes = "商品描述";
  6. string Gameurl = "回调地址";
  7. string Params = "我是扩展参数";
  8. string rolelv = "100";
  9. string roleviplv = "8";
  10. Hashtable extendParams = new Hashtable();
  11. extendParams["serverID"] = "1";
  12. extendParams["roleID"] = "1000000";
  13. extendParams["rolelv"] = rolelv;
  14. extendParams["roleviplv"] = roleviplv;
  15. extendParams["roleName"] = "角色无名";
  16. extendParams["gameServerName"] = "游戏服名";
  17. extendParams["Params"] = Params;
  18. //礼包ID的含义由项目和买量BI协商确定,sdk只做转发
  19. extendParams["purchaseinfo"] = "{\"package_id\":\"礼包ID\"}";
  20. var jsonParams = ToolsUtils.MiniJSON.jsonEncode(extendParams);
  21. OurpalmSDKAgent.Ourpalm_Pay(propId, chargeCash, currencyType, propName, propCount, propDes
  22. , Gameurl, jsonParams);

7.2.5 回调接口说明

参数名称 key-类型 说明
MethodName “Ourpalm_PaymentCallBack” 回调函数名
jsonParams.success string 成功:”1”,失败:”0”
jsonParams.code string 错误码
jsonParams.ssid string 掌趣计费中心生成的订单号,如支付失败或者用户取消支付时可能返回为空。
jsonParams.channelOrderId string 渠道订单号
jsonParams.pdid string 游戏传入的商品id

回调示例接口

  1. //支付成功
  2. public static System.Action<string> EventPaymentSuccess;
  3. //支付失败
  4. public static System.Action<string> EventPaymentFail;

7.2.6 下单成功回调说明

“下单成功”表示当前订单已经成功提交,但用户是否进行支付,以计费中心服务器的通知为准。 下单成功代表支付流程结束。下单成功回调触发以后不会在有支付成功和支付失败的回调,游戏需要根据服务器通知为准。

参数名称 key-类型 说明
MethodName “Callback_Ourpalm_Pay_Order” 回调函数名
jsonParams.success string 成功:”1”,失败:”0”
jsonParams.code string 错误码
jsonParams.ssid string 掌趣计费中心生成的订单号,如支付失败或者用户取消支付时可能返回为空。
jsonParams.channelOrderId string 渠道订单号
jsonParams.pdid string 游戏传入的商品id

回调示例接口

  1. // 下单成功
  2. public static System.Action<string> EventPaymentOrderSuccess;

*注:1、Android端和iOS端返回错误码不一致。2、Android返回参数key为小写{String ssid, String pbid},iOS端返回json中的key为小驼峰{ “desc”:成功描述,”propId”:”道具ID”,”reset”:”120”,”ssId”:”订单号}

7.3、礼包码兑换接口

7.3.1 功能说明

兑换礼包码
CP接入礼包码功能时,由SDK来直接提示错误提示语。

7.3.2 接口定义

  1. /// <summary>
  2. /// 礼包码兑换
  3. /// 此接口中需要的服务器和角色数据,必须提前使用SetGameInfo接口提供这些数据
  4. /// </summary>
  5. void Ourpalm_GiftExchange(LPCTSTR GiftCode, LPCTSTR url, LPCTSTR extendParams); //礼包码兑换接口

7.3.3 参数说明

参数名称 重要性 类型 说明
GiftCode 必须 String 礼包码
url 必须 String 游戏发货服务器地址
extendParams 可选 String 透传参数,成功回调内,将会返回此参数

7.3.4 接口实例

  1. //Ourpalm_GiftExchange("用户输入的礼包码","游戏发货服务器地址","透传参数");
  2. Ourpalm_GiftExchange(L"84K82JAUT4Q39M", L"https://hi-login-test.tmskapp.com/pay/ourpalmlibaomazhuanfa.php?param=giftCode", L"dd");

7.3.5 回调接口说明

key key-类型
MethodName “Callback_GiftExchange” 回调函数名
jsonParams.success string 成功:”1”,失败:”0”
jsonParams.code string 错误码
jsonParams.packageId string 礼包码
jsonParams.extendParams string 透传参数


8、特殊功能扩展接口

Ourpalm_Channel_Spreads

【功能接口】提供给项目调用的扩展函数 (用于一些第三方渠道的特殊功能,扩展参数内容按具体功能约定)

注意:此接口如需返回数据给调用者,会调用游戏提供的Callback_Channel_Spreads回调函数。

函数原型(c++):

  1. void Ourpalm_Channel_Spreads(LPCTSTR key, LPCTSTR jsonExtendParams);

key为字符串类型

jsonExtendParams为json格式字符串,包含功能所需的参数

查询掌趣订单的支付状态

如果是使用第三方的Web页面充值的方式,则sdk无法在充值成功后调用充值成功的回调通知.

如果游戏内通过直接显示二维码的方式让玩家充值(比如国内顺网渠道),可在窗口显示期间每隔几秒调用此接口,查询支付是否完成或失败,以便关闭充值界面.

key=“ChargeQueryOrderState”

jsonExtendParams必须为json格式,并包含以下参数

orderId “0122023032123591600300” 字符串类型,掌趣订单号

例如:

  1. Ourpalm_Channel_Spreads"ChargeQueryOrderState", LR"({"orderId":"0122023032123591600300"})");

sdk通过回调方法通知结果:

  1. Callback_ChargeQueryOrderState,param={"code":"21000","desc":"成功","orderId":"0122023032123591600300","orderStatus":"1","success":"1"}

设置游戏窗口显示和隐藏

sdk会在初始化时尝试查找当前执行进程的主窗口,并记录下来。必须在初始化时找到了主窗口,才可以用此功能

key=“set_window_show”

jsonExtendParams必须为json格式,并包含以下参数

show 可选值“0”或“1” “0”表示隐藏窗口,“1”表示显示窗口

例如:

  1. Ourpalm_Channel_Spreads"set_window_show","{\"show\":\"1\"}");

设置或取消游戏窗口置顶显示

sdk会在初始化时尝试查找当前执行进程的主窗口,并记录下来。必须在初始化时找到了主窗口,才可以用此功能

key=“set_window_topmost”

jsonExtendParams必须为json格式,并包含以下参数

topmost 可选值“0”或“1” “0”表示隐藏窗口,“1”表示显示窗口

例如:Ourpalm_Channel_Spreads("set_window_topmost","{\"topmost\":\"1\"}");

[QQ大厅专用]发送指令给QQ大厅

key=“send_qqgame_cmd”

jsonExtendParams必须为json格式,参考QQ大厅接入文档(https://open.qqgame.qq.com/wiki/24/35/46/52/52.html)

例如:

  1. Ourpalm_Channel_Spreads"send_qqgame_cmd","{\"cmd\":\"open_web\",\"caption\":\"窗口标题\",\"url\":\"https://qqgame.qq.com\",\"width\":1440,\"height\":900}");

[QQ大厅专用]获取QQ大厅参数

key=“get_qqgame_params”

cmdJson为json格式的字符串,可传空json对象”{}”

调用方式:

  1. Ourpalm_Channel_Spreads"get_qqgame_params","{}");

返回结果

  1. {"openid":"######","openkey":"######","pf":"######","pfkey":"######"}

[飞火渠道专用]显示绑定手机号页面

key=“show_bind_mobile”

cmdJson为json格式的字符串,可传空json对象”{}”

调用方式:

  1. Ourpalm_Channel_Spreads"show_bind_mobile","{}");

此调用会以回调方式让游戏打开webview页面

  1. Callback_ShowUI(0, "{\"usage\":\"ui_webview\"}...")

[快登版用户中心专用]查询账号绑定信息

key=“get_account_bind_list”

用于查询快速登录账号的绑定邮箱账号和绑定第三方登陆账号的信息。

调用方式:

  1. Ourpalm_Channel_Spreads"get_account_bind_list","{}");

返回结果:


Callback_Channel_Spreads

【回调函数】sdk用此回调函数,通知客户端扩展功能的消息,或者Ourpalm_Channel_Spreads(需要回调通知的调用)的调用结果。

函数原型

  1. void (*fn_Callback_Channel_Spreads)(LPCTSTR key, int keySize, LPCTSTR cmdJson, int cmdJsonSize)

[QQ大厅专用]QQ大厅发送指令给游戏客户端

key=“receive_qqgame_cmd”

cmdJson为json格式的字符串,参考QQ大厅接入文档(https://open.qqgame.qq.com/wiki/24/35/46/52/52.html)

客户端会收到回调

  1. //老板键,显示/隐藏窗口
  2. Callback_Channel_Spreads"receive_qqgame_cmd","{\"cmd\":\"boss_key\", \"show\":0}");
  3. //控制游戏前端显示
  4. Callback_Channel_Spreads"receive_qqgame_cmd","{\"cmd\":\"bring_to_top\"}");

9、官网账号注册接口

可支持账号密码注册

此接口在初始化成功后才能使用。

函数原型

  1. intptr_t Ourpalm_Register(LPCTSTR json_str);

函数原型

参数名 用途 注解
json_str 参数集合 包含登陆方式、登陆用户名、用户密码

调用示例

  1. Ourpalm_Register(L"{\"loginType\":\"0\", \"loginName\":\"liteng001\", \"userPwd\":\"a123456\"}")

回调函数原型

  1. void Callback_Register(intptr_t handle, LPCTSTR json_str, int json_str_size);//回调函数,签署用户协议和隐私协议
  1. handle参数可以忽略,不使用
  2. json_str返回结果示例: "{\"success\":\"1\", \"code\":\"0\", \"desc\":\"登录失败\"}";
  3. success 值为"1"表示成功,为"0"表示失败
  4. code 为错误识别码,可能为数字,也可能为字符串类型形式,请按字符串处理
  5. desc 为错误提示信息

10、官网登陆接口

可支持账号密码登陆,或其它交互式登陆方式

函数原型

  1. intptr_t Ourpalm_LoginEx(LPCTSTR json_str);

函数原型

参数名 用途 注解
json_str 参数集合 包含登陆方式、登陆用户名、用户密码

调用示例

  1. Ourpalm_LoginEx("{\"loginType\":\"0\", \"loginName\":\"liteng001\", \"userPwd\":\"a123456\"}")

回调函数原型

  1. void Callback_LoginEx(intptr_t handle, LPCTSTR json_str, int json_str_size);//回调函数,登陆接口(扩展),可支持账号密码登陆,或其它交互式登陆方式
  1. handle参数可以忽略,不使用
  2. json_str返回结果示例: {"success":"1", "code":"0", "desc":"登录失败", "token":"登录token", "userinfo":"userid", "identityAuth":"0", "forceIdentityAuthBindSwitch":"0"}
  3. success 值为"1"表示成功,为"0"表示失败
  4. code 为错误识别码,可能为数字,也可能为字符串类型形式,请按字符串处理
  5. desc 为错误提示信息
  6. token 为登录token,
  7. userinfo 为掌趣账号userid
  8. identityAuth 为是否已完成实名认证,"0"未完成验证,"1"已验证。
  9. forceIdentityAuthBindSwitch 是否强制实名认证,"1"强制实名。

提示: 如果forceIdentityAuthBindSwitch为”1”,且identityAuth为”0”,需要显示实名认证界面。


11、实名身份验证

提交身份认证信息,如真实姓名,身份证号等

注意:

  • 此接口必须在登录成功并得到userid后再调用
  • 只有开启强制实名认证的渠道,才需要实名认证。
  • 未进行实名认证,或者实名认证为未成年身份,则会受到防沉迷规则的约束。

函数原型

  1. intptr_t IdentityAuthentication(LPCTSTR json_str);

函数原型

参数名 用途 注解
json_str 参数集合 包含证件类型、真实姓名、身份证号

调用示例

  1. IdentityAuthentication(L"{\"idType\":\"0\", \"realName\":\"王小帅\", \"idNum\":\"350725199608270516\"}")

回调函数原型

  1. void Callback_IdentityAuthentication(intptr_t handle, LPCTSTR json_str, int json_str_size);//回调函数,提交身份认证信息,如真实姓名,身份证号等
  1. handle参数可以忽略,不使用
  2. json_str返回结果示例: "{\"success\":\"1\", \"code\":\"0\", \"desc\":\"描述\"}";
  3. success值为"1"表示成功,为"0"表示失败
  4. code为错误识别码,可能为数字,也可能为字符串类型形式,请按字符串处理
  5. desc为错误提示信息

12、PC版使用WebView的说明

和手机版应用不同,PC上的登录、支付、以及程序的界面等,经常使用网页来实现,所以需要依赖浏览器或者程序内置WebView组件。

  • ​ 如果游戏程序有内置的WebView组件,可以设计更符合自己风格的界面,来显示登录网页。这样sdk也不必携带libcef组件,减小程序大小。
  • ​ 如果游戏程序没有内置WebView组件,则可以使用sdk提供的基于libcef的窗口程序来显示网页。这会使包体增加约90M。
  • ​ 如果游戏程序没有内置WebView组件,且不希望增加大小包体大小,则只能调用系统浏览器来打开页面,但这样的操作体验会比较差。

以下流程可能会需要使用webview来显示页面。

1.登录

​ 当需要登录时,SDK会用“Callback_ShowUI”回调通知,告诉游戏程序需要用webview显示登录页面。

2.支付

​ 海外支付通常使用web页面来实现。

​ 国内渠道支付方式更多,除了用web页面,还有其它方式。比如直接显示付款二维码来让用户支付等。

3.显示用户中心

​ 用户中心界面给用户提供绑定其它登录方式、设置账号和密码等功能。

4.显示客服界面

​ 我们使用基于网页的AIHelp,提供客服功能。

13、SDK通知游戏程序显示网页

【回调事件】Callback_ShowUI

sdk用此回调事件,通知客户端显示UI界面。界面类型和参数在json_str中提供。

回调参数说明

key key-类型
MethodName “Callback_GiftExchange” 回调函数名
jsonParams.usage string 界面类型,主要有”webview_pay”、L”webview_ui_show_url”、”webview_ui_user_close”等
jsonParams.url string (可选)需要打开的页面URL
jsonParams.hwnd string (可选)sdk生成的伪窗口句柄,用于通知sdk关闭窗口时使用
jsonParams.hide_close_btn string (可选)是否需要隐藏关闭窗口的按钮,禁止用户手动关闭(只能程序逻辑关闭)
jsonParams.window_width int (可选)窗口客户区的最小宽度,如果是0则全屏显示或自定义大小
jsonParams.window_height int (可选)窗口客户区的最小高度,如果是0则全屏显示或自定义大小

回调示例

  1. 打开支付UIjson_str:
  2. {"url":"https://mu3.fingerfun.com/t2/363/6423.html?orderId=0612022110822494414400&pCode=20000063310143000003101430031014300002411&currencyType=2&gamePropId=100992&price=99&goodsName=propName&language=en_gb","usage":"webview_pay"}
  3. 打开登陆UIjson_str:
  4. {"usage":"ui_ourpalm_login","switchaccount":"0"}
  5. 打开防沉迷提示的json_str:
  6. {"usage":"ui_anti_addiction","limit_code":"0","limit_desc":"提示内容"}

回调方法实现示例

  1. void Callback_ShowUI(intptr_t handle, LPCTSTR json_str, int json_str_size)
  2. {
  3. configor::wjson uiParams = configor::wjson::parse(json_str);
  4. std::wstring usage;
  5. std::wstring url;
  6. uiParams.try_get_string(L"usage", usage);
  7. if (usage == L"webview_pay")
  8. {
  9. //使用游戏内置的webview打开支付页面
  10. std::wstring url;
  11. uiParams.try_get_string(L"url", url);
  12. configor::wjson windowParamJson;
  13. windowParamJson[L"cef_browser"] = L"1"; //是否使用sdk提供的webview,不传此值则用系统默认浏览器打开网页
  14. windowParamJson[L"window_width"] = 872; //窗口宽度
  15. windowParamJson[L"window_height"] = 768; //窗口高度
  16. windowParamJson[L"GameWindowHwnd"] = L"0x00950B52"; //(可选参数)如果传入游戏窗口的HWND,则webview窗口可以自动保持在浏览器窗前面
  17. v1->Open_Web_Browser(url.c_str(), windowParamJson.dump().c_str(), L"");
  18. }
  19. if (usage == L"ui_webview" || usage == L"webview_ui_show_url")
  20. {
  21. //使用游戏内置的webview打开页面
  22. //飞火渠道使用此界面,显示实名认证/手机号绑定/支付页面
  23. //如果window_width和window_height为大于0的值,则创建的webview床头需要此大小的web客户区
  24. //如果hide_close_btn存在且为"1",则隐藏关闭按钮,不能主动关闭.用于身份验证等强制执行的页面.
  25. //以下是uiParams中的携带的数据
  26. std::wstring url, hide_close_btn, hwnd, headerJson;
  27. int window_width, window_height;
  28. uiParams.try_get_string(L"url", url);
  29. uiParams.try_get_string(L"hwnd", hwnd);
  30. uiParams.try_get_string(L"hide_close_btn", hide_close_btn);
  31. uiParams.try_get_string(L"headerJson", headerJson);
  32. uiParams.try_get_int(L"window_width", window_width);
  33. uiParams.try_get_int(L"window_height", window_height);
  34. #if false
  35. //如果调用者自己有内置WebView,可以使用自己的WebView打开url
  36. // ...
  37. #else
  38. //如果调用者没有webview组件,可以调用sdk的接口,使用sdk提供的webview组件打开url
  39. configor::wjson windowParamJson;
  40. windowParamJson[L"cef_browser"] = L"1";
  41. windowParamJson[L"hwnd"] = hwnd;
  42. windowParamJson[L"window_width"] = window_width;
  43. windowParamJson[L"window_height"] = window_height;
  44. windowParamJson[L"hide_close_btn"] = hide_close_btn;
  45. windowParamJson[L"headerJson"] = headerJson;
  46. //windowParamJson[L"ie_browser"] = L"1";
  47. v1->Open_Web_Browser(url.c_str(), windowParamJson.dump().c_str(), L"");
  48. #endif
  49. }
  50. if (usage == L"webview_ui_user_close")
  51. {
  52. //通知调用者,由调用者提供的webview页面需要关闭.可能是页面功能触发自动关闭,也可能是用户在页面上操作关闭
  53. //以下是uiParams中的携带的数据
  54. std::wstring url, hide_close_btn, hwnd;
  55. uiParams.try_get_string(L"hwnd", hwnd);
  56. //这里调用sdk的接口,通知sdk此页面关闭了.
  57. configor::wjson windowParamJson;
  58. windowParamJson[L"cef_browser_close"] = L"1";
  59. windowParamJson[L"hwnd"] = hwnd;
  60. //windowParamJson[L"ie_browser"] = L"1";
  61. v1->Open_Web_Browser(url.c_str(), windowParamJson.dump().c_str(), L"");
  62. //下面加入代码,调用者关闭自己的WebView窗口
  63. //...
  64. }
  65. if (usage == L"webview_ui_closed_notify")
  66. {
  67. //通知调用者,由sdk提供的webview窗口被用户关闭了
  68. //以下是uiParams中的携带的数据
  69. std::wstring hwnd;
  70. uiParams.try_get_string(L"hwnd", hwnd);
  71. //这里调用sdk的接口,通知sdk此页面关闭了.
  72. configor::wjson windowParamJson;
  73. windowParamJson[L"cef_browser_close"] = L"1";
  74. windowParamJson[L"hwnd"] = hwnd;
  75. //windowParamJson[L"ie_browser"] = L"1";
  76. v1->Open_Web_Browser(L"", windowParamJson.dump().c_str(), L"");
  77. }
  78. }

注1:”webview_ui_user_close”回调事件的含义是:通过“webview_ui_show_url”通知打开的界面需要关闭时,sdk通知游戏程序,关闭“hwnd”所指的webview界面。如果这个窗口有关联“hwnd”,游戏程序需要调用Open_Web_Browser接口,并传递参数”cef_browser_close”=“1”。

注2:“webview_ui_closed_notify”回调事件的含义是:游戏程序调用Open_Web_Browser接口打开的webview界面,被关闭了。如果这个窗口有关联“hwnd”,游戏程序需要调用Open_Web_Browser接口,并传递参数”cef_browser_close”=“1”。


14、打开WebView显示网页

【功能接口】提供给游戏项目,可以用来打开给定网址的网页,默认使用系统默认浏览器,通过参数控制可使用sdk的WebView来打开网页。

函数原型(c++):

  1. void Open_Web_Browser(LPCTSTR url, LPCTSTR windowParamJson, LPCTSTR httpHeaderJson);

参数说明

参数名 类型 用途
url 字符串 为要打开的网址
windowParamJson json格式字符串 如果用sdk的web view,可以置顶窗口大小等参数
httpHeaderJson json格式字符串 保留参数,以后功能扩展使用

调用示例

  1. //使用系统默认浏览器打开网页调用示例:
  2. Open_Web_Browser(L"www.baidu.com", L"{}", L"{}");
  3. //使用sdk的webview浏览器打开网页调用示例:
  4. configor::wjson windowParamJson;
  5. windowParamJson[L"cef_browser"] = L"1"; //是否使用sdk提供的webview,传0则用系统默认浏览器打开网页
  6. windowParamJson[L"window_width"] = 872; //窗口宽度
  7. windowParamJson[L"window_height"] = 768; //窗口高度
  8. windowParamJson[L"GameWindowHwnd"] = L"0x00950B52"; //(可选参数)如果传入游戏窗口的HWND,则webview窗口可以自动保持在浏览器窗前面
  9. v1->Open_Web_Browser("www.baidu.com", windowParamJson.dump().c_str(), L"");

附录 错误码列表

附1:客户端错误码

状态码 说明
-1 未知错误
-2 SDK联网URL错误
-3 第三方登陆验证返回失败
-4 支付失败,未知错误
-5 无网络
0 初始化失败
10 登陆错误,未知错误
11 登陆取消
12 登陆数据错误,账号或密码为空
13 登陆验证失败
14 登陆验证参数错误
15 获取系统用户名错误
16 单机隐式登录失败
20 注册失败,未知错误
21 注册失败,验证错误
22 注册数据错误,账号或密码为空
30 修改密码错误
31 修改密码错误,用户id或者密码为null或者格式错误
32 修改密码错误,参数错误
33 找回密码错误,参数错误
40 绑定用户信息错误
41 绑定用户信息错误,验证错误
42 绑定用户信息错误,参数错误
43 接口所需参数传递为空或者格式不正确
100 支付相关参数错误
101 支付成功
102 支付失败
103 支付取消
104 下单成功
105 下单失败
106 解析支付协议失败
107 当前支付方式不可用
205 账号封停
300 官网支付webview页面报错

附2:用户中心错误码

跳转查询

附3:计费中心错误码

跳转查询

附4:激活码领取错误码

状态码 说明
21134 roleId格式不正确
21137 gameServerId格式不正确
21143 gameServerId在平台没有启用
21146 请求报文头格式不正确
21147 手机平台ID格式不正确
21148 设备名称格式不正确
21149 设备系统版本号格式不正确
21150 设备分辨率格式不正确
21151 设备UDID格式不正确
21152 运营商格式不正确
21153 设备厂商格式不正确
21185 激活码不得为空
21186 发货失败
21187 激活码不存在或不可用
21188 激活码已过期
21189 激活码未领取
21190 激活码已使用
21191 该用户已兑换过激活码
21192 该设备已兑换过激活码
21193 活动暂停中
21194 激活码已经用完
21195 网络异常
21196 服务内部错误
21197 传入的激活码有错误
21198 传入的礼包ID有错误
21199 用户未登录
21200 兑换超过用户最大限制
21201 游戏产品有误
21202 策略关系不存在
21203 联运渠道或推广渠道有误
21204 推广渠道有误
21205 机型组有误
21206 语言有误
21207 逻辑服策略不存在
21208 逻辑服有误
21227 用户每天兑换次数超出上限
21228 用户每周兑换次数超出上限
21229 用户每月兑换次数超出上限
23157 礼包码未到生效时间
23158 失败

附5:货币类型及对应ID

在MIS中的货币有总共十种,货币ID是没有限定位数的纯自增值

货币ID 货币名 币单位
1 人民币
2 美元 美分
3 日元
4 港币
5 英镑 便士
6 新加坡币
7 越南盾
8 台币
9 韩元
10 泰铢 萨当
14 马来西亚林令吉
17 菲律宾币
19 印尼卢比 卢比
21 柬埔寨瑞尔 瑞尔
122 缅甸元

附6:防沉迷相关提示和错误信息

防沉迷相关提示和错误信息

code limit_code limit_desc
01010054 输入的身份证号码格式有误
01010066 每日最多进行5次实名验证,请明天再试
01010067 实名信息认证失败;
01010069 under_age_login_not_in_period 本游戏仅在周五、周六、周日及法定节假日20-21点对未成年人提供游戏服务;调休工作日不提供未成年人游戏服务;
01010068 realname_info_authing 实名信息认证中,认证通过后方可进入游戏!
user_realname_auth_failed 根据国家相关规定,用户需进行实名认证,请输入您的姓名及身份证号码进行身份确认
01010068 实名信息认证中,认证通过后方可进入游戏!