支付SDK客户端文档

1. 环境配置

解压SDK包,可以看到 lib4399MGSDK 其中包含 inclib 两个目录,inc 包含所需的头文件,lib 包含Win32以及 x64 相对于的DLL以及库文件。

1.1 VS配置

①拷贝lib4399MGSDK到游戏项目工程中,并配置依赖关系。

② 引入头文件

#include "PC4399SDK.h"
#pragma comment(lib, "PC4399SDK.lib")

③ 将lib目录下对应的PC4399SDK.dll与游戏exe放在一起

1.2 Unity3D配置

1. 在Assets目录下创建Plugins目录

2. 针对 Unity5.x 版本,需在 Plugins 下创建 x86 / x86_64 ,将 PC499SDK.dll 拷贝到对应的目录下

3. 针对 Unity2017 版本,将需要的 PC4399SDK.dll 拷贝到目录下即可

2. SDK初始化

SDK使用前,必须先进行初始化操作,SDK初始化完成后,若用户已登录,服务器端会进行验证后返回用户信息给客户端,未登录则返回空。 

特别注意:SDK初始化必须在游戏启动时进行

 API:

/**
* SDK初始化接口
* @param appKey 游戏ID
* @param unionId 充值ID(申请后获取)
* @param InitResultCallback 初始化回调,成功则返回已登录用户信息,失败返回空
*/
void InitZzMGSDK(const char* appKey, const char *unionId)

示例:

const char* app_key = "游戏id";//游戏id
const char* union_id = "充值id"; //充值id
//SDK初始化
InitZzMGSDK(app_key,union_id);

3. 设置游戏主进程接口

部分游戏出现多个进程的情况,通过以下接口可以设置主游戏进程ID,方便SDK防沉迷退出游戏控制。

API:

/**
* 设置游戏主进程ID
* 游戏进程ID
*/
void SetGameProcessId(DWORD dwGameProcessId);

4. 登录调用

API:

/**
* 登录回调(适用主站版本)
 param userInfo 登录成功返回用户信息,失败则返回空
*/
typedef void(*MGLoginCallback)(const char* userInfo);

 /**
 * 登录接口
 */
void DoMGLogin(MGLoginCallback callback);

返回值:

username=test&time=1124454&fcm=1&uid=123456789&token=daffaewwewee

描述:

username 用户名(UrlEncode编码过)
time 登录时间
fcm 防沉迷(0 表示该用户为成年人,2代表为儿童,1代表未填写)
uid 用户id
token 加密串规则:

 $loginSecret = "秘钥,找渠道申请";
//规则信息
//md5(md5(用户UID + 用户账号 + 密钥 + 时间) +秘钥)

$token = md5(md5($uid.$username.$loginSecret.$time).loginSecret);
username可能出现中文,客户端返回的username是经过urlencode编码后的值,故在服务器端校验签名时,不要进行urldecode后在进行校验,
其他地方使用可以进行urldecode

示例代码:

//发起登录
DoMGLogin(OnLoginCallback);

//登录回调
void CPC4399SDKCppDemoDlg::OnLoginCallback(const char* userInfo)
{
    CString res(userInfo);

    p_Instance->UpdateData(True);
    if (res.IsEmpty())
    {
        p_Instance->m_resultText = "登录接口返回结果:未登录\n";
    }
    else
    {
        p_Instance->m_resultText = "登录接口返回结果:已登录\n";
        //显示登录的用户信息 
        AfxMessageBox(res);
    }

    CString version(GetMGVersion());
    p_Instance->m_resultText.Append(L"\nVersion="+ version);

    p_Instance->UpdateData(False);
}

5. 支付调用

在发起支付前,必须保证游戏已经接入登录接口(PS:必须先接入内嵌登录页),登录完成后方可使用该接口。

PS: 

 为方便开发测试联调,SDK从V1.0.7起增加测试模式功能。 

1.测试模式由SDK后台控制。在SDK申请参数审核后,会先开通测试模式进行联调,联调成功后转换为正式模式。 

2.测试模式下调用支付接口,无充值选项界面,直接模拟充值,SDK服务端将立即回调游戏服务器。 

3.测试模式需要使用指定的账号进行登录测试,由运营在对接组中提供。

API:

/**
*支付信息结构体
*/
typedef struct MGPayInfo { 
    const wchar_t* goodsName; //商品名称
    int money; //充值金额
    const wchar_t* server;  //分服id标识
    const wchar_t* mark; //附加字段,只允许32位字符
} MGPayInfo;

/**
* 支付回调
* @param code 返回值
*/
typedef void(*PayResultCallBack) (int code);
/**
* 支付接口
* @param payInfo 用于支付的物品等信息
* @param callback 充值回调
*/
void DoMGPay(MGPayInfo const& payInfo, PayResultCallBack callback)

示例:

 MGPayInfo payInfo;
    payInfo.goodsName = L"商品名称"
    payInfo.money = 1;
    payInfo.server = L"1"; //分服标识,无分服请设置为空   
    payInfo.mark = L"xxx";  //附加信息,可以是自定义的订单号,最大长度32位

    DoMGPay(payInfo, OnPayCallBack); //发起支付

支付回调:

void OnPayCallBack(int code)
{
   //回调结果处理
}

SDK返回码:

const int kMGResultFailed = 90001;//支付失败
const int kMGResultSucceed = 90002;//支付成功
const int kMGResultErrorUnion = 90003;//unionid不存在或已失效
const int kMGResultErrorUser = 90004;//用户未登录或已过期
const int kMGResultErrorNotTestUser = 90008;//测试模式-非测试账号