支付接入指南

对于需要支付的游戏,可以选择合适的支付方式进行接入,本文主要对平台支付进行简单概述说明。

闪电玩支付环境

由于微信策略限制,小游戏在IOS环境下不能直接进行支付,包括:
1.IOS环境下小游戏无法直接发起支付(安卓有米大师支付);
2.IOS环境下,使用跳转小程序进行支付,小程序一旦被限制打开,从而导致无法充值。

现闪电玩平台支持在游戏内充值游戏外充值两种主要支付方式,本文主要介绍游戏内部发起的支付方式,如需要了解游戏外进行支付,详细请阅读《闪电玩平台外部支付流程》

如果小游戏内支付对安卓和苹果环境做区分处理,请自行参阅微信API进行判断,或者根据sdk提供的sdk.wxSystem.OS返回值进行判断。

OS值 说明
2 苹果环境
1 安卓环境

接入准备事项

小游戏的支付数据是基于H5支付版本的支付流程和支付数据(接入前请仔细阅读-闪电玩平台支付模块的内容),如果CP之前已经接入过H5游戏的支付,则可进行如下准备:

默认情况下,安卓采用米大师支付(米大师支付需要在后台配置),苹果采用平台支付。
如果安卓环境下不想采用米大师支付(相关的米大师配置可忽略),并按照需求调用不同的支付接口。
安卓米大师支付需要相应的版号,若果小游戏没有版号,建议直接使用平台支付。

a.在微信小游戏后台添加安全域名:

https://sandbox-hsdk-pay-notify.17m3.com(安卓测试环境支付)
https://hsdk-pay-notify.17m3.com(安卓正式环境支付)
https://wxpush.shandw.com(平台支付)

b.需要在后台开通米大师虚拟支付,并且配置相关的信息(安卓支付)。

c.游戏在设置道具价格的时候,需要注意如下区别。

充值方式 充值额度
米大师 按照微信后台有效价格
平台小程序 任意金额

d.开通支付后,CP需要提供给平台如下信息(对接人员必须正确配置到相应后台中):

名称 说明
wxAppId 微信小游戏的APPID
wxKey 微信下游戏的KEY
appId 闪电玩的游戏APPID
key 闪电玩的游戏KEY
payId 米大师支付应用的ID
AppKey 米大师支付AppKey(沙箱),测试通过后采用正式的
rate 米大师的支付比率,用于扣除游戏币。例如:后台配置为1:10,则rate为10。

e.确认服务端的充值回调接口地址,请配置到后台中,确保付款成功后,实时更新订单数据。

f.如果支付采用了跳转平台的形式(非生成二维码形式),需要小游戏在game.json中配置navigateToMiniProgramAppIdList,将需要跳转的小程序微信id添加到允许列表中,现闪电玩平台支付支持的小程序如下(按需添加)。

微信小程序id 说明
wxdc1767838b33cbdb 闪电玩娱乐大厅(IOS已封)
wx657e3a7f5acb59df 闪电玩真人对战(IOS已封)
wx922cf8b44f660fc5 闪电玩
后续新增开放 后续新增开放

示例代码:

// game.json
{
    "navigateToMiniProgramAppIdList":[
        "wxdc1767838b33cbdb"
    ]
}

调用支付说明

由于微信小程序之间的跳转做了相应的调整,sdk重新整合了目前支付的所有功能,提供一个新的支付方法chooseSDWPay2,原先的chooseSDWPay保持不变,具体调用如下说明。

a.旧版chooseSDWPay

使用初始化后的sdk中的chooseSDWPay(payData,payConfig,isTest,usePlt)方法调用支付,具体参数说明如下。

参数名 类型 说明
payData Object 支付数据对象(详见下文)
payConfig Object 旧接口此参数已经废除,填{}对象即可
isTest Boolean 安卓米大师支付,默认false:正式环境;true:沙箱测试环境
usePlt Boolean 安卓平台下采用跳转平台小程序支付,默认false:不采用跳转;true:安卓跳转

Tips:
1.在苹果环境下都是采用直接跳转小程序;
2.如果使用了usePlt=true,安卓也是直接跳转小程序;
3.如果需要使用二维码的形式,采用下文中的chooseSDWPay2方法。

b.新版chooseSDWPay2

使用初始化后的sdk中的chooseSDWPay2(payData,payConfig)方法调用支付,具体参数说明如下。

参数名 类型 说明
payData Object 支付数据对象(详见下文)
payConfig Object 各个设备的支付模式(详见下文)

payConfig{android: valueStr, ios: valueStr},valueStr的选择,具体如下说明。

valueStr 说明 Android IOS
midas 米大师正式支付 支持 不支持
midas_test 米大师沙箱支付 支持 不支持
sdw 由程序自动跳转平台支付 支持 支持
sdw_qrcode 展现平台的支付二维码 支持 支持

其中,valueStr为sdw的时候,需要符合微信小程序的跳转规则;valueStr为sdw_qrcode的时候,展现二维码,需要用户长按识别小程序,然后进行跳转支付。

payData:传入支付参数,支付参数同H5支付版本,原先H5的订单产出后,只需要增加如下额外的参数(这些参数不用参与sign校验)即可:

参数名 类型 说明
gameName String 游戏的名称
nick String 游戏中的昵称
areaName String 游戏中的大区
zoneId String 小游戏后台开通米大师(安卓支付)的支付大区,默认为'1'

