Table of Contents
1. (Encapsulated credential acquisition structure class, the tp framework is used here , it is also very convenient to modify other frameworks here. If you don’t understand, you can leave me a message)
2. Because the product design of the company involves financial issues, it is best to be cautious, so before The written token and signature verification are now in effect. If you need to know about the implementation of signature verification and token, you can take a look here.
Then I will also assign my calling method below, because it is used on tp. If you need to use other frameworks or native ones, you can leave me a message to help modify it. I will attach my calling code below:
Home Backend Development PHP Tutorial PHP implements the verification example code of apple API in-app purchase voucher

PHP implements the verification example code of apple API in-app purchase voucher

Mar 06, 2018 pm 01:24 PM
api apple php


The following is the server-side verification of AppStore in-app purchases. The payment process in the app is completed by the IOS programmer. After the payment is completed, the front-end will obtain the corresponding payment. Voucher, then it is necessary to verify whether the payment was actually made based on the voucher, and then complete the business logic of subsequent product functions. As for verification, there are two types: one is to verify by the front end itself, and the other is to verify through the back end. It can be imagined that most of them will be verified through the backend, so the real sword is shown below:

1. (Encapsulated credential acquisition structure class, the tp framework is used here , it is also very convenient to modify other frameworks here. If you don’t understand, you can leave me a message)
/**
 * 苹果内购Api查询接口
 * Class AppleAipController
 * @package Pay\Controller
 */class  AppleAipController extends  Controller{

    /**
     * @var string
     */
    private $sandboxCurl = "https://sandbox.itunes.apple.com/verifyReceipt";    private $formalityCurl = "https://buy.itunes.apple.com/verifyReceipt";    /**
     * @return array
     */
    public function send($encodeStr,$sandboxStatus=0)
    {
        $ch = curl_init();        $data['receipt-data'] =$encodeStr;        $encodeStr =  json_encode($data);        $url = $sandboxStatus?($this->formalityCurl):($this->sandboxCurl);
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        // post数据
        curl_setopt($ch, CURLOPT_POST, 0);        // post的变量
        curl_setopt($ch, CURLOPT_POSTFIELDS, $encodeStr);
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);        $output = curl_exec($ch);
        curl_close($ch);        $resut = (Array)json_decode($output,true);        return $resut;
    }
}
Copy after login
2. Because the product design of the company involves financial issues, it is best to be cautious, so before The written token and signature verification are now in effect. If you need to know about the implementation of signature verification and token, you can take a look here.

Please click on the signature verification article, and please click on the token article

Then I will also assign my calling method below, because it is used on tp. If you need to use other frameworks or native ones, you can leave me a message to help modify it. I will attach my calling code below:
<?php/**
 * Created by PhpStorm.
 * User: wyb
 * Date: 2017/8/14
 * Time: 9:57
 */namespace xxxxxxxx;use Common\Tools\Attestation;use Pay\Controller\AppleAipController;use Think\Controller;/**
 * product苹果API内购验证
 * Class CoinApiPayController
 */class  ProductPayController extends  Controller{
    protected $response = [&#39;result&#39; => true, &#39;code&#39; => 10000, &#39;msg&#39; => &#39;&#39;, &#39;AData&#39; => [], &#39;OData&#39; => NULL];    /**
     * 来源数组
     * @var array
     */
    private $targetArray = [&#39;a_sysj&#39;, &#39;i_sysj&#39;, &#39;a_lpds&#39;, &#39;i_lpds&#39;,&#39;a_jjds&#39;,&#39;i_jjds&#39;];    private $testMember =[&#39;9232313&#39;];//定好你们内部测试,人员,若人员比较多的化就做成后台管理的从数据库中取出



    /**
     * @name 检验凭证并分发后续业务的逻辑
     */
    public function credentialsCheckAction()
    {
        IS_POST ||$this->returnError();//判断是否是POST
        $parameters =I(&#39;post.&#39;);//这里最好的相应的参数进行验证,并且使用验签校验,这里我就省略了这部分,还有下面部分最好也放在你封装或者放在你相应的模型内

         $AppleAipController = new  AppleAipController();         $sandboxStatus = in_array($parameters[&#39;member_id&#39;],$thi->testMember)?1:0;         $checkData = $AppleAipController->send($parameters[&#39;encodeStr&#39;],$sandboxStatus);        if($checkData[&#39;status&#39;]==0){            //校验订单号
            if($checkData[&#39;receipt&#39;][&#39;transaction_id&#39;]!=$parameters[&#39;trade_id&#39;]) {                $this->returnErrorData(&#39;20012&#39;, &#39;检验错误【01】&#39;, &#39;21003&#39;);
            }            $productId = &#39;com.ifeimo.&#39;.$orderInfo[&#39;product_id&#39;];            //校验商品ID
            if($checkData[&#39;receipt&#39;][&#39;product_id&#39;] != $productId){                $this->returnErrorData(&#39;20012&#39;, &#39;检验错误【02】&#39;, &#39;21003&#39;);
            }            //校验价格
            $checkPrice = intval(str_replace(&#39;cxzxxxx_&#39;, &#39;&#39;, $checkData[&#39;receipt&#39;][&#39;product_id&#39;]));            if($checkPrice!=$orderInfo[&#39;price&#39;]){                $this->returnErrorData(&#39;20012&#39;, &#39;检验错误【03】&#39;, &#39;21003&#39;);
            }            $result = self::notifyAdd($orderInfo);            $this->response[&#39;msg&#39;]  = &#39;支付成功&#39;;            $status = $checkData[&#39;status&#39;];
        }else{            $status = $checkData[&#39;status&#39;];            $this->response[&#39;status&#39;] = $status;            $this->response[&#39;result&#39;] = false;            $this->response[&#39;msg&#39;]  = &#39;待支付&#39;;
        }        $this->response[&#39;order&#39;] = $orderInfo;        $this->response[&#39;encodeStatus&#39;] = $status;        $this->ajaxReturn($this->response);//返回数据给前端


    }    /**
     * 整合异步发放
     * @param $order
     * @param $time
     * @return int
     */
    private function notifyAdd($order)
    {
     //这里写你相应的分发业务

    }    /**
     * 错误返回
     * @param string $msg 错误提示信息,默认‘请求处理失败’
     */
    private function returnErrorData($code = &#39;20000&#39;, $msg = &#39;请求处理失败&#39;,$status=&#39;21003&#39;){
        $this->response[&#39;result&#39;] = false;        $this->response[&#39;status&#39;] = $status;        $this->response[&#39;code&#39;] = $code;        $this->response[&#39;msg&#39;] = $msg;        $this->ajaxReturn($this->response);
    }


}
Copy after login

Because it may include the writing method of tp, if you need assistance in splitting, you can join my group through my blog, and I can help solve the problem.

Related recommendations:

PHP’s sharing of API interface examples

php’s api data interface writing examples

PHP Alipay Development Service Window API

The above is the detailed content of PHP implements the verification example code of apple API in-app purchase voucher. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles