


PHP implements the verification example code of apple API in-app purchase voucher
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; } }
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 = ['result' => true, 'code' => 10000, 'msg' => '', 'AData' => [], 'OData' => NULL]; /** * 来源数组 * @var array */ private $targetArray = ['a_sysj', 'i_sysj', 'a_lpds', 'i_lpds','a_jjds','i_jjds']; private $testMember =['9232313'];//定好你们内部测试,人员,若人员比较多的化就做成后台管理的从数据库中取出 /** * @name 检验凭证并分发后续业务的逻辑 */ public function credentialsCheckAction() { IS_POST ||$this->returnError();//判断是否是POST $parameters =I('post.');//这里最好的相应的参数进行验证,并且使用验签校验,这里我就省略了这部分,还有下面部分最好也放在你封装或者放在你相应的模型内 $AppleAipController = new AppleAipController(); $sandboxStatus = in_array($parameters['member_id'],$thi->testMember)?1:0; $checkData = $AppleAipController->send($parameters['encodeStr'],$sandboxStatus); if($checkData['status']==0){ //校验订单号 if($checkData['receipt']['transaction_id']!=$parameters['trade_id']) { $this->returnErrorData('20012', '检验错误【01】', '21003'); } $productId = 'com.ifeimo.'.$orderInfo['product_id']; //校验商品ID if($checkData['receipt']['product_id'] != $productId){ $this->returnErrorData('20012', '检验错误【02】', '21003'); } //校验价格 $checkPrice = intval(str_replace('cxzxxxx_', '', $checkData['receipt']['product_id'])); if($checkPrice!=$orderInfo['price']){ $this->returnErrorData('20012', '检验错误【03】', '21003'); } $result = self::notifyAdd($orderInfo); $this->response['msg'] = '支付成功'; $status = $checkData['status']; }else{ $status = $checkData['status']; $this->response['status'] = $status; $this->response['result'] = false; $this->response['msg'] = '待支付'; } $this->response['order'] = $orderInfo; $this->response['encodeStatus'] = $status; $this->ajaxReturn($this->response);//返回数据给前端 } /** * 整合异步发放 * @param $order * @param $time * @return int */ private function notifyAdd($order) { //这里写你相应的分发业务 } /** * 错误返回 * @param string $msg 错误提示信息,默认‘请求处理失败’ */ private function returnErrorData($code = '20000', $msg = '请求处理失败',$status='21003'){ $this->response['result'] = false; $this->response['status'] = $status; $this->response['code'] = $code; $this->response['msg'] = $msg; $this->ajaxReturn($this->response); } }
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!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

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

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

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

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,

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

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

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 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.