切换支付小程序

在调用支付前,使用switchPayMiniProgram(wxAppId),可切换支付的小程序(在支付模式为sdw或sdw_qrcode有效),wxAppId的支持参数在【接入准备事项】中的表格,默认都是使用【闪电玩娱乐大厅】小程序。

示例代码:

// H5版本支付的数据-具体是需要游戏服务端生成的
// call_back_url和merchant_url中的appId、CHANNEL替换成各自游戏的id和channel即可

var payData = {
    "subject": "测试商品",
    "appId": "appId",
    "timestamp": 1538212308,
    "accountId": 1836247561,
    "amount": "1",
    "memo": "memo-hjhjkhjk",
    "cpOrderId": 1538212308501,
    "call_back_url": "http://www.shandw.com/m/game/appId.html?channel=CHANNEL",  // H5版本支付后的跳转URL地址
    "merchant_url": "http://www.shandw.com/m/game/appId.html?channel=CHANNEL",   // H5版本支付后的跳转URL地址
    "channel": "10000",
    "wxopenid": "wxopenid",
    "sign": "bd48e00f8d3b7433f2b4905c26d45682",
    "gameName": '闪电玩',
    "nick": '闪电玩-昵称',
    "areaName": "闪电玩-大区",
    "zoneId": "1"
};

// 前端按需加入相应的支付回调方法
payData.success = function (res) {
    console.log('pay success');
    console.log('支付的原始订单', res.cpOrderId);
};

payData.fail = function (res) {
    console.log('pay fail');
    console.log('支付的错误信息', res.msg);
};

payData.complete = function (res) {
    console.log('pay complete,返回一个订单号');
    console.log('支付的原始订单', res.cpOrderId);  // 成功或者失败未知
};


// ============================================================================================
// ============================================================================================
// CP在调用支付的时候,根据需求,可调用不同的支付场景
// ============================================================================================
// ============================================================================================

// 切换为【闪电玩真人对战】小程序进行支付
sdk.switchPayMiniProgram('wx657e3a7f5acb59df');  


/**  新版chooseSDWPay2支付方式  **/

// 安卓采用米大师正式,IOS采用展现二维码方式(具体根据上文的选择配置来定)
sdk.chooseSDWPay2(payData, {android: 'midas', ios: 'sdw_qrcode'});


// ============================================================================================
// ============================================================================================


/**  旧版chooseSDWPay支付方式  **/

// 支付方式一:安卓采用米大师(第三个参数true为测试环境),IOS采用平台支付
sdk.chooseSDWPay(payData, {}, true);

// 支付方式二:安卓采用米大师(第三个参数false为正式环境),IOS采用平台支付
sdk.chooseSDWPay(payData, {}, false);

// 支付方式三:安卓、IOS均采用平台支付
sdk.chooseSDWPay(payData, {}, false, true);

支付回调说明

支付回调是指在支付环节中,客户端所发生的流程回调(具体支付结果需要一服务端判定为准),具体流程说明如下。

回调函数 说明
success 在扣款成功的时候,进行回调
fail 在支付过程中,发生的数据交互错误时,或者支付失败时,进行回调
complete 在支付流程完毕后,进行回调

a.支付组扣款

此流程是支付组调用米大师后台的扣款接口,用于进行扣米大师的虚拟币操作,在支付的时候,确保小游戏是处于何种米大师的支付状态(正式环境或者沙箱环境),当然在请求的过程中,也会出现接口的错误情况。

b.米大师前端支付

此流程是发生在安卓进行米大师支付的时候,也有可能出现前端支付失败的情况,如果支付成功,sdk会重新自动发起支付扣款操作,以便支付流程的完整性。

c.请求数据转换

此流程是发生在使用小程序支付时,需要将CP的订单数据进行保存,生成一个临时的payToken,携带到支付小程序中,支付小程序解析payToken,进行支付。所以在此流程中,也有可能出现转换失败的可能性。

d.跳转小程序

微信现在对小程序间跳转做出一系列的约束策略,需要用户确认跳转,及添加允许跳转的配置列表,在跳转的过程中,用户也有可能拒绝跳转,导致支付流程无法进行下去。


Tips:
1.支付的时候涉及到的流程相对较多,所以在微信配置文件的中,将请求的时间尽量设置的长一点,防止接口超时。
2.在进行支付的时候,回调函数只负责支付流程的事件回调,不能确保最终的支付结果;
3.在进行小程序支付的时候,返回小游戏,会触发onShow事件,sdk只能回调complete事件,从而说明已经完成支付流程。

支付结果判定

所有sdk中支付的successfailcomplete回调函数,仅仅只是前端在发起支付时的流程回调函数,为确保支付的正确性,大致可分为如下两种判定情况:
如果小游戏是实时通讯类的,支付具体的结果请以游戏服务端下发结果为准;
如果是单机版小游戏,可在complete回调中,拿到原始的订单,向游戏后台进行查询支付的结果。

支付失败检查

在支付过程中,如果出现如下错误,请按照排错建议进行排查:

a.参数错误
如果出现参数错误的情况,请CP检查订单数据的正确性,可访问支付数据校验页面,看看加密前后的数据是否一致。如果数据一致,则联系对接人员。

b.图片加载错误
如果出现图片加载错误的时候,请在微信后台中downloadFile板块中,加入对应的安全域名。