闪电玩平台外部支付流程

业务拓展需要,闪电玩平台现提供一种新型的支付形式,此支付流程是在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

道具下单流程

闪电玩支付界面会更根据用户选择的道具,向服务端换取支付数据(即下单),具体流程如下。

a.闪电玩自身数据交互

流程中的步骤1步骤4,为闪电玩平台内部数据交互的流程,此处不做过多的描述。

b.向游戏服务端换取游戏支付数据

流程中的步骤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请注意变更,切忌出现游戏引导图混乱现象。