苹果支付 php,【苹果支付二】apple pay苹果支付以及自动续订订阅开发 - Laravel学习网...

我就是我 2023-01-15 03:54 800阅读 0赞

一、APP端获取数据

1、订阅后APP端会获取到如下信息:

{

“payment”: {

“productid”: “1”,

“quantity”: “1”

},

“transactionDate”: “2020-07-04 10:06:42”,

“transactionIdentifier”: “100000…”,

“transactionReceipt”: “ewoJInNpZ25hdHVyZSIgPSA…”,

“transactionState”: “1”,

“errMsg”: “requestPayment:ok”

}

2、沙盒续期时间是缩短了的,并且会在5次续订(一共6条收据)后自动取消

format,png

二、验证收据(调用apple server的接口)

1.普通购买收据验证

验收接口如下:

沙盒:https://sandbox.itunes.apple.com/verifyReceipt

生产环境:https://buy.itunes.apple.com/verifyReceipt

参数如下,transactionReceipt为返回的凭证:

{

“receipt-data” : transactionReceipt

}

注意:这里是POST推送json参数,以Laravel使用guzzle 发送请求为例:

use GuzzleHttp\Client;

···

$client = new Client();

$transactionReceipt = “ewoJInNpZ25hd…”;

$response = $client->request(‘POST’, ‘https://sandbox.itunes.apple.com/verifyReceipt‘, [‘json’ => [“receipt-data”=>$transactionReceipt]]);

$body = json_decode($response->getBody());

dd($body);

2、自动续费收据验证

自动订阅的收据验证接口和其他IAP一样,只是需要加入password参数:

{

“receipt-data”: “(actual receipt bytes here)”,

“password”: “(shared secret bytes here)”

}

Laravel PHP调用如需啊

$client = new Client();

$transactionReceipt = “ewoJInNpZ25hd…”;

$response = $client->request(‘POST’, ‘https://sandbox.itunes.apple.com/verifyReceipt‘, [‘json’ => [“receipt-data”=>$transactionReceipt,,”password”=>”2d745…”]]);

$body = json_decode($response->getBody());

dd($body);

password是在App Store connect上创建的秘钥

format,png

三、返回数据说明

a、auto_renew_status: 订阅自动续订状态

1:-订阅将在当前订阅期结束时续订。

0:-客户已关闭其订阅的自动续订。

b、status: 状态码

一般票据会有3种情况:

0:刚付费,有效状态

21006:时间到了,没有续费

0:时间到了后,又续费了,返回的为0,即使是之前返回21006 的老凭据,只要续费后也返回0。

c、auto_renew_product_id: 在Apple App Store中标识产品的字符串。即产品ID

d、expires_date: 订阅的过期时间

e、original_transaction_id: 初次购买的交易标识。所有订阅的更新和恢复交易都共享这个标识。

f、original_purchase_date: 初次购买(订阅)的日期。

g、purchase_date: 交易的日期。对于更新订阅的交易来说,这个日期表示更新日期。如果从App Store解析的数据是最新的订阅收据,这个值表示最近更新订阅的日期。

h、latest_receipt:新的收据,即每次用户续订后返回新的latest_receipt凭证,

注意:必须使用新的凭证才能查询新的续约信息,如果无新的续费信息则latest_receipt值不会改变。可以对比latest_receipt值判断是否有新的续费信息。

i、receipt、latest_expired_receipt_info、latest_receipt_info:返回数据,三个返回的数据类型是一样的、优先使用receipt,使用老的收据返回latest_receipt_info,使用新的收据则返回latest_expired_receipt_info。

四、App Store状态回调

在APPStore输入用于接收App Store服务器通知的网址(URL)

5f48c223e96844b9c2df1a74df77869e.png

配置此url后,apple会在以下状态时调用配置的接口。

30a206ad6d56d1edf894de8117587d63.png

CANCEL:取消了订阅

DID_CHANGE_RENEWAL_PREF:取消了订阅,在sandbox测试时,6次收据之后,就会变成这个状态

DID_CHANGE_RENEWAL_STATUS:是各种状态改变下都会调用,比如说首次购买会收到两次回调,一个是INITIAL_BUY一个是DID_CHANGE_RENEWAL_STATUS

DID_FAIL_TO_RENEW:由于结算问题,订阅无法续订

DID_RECOVER:App Store通过计费重试恢复了已过期的订阅

INITIAL_BUY:首次订阅成功

INTERACTIVE_RENEWAL:恢复了订阅,在sandbox测试时,6次收据之后,重新订阅,就会是这个状态

RENEWAL:恢复了订阅

REFUND:AppleCare成功退还了有关消耗性,非消耗性或非续订订阅的交易

【苹果支付二】apple pay苹果支付以及自动续订订阅开发 - Laravel学习网

原文出处: https://phpartisan.cn/news/139.html

问题交流群 :168117787

发表评论

表情:
评论列表 (有 0 条评论,800人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php开发支付支付

    前言 前端时间自己开发了一个drupal的支付宝模块,现在整理一下过程,因为支付宝官方网站提供的接口及文档都是新接口的,而且使用新接口的过程比较麻烦一点,所以整理一下