对于需要支付的游戏,可以选择合适的支付方式进行接入,本文主要对平台支付进行简单概述说明。
由于微信策略限制,小游戏在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保持不变,具体调用如下说明。
使用初始化后的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方法。
使用初始化后的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 | 在支付流程完毕后,进行回调 |

此流程是支付组调用米大师后台的扣款接口,用于进行扣米大师的虚拟币操作,在支付的时候,确保小游戏是处于何种米大师的支付状态(正式环境或者沙箱环境),当然在请求的过程中,也会出现接口的错误情况。
此流程是发生在安卓进行米大师支付的时候,也有可能出现前端支付失败的情况,如果支付成功,sdk会重新自动发起支付扣款操作,以便支付流程的完整性。
此流程是发生在使用小程序支付时,需要将CP的订单数据进行保存,生成一个临时的payToken,携带到支付小程序中,支付小程序解析payToken,进行支付。所以在此流程中,也有可能出现转换失败的可能性。
微信现在对小程序间跳转做出一系列的约束策略,需要用户确认跳转,及添加允许跳转的配置列表,在跳转的过程中,用户也有可能拒绝跳转,导致支付流程无法进行下去。
Tips:
1.支付的时候涉及到的流程相对较多,所以在微信配置文件的中,将请求的时间尽量设置的长一点,防止接口超时。
2.在进行支付的时候,回调函数只负责支付流程的事件回调,不能确保最终的支付结果;
3.在进行小程序支付的时候,返回小游戏,会触发onShow事件,sdk只能回调complete事件,从而说明已经完成支付流程。
所有sdk中支付的success,fail,complete回调函数,仅仅只是前端在发起支付时的流程回调函数,为确保支付的正确性,大致可分为如下两种判定情况:
如果小游戏是实时通讯类的,支付具体的结果请以游戏服务端下发结果为准;
如果是单机版小游戏,可在complete回调中,拿到原始的订单,向游戏后台进行查询支付的结果。
在支付过程中,如果出现如下错误,请按照排错建议进行排查:
a.参数错误
如果出现参数错误的情况,请CP检查订单数据的正确性,可访问支付数据校验页面,看看加密前后的数据是否一致。如果数据一致,则联系对接人员。
b.图片加载错误
如果出现图片加载错误的时候,请在微信后台中downloadFile板块中,加入对应的安全域名。