# 验证支付结果

本页将说明如何进行支付验证的装载。

# 签名验证

mobage.ui.open() 支付处理完成后, result对象会传递到回调函数的第二个参数。 这个result 对象的 signedResponse 属性中,支付结果是以JWT形式包含在编码后的字符串里。

此JWT使用 RS256 算法签名。 请选择支持RS256的 JWT库,进行签名验证的装载。

在验证签名时,必须有各种对应不同Mobage环境的公钥。 请参阅 JWT公钥 , 使用适合环境的公钥来装载验证。

运行示例应用软件 分发的 Java 示例代码中,有使用 Java JWT:JSON Web Token for Java and Android 的装载示例。

# 验证JWT Claims Set

在核实签名无误后,验证 JWT 中的被称为 Claims Set 的数据。 JWT Claims Set 的结构如下。

{
    "jti": "12123312" ,
    "iss": "https ://sb-widget.mobage.jp",
    "aud": "12000129-4" ,
    "sub": "12341234" ,
    "typ": "signed_extra",
    "extra ": {
        "service": "payment",
        "result": {
            "payment": {
                "id": "20EDBD5D-A858-38F7-BF65-A097394AC80C",
                "items": [
                    {
                        "item": {
                            "id": "item_1",
                            "name": "Sample item",
                            "price ": 100,
                            "description ": "This is a sample item",
                            "imageUrl ": "http://example.pf.mobage.jp/img/item_1.png"
                        },
                    "quantity": 4
                    }
                ],
                "state": "closed",
                "comment": "Purchase of four sample items",
                "published": "2014-01-27T11:58:01" ,
                "updated": "2014-01-27T11:59:35"
            },
            "order_id": "123456123"
        }
    },
    "iat": 1390791600
}

从以下方面检查Claims Set 中的数值是否有误。

  • iss 的数值是否与下表的数值相同。
  • aud 的数值是否与应用软件的Client ID相同。
  • iat 的数值是一个UNIX时间戳值,代表过去的日期和时间,而不是当前时间。
  • sub 的数值是否与登录用户的 Mobage 用户 ID相同。
环境 iss 的值
sandbox https://sb-widget.mobage.jp
service https://widget.mobage.jp

# 检查是否与订单记录相符

存储在signedResponse属性的 JWT 中的 extra 字段,内含支付结果的信息。

可通过调用支付对话框,获得开发者服务器发行的 Order ID 的参照值 extra.result.order_id,使用该值可以获取 Order ID 。

确认开发者服务器上的 Order ID 绑定的 Transaction ID ,与 JWT 上的extra.result.payment.id 是否相同,并交付道具。

# 防止重复交付

为了防止一个支付结果中出现道具重复交付的情形,必须装载道具发放状态的检查功能。

届时在检查道具交付状态到交付道具的期间,请通过互斥锁等来确保没有其他程序在执行同一交付。

MIT Licensed | Copyright © 2020-present DeNA.Co., Ltd. All rights reserved.