0

0

php实现apple API内购凭证的验证实例代码

小云云

小云云

发布时间:2018-03-06 13:24:48

|

2874人浏览过

|

来源于php中文网

原创


下面要讲的就是appstore内购的服务器端验证,在app中支付的过程那是由ios程序猿完成的,完成支付后前端会获取到相应的支付凭证,那么就需要根据凭证来检验是否真实支付了,进而来完成后续产品的功能的业务逻辑,而校验呢,有两种一种是前端自己去校验,一种是通过后端来校验,可想而知了大部分都会是通过后端来校验了,那么下面就亮出真宝剑:

一、(封装好的获取凭证结构类,这里用的是tp框架,这边若是其他框架修改也很方便,若有不懂可以给我留言)
/**
 * 苹果内购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;
    }
}
二、因为公司做的产品设计到资金问题的,所以最好需要谨慎点咯,所以之前写的token,和验签就器到作用了,如果需要了解验签和token的实现可以往这里看看哦,

验签文章请点击,token文章请点击

那么下面我也赋上我的调用方法,因为是在tp上使用,若需要使用到其他框架或者原生这边可给我留言协助修改,下面我附上我调用的代码:
 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);
    }


}

因为可能包含了tp的写法,若需要协助拆分的可以通过我的博客加入我的群,我这边可协助解决。

相关推荐:

PHP关于API接口实例分享

Replit Agent
Replit Agent

Replit最新推出的AI编程工具,可以帮助用户从零开始自动构建应用程序。

下载

立即学习PHP免费学习笔记(深入)”;

php的api数据接口书写实例

PHP支付宝开发之服务窗API

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

65

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

121

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

33

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

47

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7.8万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号