业务拓展需要,闪电玩平台现提供一种新型的支付形式,此支付流程是在H5支付版本(接入前请仔细阅读-闪电玩平台支付模块的内容)基础上做相应的调整,具体支付操作流程如下说明。
如上图流程所示,大致可分为如下步骤:
1.用户输入游戏闪电码
,查询相关的游戏道具列表;
2.点击对应的道具进行兑换流程;
3.进行支付,并通知游戏服务端,完成支付。
1.CP需要在游戏内部生成游戏闪电码
(生成规则详见下文)。
2.CP需要实现一个游戏下单的服务端接口requestPay
(接口要求详见下文)。
3.CP需要提供一份游戏道具配置文件(具体配置要求详见下文)。
由于游戏的道具列表展现的风格统一,需要CP提供一份道具配置表(下载道具配置模板信息表),填写相关的道具信息。如果需要新增或删减可支付的道具,请及时地调整。
道具表中的参数说明。
参数名 | 类型 | 说明 |
---|---|---|
appId | String | 小游戏的闪电玩appId |
appName | String | 小游戏的名称 |
areaId | String | 小游戏的大区ID,如果没有大区ID,在表格中不用填写 |
url | String | 游戏下单接口requestPay地址 |
productId | String | 游戏道具的ID |
productName | String | 游戏道具的名称 |
productPrice | String | 游戏道具的价格(单位:分) |
desc | String | 游戏道具的简单描述 |
游戏闪电码的作用,具体是将微信小游戏的用户数据,与闪电玩平台形成一个信息桥梁,从而使得同一用户在H5环境和小游戏中的支付数据可以进行串通。用户在进入支付页面的时候,需要用户填入游戏闪电码
,然后闪电玩平台做对应的解析,才能得到所需的小游戏用户信息以及对应游戏的道具列表,方可完成相应的支付操作。
CP需要在游戏内做如下处理:
1.CP按照对应的格式要求,生成游戏闪电码
;
2.CP在游戏合适的位置展现游戏闪电码
,并提供可复制的方法;
3.屏蔽相关支付入口(如苹果环境下的微信小游戏),改成对应(合理)的引导H5支付。
游戏闪电码
拼接规则:appId|uid|channel|areaId|sign
,各个参数间用|
拼接,具体参数如下说明。
参数名 | 类型 | 说明 |
---|---|---|
appId | String | 闪电玩游戏ppId |
uid | String | 闪电玩返回的用户uid |
channel | String | 闪电玩平台的渠道号 |
areaId | String | 小游戏中的游戏大区,此字符串切勿出现 | ,以免数据解析错误;如果没有游戏大区,填"" |
sign | String | 加密字段 |
sign的md5方式:md5(appId+areaId+channel+uid).toLower
。
闪电玩支付界面会更根据用户选择的道具,向服务端换取支付数据(即下单),具体流程如下。
流程中的步骤1
和步骤4
,为闪电玩平台内部数据交互的流程,此处不做过多的描述。
流程中的步骤2
和步骤3
,是闪电玩服务端向游戏服务端换取游戏支付数据的过程,需要游戏提供一个接口requestPay
,接收相应的参数,完成游戏服务端支付下单功能,并将游戏的支付数据返回给闪电玩服务端。
接口requestPay
接收的参数如下。
参数名 | 类型 | 说明 | 备注 |
---|---|---|---|
sdwUid | String | 闪电玩用户id | 对应订单数据中的accountId |
wxOpenId | String | 微信H5环境下的openid | 缺省值"",对应订单数据中的wxopenid |
appId | String | 闪电玩游戏appid | 对应订单数据中的appId |
channel | String | 闪电玩的渠道号 | 对应订单数据中的channel |
serverId | String | 微信小游戏区服ID | 缺省值"" |
productId | String | 商品ID | 对应订单数据中的subject,如果没有商品id,则用配置表中的productName顶替,CP需要确认商品的合法性 |
money | Int | 商品ID对应的道具价格(分) | 对应订单数据中的amount,CP需要确认道具价格的合法性 |
time | Long | 时间戳 | 用于验签 |
signType | String | 签名类型 | 默认为"md5" |
sign | String | 签名字符串 | 本次请求数据的验签 |
其中签名规则步骤如下:
上述参数除sign、signType、appId外,其他参数按照名称的字典顺序以key=value用"&"拼接,生成排序后的字符串StringA
;
然后将StringA+"&appId="+appId+"&key="+appsecret
(闪电玩平台所给的秘钥Key),生成待签名字符串StringB
;
生成最终的签名字符串,sign=md5(StringB).toLower
。
示例代码:
// 模拟闪电玩服务端POST请求接口requestPay // Content-type类型为application/x-www-form-urlencoded POST('requestPay','channel=channel&money=1&productId=productId&sdwUid=sdwUid&serverId=&time=time&wxOpenId=&appId=appId&key=sdwKey');
接口requestPay
收到请求后,校验数据的正确性,随后进行下单操作,并且返回结果如下。
参数名 | 类型 | 说明 | 备注 |
---|---|---|---|
result | Int | 响应代码 | 1:成功;-1:代表失败 |
data | Object | 订单数据 | 完整合法的电魂订单数据 |
msg | String | 说明文案 | 例如productId不存在的时候,msg提示:无效的道具 |
示例代码:
// 接口requestPay返回结果 { "result": 1, "data": { "subject": "测试商品", "appId": "appId", "timestamp": "timestamp", "accountId": "accountId", "amount": "1", "memo": "memo-hjhjkhjk", "cpOrderId": 1538212308501, "call_back_url": "http://www.shandw.com/mi/game/appId.html?channel=CHANNEL", "merchant_url": "http://www.shandw.com/mi/game/appId.html?channel=CHANNEL", "channel": "10000", "wxopenid": "wxopenid", "sign": "bd48e00f8#d3b7433f2b490-5c26d45682" }, "msg":"订单创建成功" }
Tips:
1.result为1的时候,请一定要确保data的正确性,以便前端顺利调用支付;
2.result为-1的时候,请一定要有msg提示,以便前端进行相关的提示。
闪电玩前端页面获取到具体的支付数据后,会调用相应的支付,待用户完成支付后,将具体的支付信息回调给游戏服务端,游戏服务端根据回调结果,确认是否发送购买的道具。
默认的支付地址链接为http://www.shandw.com/m/h5pay/
,该地址默认的充值引导图为【怼怼梦三国】(本页面的顶部引导图),如果需要配置不同的游戏引导图,需要如下操作:
1.产出一张对应游戏的引导图,图片的名称为游戏id.gif
,并交给前端;
2.给玩家的支付链接后面加上参数id,值为游戏的id,例如:http://www.shandw.com/m/h5pay/?id=游戏id
,支付页面会根据id参数读取不同的引导图片。
上述流程均对接完成后,可访问支付地址或者扫描下图二维码,进行完整的支付测试。
Tips:
1.CP在生成订单时,订单对应的字段值必须与,请求参数中的值保持一致(如sdwUid、wxOpenId等);
2.注意区分生成订单时的sign和接口中sign的规则;
3.生成游戏闪电码
中的areaId
必须有与之对应的道具信息,否则无法读取到游戏道具列表;
4.此代充服务只是单一性的支付行为,暂时没有限购等功能;
5.充值地址后面的id请注意变更,切忌出现游戏引导图混乱现象。