内购支付(必接)

回调接口说明

  • 当玩家在SDK中支付成功时,SDK Server 会异步通知给游戏服务器。游戏服务器收到回调之后, 对参数进行签名验证,同时对金额,商品ID,角色等信息做必要的验证, 验证成功后,给玩家下发道具。
  • 异步通知的回调地址, 客户端在调用支付接口的时候, 可以通过payNotifyUrl字段传入。

注意: SDK使用客户端传入的payNotifyUrl地址。

交互流程

Image

回调地址

研发提供服务端接口

参数

form-data格式

参数 类型 是否可为空 说明
appID String 游戏appID
orderID String SDK平台的订单号
price String 金额, 分
currency String 货币,默认是USD
cpOrderID String 游戏订单号
extra String 扩展数据,客户端调用支付接口传入的extra(若无内容则写1)
orderTime String 支付时间戳,1970年开始的秒数
timestamp String 时间戳
productID String 商品ID
roleID String 角色ID
serverID String 服务器ID
sign String 注意:秘钥使用分配的secretKey

自测示例

Image

签名示例

签名代码可参考签名

appID=10001&cpOrderID=11111&currency=CNY&extra=1&orderID=1111111111111&orderTime=1111111111&price=1&productID=1&roleID=1&serverID=1&timestamp=1111111111&secretKey=AppSecret 6C2D6F001804229616000FDF574406F5

代码示例

@RequestMapping(value = "/orderCallbackDemo", method = RequestMethod.POST)
@ResponseBody
public String orderCallbackDemo(HttpServletRequest request){
    Map<String, String> params = new HashMap<>();
    //从body  form-data中获取参数
    Map<String, String[]> paramMap = request.getParameterMap();
    for (String key : paramMap.keySet()) {
        String[] vals = paramMap.get(key);
        if (vals == null || vals.length == 0) {
            continue;
        }
        params.put(key, vals[0]);
    }
    String sign = request.getParameter("sign");
    String serverSign = SignUtils.sign(params, "AppSecret");
    if (sign.equals(serverSign)){
        //todo 保存订单,异步发货
    }
    return  "SUCCESS";
}

返回值

  • 说明

游戏服务器收到支付回调请求之后, 校验签名正确, 给SDK Server返回文本字符串:SUCCESS;否则返回文本字符串:FAIL

注意:离线回调机制,验证通过就返回SUCCESS,道具下发逻辑异步执行,需要支持离线状态,上线领取。游戏才能监控到有效进入退出游戏的状态,更及时的发放物品道具。

支付结果以服务器支付回调通知优先级最高。成功订单可以覆盖失败订单,已成功订单锁死排重不处理。Google支付服务器有低概率出现验证订单票据异常,SDK不会调用支付回调接口。直到重试请求成功或者人工确认订单有效,再补发通知。

  • 示例

    SUCCESS

results matching ""

    No results matching ""