需求:公司开发了一个应用,接入了苹果支付(其实是AppStore内支付,因为是虚拟商品,所有不能直接接入app pay),客户端做好了,要PHP(我)对接支付回调接口,处理支付后的业务逻辑(修改订单状态,发送短信通知客户,修改用户购买的套餐)。

接入AppStore内支付,一波三折,因为之前没有做过这方面的开发。看文档也全部是英文的,看的很费劲,乘着这次我把用php的经历写出来,写的不好的地方,请大家多多指正批评。

下面是我的代码:

// 苹果支付验证 接口  //   // @param string $receipt 收到的数据  // @param boolean $isSandbox 是否是沙盒模式,true,false  function getreceiptdata(){  $receipt = $_REQUEST['strReceipt'];  $username = addslashes($_REQUEST['username']);//用户名  $tc = $_REQUEST['pid'];//套餐类型  $isSandbox = true;  //如果是沙盒模式,请求苹果测试服务器,反之,请求苹果正式的服务器  if ($isSandbox) {  $endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';  }  else {  $endpoint = 'https://buy.itunes.apple.com/verifyReceipt';  }  $postData = json_encode(  array('receipt-data' => $receipt)  );  $ch = curl_init($endpoint);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  curl_setopt($ch, CURLOPT_POST, true);  curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);  curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);  //这两行一定要加,不加会报SSL 错误  curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);  $response = curl_exec($ch);  $errno    = curl_errno($ch);  $errmsg   = curl_error($ch);  curl_close($ch);  $data = json_decode($response);  //判断时候出错,抛出异常  if ($errno != 0) {  //throw new \Exception($errmsg, $errno);  //$arr = array('status'=>'fail','code'=>'-3','msg'=>'判断时候出错,抛出异常');  //echo json_encode($arr);exit;  $xml = '<?xml version="1.0" encoding="utf-8"?>';  $xml .= '';  $xml .= "fail";  $xml .= "<code>3</code>";  $xml .= "判断时候出错,抛出异常";  $xml .= '';  echo $xml;exit;  }  //判断返回的数据是否是对象  if (!is_object($data)) {  //E('Invalid response data');//无效的响应数据  //$arr = array('status'=>'fail','code'=>'-2','msg'=>'无效的响应数据');  //echo json_encode($arr);exit;  $xml = '<?xml version="1.0" encoding="utf-8"?>';  $xml .= '';  $xml .= "fail";  $xml .= "<code>-2</code>";  $xml .= "无效的响应数据";  $xml .= '';  echo $xml;exit;  }  //判断购买时候成功  if (!isset($data->status) || $data->status != 0) {  //E('Invalid receipt');//无效的收据  //$arr = array('status'=>'fail','code'=>'-1','msg'=>'无效的收据');  //echo json_encode($arr);exit;  $xml = '<?xml version="1.0" encoding="utf-8"?>';  $xml .= '';  $xml .= "fail";  $xml .= "<code>-1</code>";  $xml .= "无效的收据";  $xml .= '';  echo $xml;exit;  }  $order = $data->receipt->in_app;//所有的订单的信息  $k = count($order) -1;  $need = $order[$k];//需要的那个订单  //下面进行业务处理了,根据用户购买的套餐,给他开通相应的套餐、时间  //新建一个订单,已支付状态,  //把购买的套餐的时间加到该账号  }

我这里的是客户端(ios)调用我的接口,客户端传用户名,套餐类型,还有苹果发送的数据过来。返回的是xml格式的数据,其实最好是用json返回给客户端,我这里是客户端要求返回xml,代码写的很烂。没有做其他的任何验证,如果你们自己验证的话,一定要验证全面一些。我只是把验证思路贴出来。

Status codes

Status Code Description
21000 The App Store could not read the JSON object you provided.
21002 The data in the receipt-data property was malformed or missing.
21003 The receipt could not be authenticated.
21004 The shared secret you provided does not match the shared secret on file for your account.
21005 The receipt server is not currently available.
21006 This receipt is valid but the subscription has expired. When this status code is returned to your server, the receipt data is also decoded and returned as part of the response.Only returned for iOS 6 style transaction receipts for auto-renewable subscriptions.
21007 This receipt is from the test environment, but it was sent to the production environment for verification. Send it to the test environment instead.
21008 This receipt is from the production environment, but it was sent to the test environment for verification. Send it to the production environment instead.
21010 This receipt could not be authorized. Treat this the same as if a purchase was never made.
21100-21199 Internal data access error.

