ios内购php验证码,PHP (Laravel) 实现 iOS 内购服务端验证
/**
* @Author woann
* @param Request $request
* @return \Illuminate\Http\JsonResponse
* @des ios内购支付回调
*/
public function iosNotify(Request $request)
{
$this->validate(
$request,
[
'order_id' => 'required|digits_between:1,9|integer',
'apple_receipt' => 'required|min:20',
]
);
//苹果内购的验证收据
$receipt_data = $request->input('apple_receipt');
$order_id = $request->input('order_id');
$order = LevelOrder::find($order_id);
if (!$order || $order->state != 0) {
return returnApi(500,'订单状态异常');
}
$ios_sandBox = env('IOS_SANDBOX',true);//判断生产环境,开发环境
if(empty($receipt_data)){
return json(500, '参数不正确');
}
// 获取校验结果
$result=$this->validate_apple_pay($receipt_data,$ios_sandBox);
if (!$result || !is_array($result) || !isset($result['status'])) {
return returnApi(500,'获取数据失败,请重试');
}
//如果校验失败
if ($result['status'] != 0) {
return returnApi(500,'miss [apple_receipt]');
}
if ($result['status'] == 0) {
$transaction_ids = [];//用来收集需要关闭的transaction_id
//遍历未结束交易的列表(in_app)
foreach ($result['receipt']['in_app'] as $v){
$transaction_ids[] = $v['transaction_id'];//不管当前交易是否已经处理过,都要返回给客户端结束交易
$is_exist = DB::table('ios_transaction_id')->where('transaction_id', $v['transaction_id'])->first();
if ($is_exist) {
//如果已经处理过该订单 直接跳过
continue;
}
//否则在此处理业务逻辑
//...
//然后记录下此transaction_id标记为已处理过
DB::table('ios_transaction_id')->insert(['transaction_id' => $v['transaction_id']]);
}
//返回给客户端需要结束交易的transaction_id列表
return returnApi(200,'SUCCESS',['transaction_ids' => $transaction_ids]);
}
}
/**
* 验证AppStore内付
* @param string $receipt_data 付款后凭证
* @return array 验证是否成功
*/
protected function validate_apple_pay($receipt_data,$ios_sandBox)
{
/**
* 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环境的验证服务
*/
$POSTFIELDS = '{"receipt-data":"'. $receipt_data .'"}';
if($ios_sandBox){
// 请求验证
$data = httpRequest('https://sandbox.itunes.apple.com/verifyReceipt', $POSTFIELDS);
}else{
// 请求验证
$data = httpRequest('https://buy.itunes.apple.com/verifyReceipt', $POSTFIELDS);
}
return $data;
}
protected function httpRequest($url, $postData = array(), $json = true)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($postData) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
$info = curl_getinfo($ch);
$data = curl_exec($ch);
curl_close($ch);
if ($json) {
return json_decode($data, true);
} else {
return $data;
}
}
ios内购php验证码,PHP (Laravel) 实现 iOS 内购服务端验证相关推荐
- postman关闭ssl验证_【第5期】springboot:苹果内购服务端验证
苹果内购: 只要你在苹果系统购买APP中虚拟物品(虚拟货币,VIP充值等),必须通过内购方式进行支付,苹果和商家进行三七开 验证模式有两种: Validating Receipts With the ...
- Python Google内购服务端验证
Google内购完成后,服务端需要校验订单的状态是否正确(是否已经成功付款). 一.申请认证 参考https://developers.google.cn/android-publisher/gett ...
- ios 支付验证 php,PHP服务端验证APPLE支付的收据
使用服务器来交付内容,我们还需要做些额外的工作来验证从Store Kit发送的收据信息. 重要信息:来自Store的收据信息的格式是专用的. 你的程序不应直接解析这类数据.可使用如下的机制来取出其中的 ...
- 最新苹果服务器认证,iOS 苹果登录Sign in with Apple 和 服务端验证(nodejs 版)
Sign in with Apple 服务端要做的其实很简单 nodejs需要装三个东西 npm install node-rsa npm install axios npm install json ...
- ios 内购正式环境_php服务端处理 ios内购充值
app一直没有接入iOS内购充值,随着业务支付功能越来越多,ios内购充值就提到日程上来了.那么,ios内购充值怎么做呢? 其实iOS内购充值是通过客户端接入iOS的IAP模块(In-AppPurch ...
- PHP处理苹果APP内购后到服务端的二次验证(项目经验)
一.苹果APP支付到服务端验证流程 1. 用户在app中点击购买: 2. app调用服务端接口生成订单: 3. app获取到服务端订单生成成功后弹出支付窗口: 4. 用户输入密码支付: 5. app接 ...
- Unity 之 Mac App Store 内购过程解析(购买非消耗道具 | 恢复购买 | 支付验证)
Unity 之 Mac App Store 内购过程解析(恢复购买) 准备工作 一,具体实现 1.1 场景搭建 1.2 代码实现 1.3 打包设置 二,打包测试 2.1 实现步骤说明 2.2 Mac签 ...
- ios 自己服务器 苹果支付_苹果支付 PHP 服务端处理
因为上周末连续加班 2 天(产品非要周一上线新版本),因此断更公众号一段时间,今天继续补上. 之前有了微信和支付宝支付后,产品要加上苹果支付,于是有了这篇文章. 一.ios 端流程 itunnes 相 ...
- python内网穿透 开源_反向代理和内网穿透
概念 反向代理看上去看深奥,其实不然,只是因为汉语言文化的差异导致它看上去深奥.一般反派感觉都比较厉害和神秘. 要理解反向代理,我们就不得不说一下正向代理. 正向代理 (Forward Proxy) ...
最新文章
- 从生成对抗网络到更自动化的人工智能
- win7下80端口被(Pid=4)占用的解决方法
- 电容触摸屏GT911、GT928、GT9147的使用
- zend怎么保存php,Zend Framework页面缓存实例
- Asp.net生成工作流、审批流的解决方案(asp.net workflow svg)
- 计算机应用技术商务网站运营,计算机应用技术云计算与商务网站运营有什么区别...
- 探索Julia(part6)--基本命令与数学函数
- Codeforces Round #344 (Div. 2) B. Print Check
- 零基础自学html5要多久?Web前端学习路线的6点建议
- Spring MVC JSR-303验证框架之Hibernate-Validator
- 《腾讯iOS测试实践》一一1.8 小结
- Java中的random
- 唐宇迪pytorch课程全部代码数据集github
- 百度经纬度和google经纬度互转
- [BZOJ5064]B-number
- Spring源码解析之AOP篇(一)----代理模式详解
- 打卡国潮新风尚@东莞隐贤山庄#玩转主题乐园#
- Notelife for Mac(笔记管理工具)
- oppofindx3pro分辨率设置方法
- [每日一题]C语言:将输入的一句话的单词倒置,但标点符号不倒置
热门文章
- 目标检测YOLO实战应用案例100讲-基于深度学习目标检测的白细胞分类技术研究
- FileReader对象
- VSCode用户代码片段无提示
- MP4V2--如何使用 MP4SetTrackESConfiguration
- python 小海龟 教案_小班分享阅读教案《小海龟》
- HTML5+CSS3+JavaScript从入门到精通(标准版)
- 一张图理清楚profile,chirp,subframe和frame之间的关系
- 小米、OPPO、vivo的“枪手博弈”,小米会先出局?
- 使用java反编译查看java生成的exe文件的源码
- 2013年06月新萝卜家园Ghost xp3装机版v2013◆年中推荐◆