IOS苹果AppStore内购付款的服务器端php验证方法(使用thinkphp)
发布:smiling 来源: PHP粉丝网 添加日期:2023-06-23 11:51:40 浏览: 评论:0
这篇文章主要介绍了IOS苹果AppStore内购付款的服务器端php验证方法(使用thinkphp)。AppStore内购在app中支付的过程那是由前端IOS程序猿完成的;
IOS会把支付凭证发给后端服务器;使用php需要做的就是对支付结果的验证;这篇文章使用thinkphp整合,其实脱离thinkphp别的框架也能很便利的使用。
- /**
- * 验证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()函数即可。
- <?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{
- // 验证不通过
- }
- }
- }
Tags: AppStore内购付款php验证方法
- 上一篇:详解php命令行写shell实例
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)