ios 支付验证 php,PHP服务端验证APPLE支付的收据

使用服务器来交付内容,我们还需要做些额外的工作来验证从Store Kit发送的收据信息。

重要信息:来自Store的收据信息的格式是专用的。 你的程序不应直接解析这类数据。可使用如下的机制来取出其中的信息。

验证App Store返回的收据信息当交易完成时,Store Kit告知payment

observer这个消息,并返回完成的transaction。

SKPaymentTransaction的transactionReceipt属性就包含了一个经过签名的收据信息,其中记录了交易的关键信息。你的服务器要负责提交收据信息来确定其有效性,并保证它未经过篡改。

这个过程中,信息被以JSON数据格式发送给App Store,App

Store也以JSON的格式返回数据。(大家可以先了解一下JSON的格式)

验证收据的过程:

1. 从transaction的transactionReceipt属性中得到收据的数据,并以base64方式编码。2.

创建JSON对象,字典格式,单键值对,键名为”receipt-data”,

值为上一步编码后的数据。效果为:{“receipt-data” : “(编码后的数据)”}

3. 发送HTTP POST的请求,将数据发送到App

Store,其地址为:https://buy.itunes.apple.com/verifyReceipt

4. App Store的返回值也是一个JSON格式的对象,包含两个键值对, status和receipt:{“status”

: 0,“receipt” : { … }}

如果status的值为0, 就说明该receipt为有效的。 否则就是无效的。

App Store的收据发送给App Store的收据数据是通过对transaction中对应的信息编码而创建的。 当App

Store验证收据时, 将从其中解码出数据,并以”receipt”的键返回。

返回的响应信息是JSON格式,被包含在SKPaymentTransaction的对象中(transactionReceipt属性)。Server可通过这些值来了解交易的详细信息。

Apple建议只发送receipt数据到服务器并使用receipt数据验证和获得交易详情。 因为App

Store可验证收据信息,返回信息,保证信息不被篡改,这种方式比同时提交receipt和transaction的数据要安全。(这段得再看看)

表5-1为交易信息的所有键,很多的键都对应SKPaymentTransaction的属性。备注:一些键取决于你的程序是链接到App

Store还是测试用的Sandbox环境。更多关于sandbox的信息,请查看”Testing a Store”一章。

Table 5-1 购买信息的键:

键名 描述quantity 购买商品的数量。对应SKPayment对象中的quantity属性product_id

商品的标识,对应SKPayment对象的productIdentifier属性。transaction_id

交易的标识,对应SKPaymentTransaction的transactionIdentifier属性purchase_date

交易的日期,对应SKPaymentTransaction的transactionDate属性original_-transaction_id

对于恢复的transaction对象,该键对应了原始的transaction标识original_purchase_-date

对于恢复的transaction对象,该键对应了原始的交易日期app_item_id App

Store用来标识程序的字符串。一个服务器可能需要支持多个server的支付功能,可以用这个标识来区分程序。链接sandbox用来测试的程序的不到这个值,因此该键不存在。version_external_-identifier

用来标识程序修订数。该键在sandbox环境下不存在bid iPhone程序的bundle标识bvrs

iPhone程序的版本号

测试Store功能开发过程中,我们需要测试支付功能以保证其工作正常。然而,我们不希望在测试时对用户收费。

Apple提供了sandbox的环境供我们测试。

备注:Store Kit在模拟器上无法运行。 当在模拟器上运行Store Kit的时候,访问payment

queue的动作会打出一条警告的log。测试store功能必须在真机上进行。

Sandbox环境使用Sandbox环境的话,Store Kit并没有链接到真实的App

Store,而是链接到专门的Sandbox环境。 SandBox的内容和App Store一致,只是它不执行真实的支付动作。

它会返回交易成功的信息。 Sandbox使用专门的iTunes Connect测试 账户。不能使用正式的iTunes

Connect账户来测试。

要测试程序,需要创建一个专门的测试账户。你至少需要为程序的每个区域创建至少一个测试账户。详细信息,请查看iTunes

Connect Developer Guide文档。

在Sandbox环境中测试步骤:1.

在测试的iPhone上退出iTunes账户Settings中可能会记录之前登录的账户,进入并退出。

重要信息:不能在Settings 程序中通过测试账户登录。

2. 运行程序当你在程序的store中购买商品后,Store kit提示你去验证交易。用测试账户登录,并批准支付。

这样虚拟的交易就完成了。

在Sandbox中验证收据验证的URL不同了:NSURL *sandboxStoreURL = [[NSURL

alloc]initWithString:@”https://sandbox.itunes.apple.com/verifyReceipt“];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值