php处理苹果支付接口回调相关推荐

  1. 关于支付接口回调地址参数字段是“notify_url”,签名过后的特殊字符url编码以后再解码后出现错误(¬ , ¢, ¤, £)

    今天对接支付接口,参数拼接完了,开始调用的时候,一直报错,签名错误. 但是我用第三方给的签名测试mode测试签名,返回的是true. 这就非常他娘的奇怪. 经过一个个参数对比,我发现,notify_u ...

  2. 支付宝电脑网站支付及回调

    官方文档:https://docs.open.alipay.com/270 支付 电脑网站支付的支付接口 alipay.trade.page.pay 调用时序图如下: 调用顺序如下: 商户系统请求支付 ...

  3. 苹果内购验证(熟称苹果支付回调)java版

    简介: 苹果支付是直接由ios客户端调起苹果支付并支付完成后,java后台提供一个支付回调接口供ios客户端进行同步回调,只需要在该接口进行进行验证苹果支付是否支付成功,跟微信支付和支付宝支付不一样, ...

  4. 微信回调接口java返回true_java 微信支付异步回调接口

    1.微信支付异步回调接口 @SuppressWarnings("static-access") @RequestMapping("callback") @Res ...

  5. Java 微信支付接口(统一下单,异步回调,订单退款,取消订单)

    一.准备工作 APP绑定微信商户平台获取商户id(mchID).证书(商户后台下载).支付签名密钥(商户后台设置api密钥).退款签名密钥(商户后台设置api密钥ipv3)等 1.导入微信支付SDK ...

  6. 微信支付接口(公众号支付)+微信支付回调函数 附代码

    前段时间做微信支付,微信浏览器填写金额商品名之后提交跳转付款页面确认然后返回界面判断,今天来详细说下 国际惯例先贴代码 mcontroller.java public void wxpay() {if ...

  7. 微信支付接口--支付成功的回调--超详细Demo

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 写微信支付成功回调的代码,尤其要注意官方文档的一句话: 如果不注意这里,支付成功后微信会一直对 ...

  8. 有PHP接口回调 个人收款好助手,谈一下关于个人网站实现免签支付接口自动收款...

    由于本人有一个项目需要用到支付收款功能,只有企业资质才能申请支付宝和微信支付接口,我也看了下市面上的 一些个人收款码的方案,来实现自动收款,感觉这样做有很大的风险,用个人码收款也会让人感觉项目网站不太 ...

  9. Python实战项目-10文件存储/支付宝支付/支付成功回调接口

    每天进步一点点,关注我哦,每天分享测试技术文章 文件存储 视频文件存储在某个位置,如果放在自己服务器上 放在项目的media文件夹 服务器上线后,用户既要访问接口,又需要看视频,都是使用一个域名和端口 ...

  10. php第三方支付接口视频,接入第三方支付及回调

    1. 老师介绍 CRMEB微擎项目负责人,CRMEB论坛超级版主,CRMEB开发群管理员. 2.课程简介 如何接入第三方支付,调试支付参数,支付回调接口,二次支付 根据教程目前已成功接入过 支付宝.付 ...

最新文章

  1. date日期相减 java_03时间日期类
  2. Pheatmap热图的绘制及如何调整图片
  3. 全国大学生智能车竞赛双车接力组芯片申请汇总
  4. hdu 5131 (2014广州现场赛 E题)
  5. 平衡二叉树Python解法
  6. 2011年5月18日早会资料
  7. Google的语音识别API,支持各种语言
  8. SpringBoot使用thymefeal出现No mapping for GET /xxx的解决办法
  9. wordpress数据表说明
  10. java 文件读取大全
  11. (保姆级)Oracle的下载及安装详细教程
  12. AppScan报错--发生内部错误
  13. vep文件如何转换mp4_vep文件如何转换mp4?vep转mp4的操作演示简单又小白
  14. 实验一:常用网络命令操作
  15. App消息推送的原理
  16. javascript 3d 逐侦产品展示
  17. rnn 循环神经网络
  18. 使用 maven-semantic-release 实现自动化发版
  19. jdk8函数式接口——Consumer介绍
  20. WPS 合并一个工作簿中多个工作表

热门文章

  1. Proxmox VE 多机系统备份
  2. RNN(pytorch)的维度问题——用GRU实现文本分类(参考刘二大人)
  3. Python 下载哔哩哔哩视频
  4. 一网打尽“小黄图”!手把手教你造一只AI鉴黄神器(内附代码及数据集)
  5. asp.net图书馆管理系统案例
  6. dub的sdl配置文件中文帮助
  7. python游戏书籍推荐_有什么好的自学 Python 的书籍推荐?
  8. 【NOIP模拟】夕阳
  9. WORD出现VBE6EXT.OLD不能被加载的问题
  10. 【Android Jetpack】彻底弄清Navigation的BackStack如何变化