# 验证支付结果
本页将说明如何进行支付验证的装载。
# 签名验证
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
是否相同,并交付道具。
# 防止重复交付
为了防止一个支付结果中出现道具重复交付的情形,必须装载道具发放状态的检查功能。
届时在检查道具交付状态到交付道具的期间,请通过互斥锁等来确保没有其他程序在执行同一交付。