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




相关文章
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
4天前
|
PHP 开发者
PHP作为一门流行的服务器端脚本语言,深入理解PHP的命名空间
【10月更文挑战第22天】PHP作为一门流行的服务器端脚本语言,自1995年诞生以来,已经发展了二十多年。在这二十多年的时间里,PHP经历了多次重大版本的更新,不断增加新特性和改进。其中,命名空间(Namespace)是PHP 5.3.0引入的一个重要特性,它为PHP的代码组织和重用提供了一种新的方式。本文将从三个部分深入理解PHP的命名空间:一是命名空间的基本概念和作用;二是PHP命名空间的使用方法;三是通过实例讲解命名空间的应用。
10 4
|
25天前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
39 3
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
3月前
|
关系型数据库 MySQL PHP
PHP:一种强大的服务器端脚本语言
【8月更文挑战第23天】PHP是一种被广泛使用的开源服务器端脚本语言,它的强大和灵活性使其成为开发Web应用程序的首选。本文将从PHP的基本概念、主要特性以及应用场景等方面进行深入探讨,以期帮助读者更好地理解和掌握PHP。
|
3月前
|
Oracle 关系型数据库 MySQL
PHP:一种灵活而强大的服务器端脚本语言
【8月更文挑战第22天】PHP是一种广泛使用的开源通用脚本语言,尤其适用于Web开发。它快速、灵活且易于学习,使其成为开发者的首选。本文将探讨PHP的基本概念、优点以及如何开始学习PHP。让我们一起了解这个强大的工具,开启编程之旅吧!
|
2月前
|
消息中间件 NoSQL Go
PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
【9月更文挑战第7天】在从 PHP 的 ThinkPHP 框架迁移到 Go 的 Gin 框架时,涉及 Redis 延时消息队列的技术实践主要包括:理解延时消息队列概念,其能在特定时间处理消息,适用于定时任务等场景;在 ThinkPHP 中使用 Redis 实现延时队列;在 Gin 中结合 Go 的 Redis 客户端库实现类似功能;Go 具有更高性能和简洁性,适合处理大量消息。迁移过程中需考虑业务需求及系统稳定性。
|
3月前
|
安全 Java 云计算
JSF 应用究竟何去何从?云端部署能否成为其全新突破点?快来一探究竟!
【8月更文挑战第31天】本文介绍了将JavaServer Faces(JSF)应用部署到云平台的过程。首先,根据成本、功能、可靠性和安全性选择合适的云平台。接着,展示了构建简单JSF应用的示例代码。最后,以AWS Elastic Beanstalk为例,详细说明了部署流程。部署至云端可提升应用的可用性、扩展性和安全性。
43 0
|
3月前
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
|
移动开发 PHP 开发者
PayPal网站付款标准版(for PHP)
原文:PayPal网站付款标准版(for PHP) 简单整理一下PHP项目整合PayPal支付功能。 一、表单的构建: 二、IPN验证部分 即时付款通知(IPN)示意图如下:   1) 客户点击“付款”按钮向您的账户付...
1214 0