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

相关文章

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

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot3.X 整合 MinIO 存储原生方案

《SpringBoot3.X整合MinIO存储原生方案》本文详细介绍了SpringBoot3.X整合MinIO的原生方案,从环境搭建到核心功能实现,涵盖了文件上传、下载、删除等常用操作,并补充了... 目录SpringBoot3.X整合MinIO存储原生方案:从环境搭建到实战开发一、前言:为什么选择MinI

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

springboot整合TDengine全过程

《springboot整合TDengine全过程》:本文主要介绍springboot整合TDengine全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境准备JDBC-JNI方式准备依赖实体类Mapper配置类测试类RESTful方式实体类配置类测试类总结