苹7php按响声,ios 苹果内购订单验证 --- php实现

这段代码展示了如何验证Apple App Store的支付凭证,并处理不同错误状态。它首先根据环境选择验证URL,然后通过Curl发送请求。如果收到错误21005,会尝试重新验证最多3次。成功时,提取购买日期并根据订单ID查找具体购买时间。
摘要由CSDN通过智能技术生成

function appleVerify($receipt_data,$orderId = 0)

{/** 21000 App Store不能读取你提供的JSON对象

* 21002 receipt-data域的数据有问题

* 21003 receipt无法通过验证

* 21004 提供的shared secret不匹配你账号中的shared secret

* 21005 receipt服务器当前不可用

* 21006 receipt合法,但是订阅已过期。服务器接收到这个状态码时,receipt数据仍然会解码并一起发送

* 21007 receipt是Sandbox receipt,但却发送至生产系统的验证服务

* 21008 receipt是生产receipt,但却发送至Sandbox环境的验证服务

* $receipt_data 苹果返回的支付凭证

* 正式 : https://buy.itunes.apple.com/verifyReceipt

* 沙箱 : https://sandbox.itunes.apple.com/verifyReceipt*/

$env = App::environment();if($env == 'online'){

//线上环境$url = 'https://buy.itunes.apple.com/verifyReceipt';

}else{

//沙盒环境$url = 'https://sandbox.itunes.apple.com/verifyReceipt';

}$num = 0;while (1){$num ++;$response = Curl::to($url)->withData(array('receipt-data' => $receipt_data))->asJson(true)->post();if($response['status'] != 21005 || $num >= 3){break;

}

}//$response = json_decode($response,true);

// $data['status']==0 成功

// $data['receipt']['in_app'][0]['transaction_id'] 苹果订单号

// $data['receipt']['in_app'][0]['product_id']; 商品价格

// $data['receipt']['in_app'][0]['purchase_date_ms']

$status = 0;$purchaseTime = 0;if ($response['status'] == 0) {$status = 1;try{$inapps = $response['receipt']['in_app'];$purchaseTime = $inapps[0]['purchase_date_ms'];if(!empty($orderId)){foreach ($inapps as $item){if($orderId == $item['transaction_id']){$purchaseTime = $item['purchase_date_ms'];break;

}

}

}

}catch (Exception $e){return ['status'=>0,'purcaseTime' => 0];

}

}return ['status'=>$status,'purcaseTime' => $purchaseTime];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值