- /**
- * 验证AppStore内付
- * @param string $receipt_data 付款后凭证
- * @return array 验证是否成功
- */
- function validate_apple_pay($receipt_data){
- /**
- * 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环境的验证服务
- */
- function acurl($receipt_data, $sandbox=0){
- //小票信息
- $POSTFIELDS = array("receipt-data" => $receipt_data);
- $POSTFIELDS = json_encode($POSTFIELDS);
- //正式购买地址 沙盒购买地址
- $url_buy = "https://buy.itunes.apple.com/verifyReceipt";
- $url_sandbox = "https://sandbox.itunes.apple.com/verifyReceipt";
- $url = $sandbox ? $url_sandbox : $url_buy;
- //简单的curl
- $ch = curl_init($url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $POSTFIELDS);
- $result = curl_exec($ch);
- curl_close($ch);
- return $result;
- }
- // 验证参数
- if (strlen($receipt_data)<20){
- $result=array(
- 'status'=>false,
- 'message'=>'非法参数'
- );
- return $result;
- }
- // 请求验证
- $html = acurl($receipt_data);
- $data = json_decode($html,true);
- // 如果是沙盒数据 则验证沙盒模式
- if($data['status']=='21007'){
- // 请求验证
- $html = acurl($receipt_data, 1);
- $data = json_decode($html,true);
- $data['sandbox'] = '1';
- }
- if (isset($_GET['debug'])) {
- exit(json_encode($data));
- }
- // 判断是否购买成功
- if(intval($data['status'])===0){
- $result=array(
- 'status'=>true,
- 'message'=>'购买成功'
- );
- }else{
- $result=array(
- 'status'=>false,
- 'message'=>'购买失败 status:'.$data['status']
- );
- }
- return $result;
- }
- 使用方法也非常简单; 就是把IOS发过来的支付凭证作为参数传入validate_apple_pay()函数即可; 但是既然挂上了thinkphp整合; 那就给个示例吧; /Application/Api/Controller/AppstoreController.class.php
- <?php
- namespace Api\\Controller;
- use Common\\Controller\\HomeBaseController;
- /**
- * paypal支付
- */
- class AppstoreController extends HomeBaseController{
- // 支付回调
- public function result(){
- //苹果内购的验证收据
- $receipt_data = I('post.apple_receipt');
- // 验证支付状态
- $result=validate_apple_pay($receipt_data);
- if($result['status']){
- // 验证通过 此处可以是修改数据库订单状态等操作
- }else{
- // 验证不通过
- }
- }
- }
php 苹果内购支付
最新推荐文章于 2024-10-01 10:00:00 发布