使用PNS(Push Notification Service)
Last updated
Last updated
ONE store为开发者提供两种Push Notification Service。
第一种是PNS(Payment Notification Service,支付通知服务),当发生In-App商品支付或取消支付时,ONE store向开发公司服务器发送通知。
第二种是SNS(Subscription Notifacation Service,订阅通知服务),在订阅状态发生变化时向开发公司服务器发送通知。
注意
由于notification可能因发送/接收服务器的状态而延迟或丢失,因此不建议以接收notification为准提供App商品(服务)。
如果您想以服务器到服务器方式确认是否正常付款,我们建议您使用相关服务器API进行查询,而不是使用PNS notification。
ONE store可能会进行付款测试以便验证和监控,在付款/取消付款时,这些测试也会收到同样的notification。ONE store的付款测试历史记录会定期由ONE store自行取消。
您可以通过点击"开发者中心>Apps>App商品选择>In-App信息"菜单中的"管理PNS"按钮来设置接收PNS的开发公司服务器的URL。
URL可以分别设置Sandbox(开发用)支付环境和商用(包括商用测试)支付环境,如果开发用/商用服务器相同,则输入相同的URL即可。
URI : 在开发者中心设置的 Payment Notification URL
Method : POST
Request Parameters : N/A
Request Header
Parameter Name | Data Type | Description |
Content-Type | String | application/json |
Request Body : JSON格式
Element Name | Data Type | Description |
msgVersion | String | 消息版本
|
packageName | String | 应用软件的包名 |
productId | String | In-App商品的商品ID |
messageType | String | SINGLE_PAYMENT_TRANSACTION 固定 |
purchaseId | String | 购买ID |
developerPayload | String | 由开发公司管理以标识购买件的标识符 |
purchaseTimeMillis | Long | 在ONE store支付系统中完成支付的时间(ms) |
purcahseState | String | COMPLETED : 已支付 / CANCELED : 取消 |
price | String | 支付金额 |
priceCurrencyCode | String | 支付金额货币代码(KRW, USD, ...) |
productName | String | 请求购买时,如开发公司设置了customized In-App商品标题则传达 |
paymentTypeList | List | 支付信息列表 |
| paymentMethod | String |
| amount | String |
billingKey | String | 用于扩展的付款密钥 |
isTestMdn | Boolean | 是否是测试机(true : 测试机, false : 非测试机) |
purchaseToken | String | 购买token |
environment | String | 支付环境
|
marketCode | String | 市场分类编码 ( MKT_ONE : ONE store, MKT_GLB : Global ONE store) |
signature | String | 此消息的signature |
Example
paymentMethod | 支付方式名称 | 说明 |
DCB | 手机支付 | 在运营商费用账单上以"信息使用费"项目收取 |
PHONEBILL | 手机小额支付 | 在运营商费用账单上以"小额支付"项目收取 |
ONEPAY | ONE pay | ONE store提供的便捷支付 |
CREDITCARD | 信用卡 | 一般信用卡支付 |
11PAY | 11Pay | SK Plannet提供的信用卡便捷支付 |
NAVERPAY | N pay | Naver提供的Naver pay支付 |
CULTURELAND | Culture cash | 韩国文化振兴提供的Culture cash支付 |
TELCOMEMBERSHIP | 通讯公司会员 | 通讯公司提供的会员支付 |
OCB | OK cashbag | SK Plannet提供的OK cashbag支付 |
POINT | ONE store point | ONE store point支付 |
ONESTORECASH | ONE store cash | ONE store cash支付 |
COUPON | ONE store coupon | ONE store Coupon支付 |
EWALLET | e-Wallet | e-Wallet支付 |
BANKACCT | 银行账户支付 | 一般银行账户支付 |
PAYPAL | PAYPAL | Paypal支付 |
MYCARD | My card | 智冠科技提供的MY CARD支付 |
使用下面的代码,您可以检查signature是否伪造。
"代码"中的PublicKey是指"开发者中心 > Apps > In-App信息 > 认证和许可 证"中提供的许可证密钥。 有关许可证密钥的详细信息,请参阅 "In-App支付的预准备页面的"验证许可证密钥和OAuth认证信息"部分。
URI : 在开发者中心设置的Subscription Notification URL
Method : POST
Request Parameters : N/A
Request Header
Parameter Name | Data Type | Description |
Content-Type | String | application/json |
Request Body : JSON格式
Element Name | Data Type | Description | |
msgVersion | String | 消息版本
| |
packageName | String | 应用软件的包名 | |
eventTimeMillis | Long | event发生时间 | |
subscriptionNotification | Object | 支付信息目录 | |
| version | String | 订阅提醒消息版本 |
| notificationType | Integer | 订阅状态 |
| purchaseToken | String | 购买Token |
| productId | String | In-App商品的商品ID |
environment | String | 支付环境 · 开发(Sandbox) : SANDBOX · 商用 :COMMERCIAL | |
marketCode | String | 市场分类代码 ( MKT_ONE : ONE store, MKT_STM : storm ) |
Example
订阅状态 | 订阅代码 | 说明 |
1 | SUBSCRIPTION_RECOVERED | 定期支付已从保留状态恢复。 |
2 | SUBSCRIPTION_RENEWED | 已更新定期支付。 |
3 | SUBSCRIPTION_CANCELED | 客户要求解除定期支付。 |
4 | SUBSCRIPTION_PURCHASED | 您购买了新的定期支付商品。 |
5 | SUBSCRIPTION_ON_HOLD | 由于支付失败,定期支付处于保留状态。 |
6 | SUBSCRIPTION_IN_GRACE_PERIOD | 由于支付失败,定期支付处于延期状态。 |
7 | SUBSCRIPTION_RESTARTED | 客户取消了解除定期支付的要求。 |
8 | SUBSCRIPTION_PRICE_CHANGE_CONFIRMED | 用户同意变更定期支付的价格。 |
9 | SUBSCRIPTION_DEFERRED | 已延长定期支付的使用期限。 |
10 | SUBSCRIPTION_PAUSED | 已暂停定期支付。 |
11 | SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED | 已变更暂停定期支付的日程。 |
12 | SUBSCRIPTION_REVOKED | 已立即解除定期支付。 |
13 | SUBSCRIPTION_EXPIRED | 定期支付已到期。 |
ONE store中的PNS服务器通过HTTP(S)请求向开发公司服务器发送notification。
此时,开发公司服务器应以200响应HTTP Status Code,表示已正常接收notification。
如果由于网络延迟而丢失,或者由于开发公司服务器的异常情况,HTTP Status Code未能以200进行响应,PNS服务器将认为notification传输失败,并在3天内最多执行30次重传。
Notification的重传是在具有一定delay后执行,如下例所示,当重试次数增多时,delay会逐渐增加。 Example
次数 | delay (秒) | 重传时间 |
0 (首次) | 0 | 2020-05-17 13:10:00 |
1 | 30 | 2020-05-17 13:10:30 |
2 | 120 | 2020-05-17 13:12:30 |
3 | 270 | 2020-05-17 13:17:00 |
4 | 480 | 2020-05-17 13:25:00 |
... | ... | ... |