thinkphp整合系列之苹果AppStore内购付款的服务器端php验证

简介: 这里要讲的就是AppStore内购的服务器端验证;在app中支付的过程那是由IOS程序猿完成的;IOS会把支付凭证发给我们;作为服务器端;我等php需要做的就是对支付结果的验证;thinkp...

这里要讲的就是AppStore内购的服务器端验证;在app中支付的过程那是由IOS程序猿完成的;IOS会把支付凭证发给我们;作为服务器端;我等php需要做的就是对支付结果的验证;thinkphp整合系列之苹果AppStore内购付款的服务器端php验证


演示地址做出来拉,大家可以参考这里苹果AppStore内购付款的服务器端php验证_二当家的

thinkphp整合系列之苹果AppStore内购付款的服务器端php验证

这里要讲的就是AppStore内购的服务器端验证; 在app中支付的过程那是由IOS程序猿完成的; IOS会把支付凭证发给我们; 作为服务器端; 我等php需要做的就是对支付结果的验证; 写着是thinkphp整合系列; 其实脱离thinkphp别的框架也能很便利的使用; 因为我是给写成函数了的; 老规矩;代码函数在如下目录: /Application/Common/Common/function.php

/** 
 * 验证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{ 
            // 验证不通过 
        } 
    } 
 
}




相关文章
|
8天前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
25 3
|
15天前
|
自然语言处理 编译器 应用服务中间件
PHP在服务器上的运行过程
PHP在服务器上的运行过程
34 7
|
13天前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
36 3
|
28天前
|
PHP 开发者
PHP作为一门流行的服务器端脚本语言,深入理解PHP的命名空间
【10月更文挑战第22天】PHP作为一门流行的服务器端脚本语言,自1995年诞生以来,已经发展了二十多年。在这二十多年的时间里,PHP经历了多次重大版本的更新,不断增加新特性和改进。其中,命名空间(Namespace)是PHP 5.3.0引入的一个重要特性,它为PHP的代码组织和重用提供了一种新的方式。本文将从三个部分深入理解PHP的命名空间:一是命名空间的基本概念和作用;二是PHP命名空间的使用方法;三是通过实例讲解命名空间的应用。
26 4
|
1月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
47 3
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
2月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
8天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
13天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
15天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
下一篇
无影云桌面