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

本文主要是介绍thinkphp整合系列之苹果AppStore内购付款的服务器端php验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里要讲的就是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{ // 验证不通过 } } }




这篇关于thinkphp整合系列之苹果AppStore内购付款的服务器端php验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106089

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

springboot整合mqtt的步骤示例详解

《springboot整合mqtt的步骤示例详解》MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信,本文介绍Sprin... 目录1、引入依赖包2、yml配置3、创建配置4、自定义注解6、使用示例使用场景:mqtt可用于消息发

SpringBoot整合Dubbo+ZK注册失败的坑及解决

《SpringBoot整合Dubbo+ZK注册失败的坑及解决》使用Dubbo框架时,需在公共pom添加依赖,启动类加@EnableDubbo,实现类用@DubboService替代@Service,配... 目录1.先看下公共的pom(maven创建的pom工程)2.启动类上加@EnableDubbo3.实

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

SpringSecurity整合redission序列化问题小结(最新整理)

《SpringSecurity整合redission序列化问题小结(最新整理)》文章详解SpringSecurity整合Redisson时的序列化问题,指出需排除官方Jackson依赖,通过自定义反序... 目录1. 前言2. Redission配置2.1 RedissonProperties2.2 Red