对于需要支付的游戏,可以选择合适的支付方式进行接入,本文主要对平台支付进行简单概述说明。
由于微信策略限制,小游戏在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
板块中,加入对应的安全域名。