什么情况导致苹果ios 内购 2100221002问题

内购出现21002是怎么回事求大神帮忙【泽诺尼亚5吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:21,477贴子:
内购出现21002是怎么回事求大神帮忙
有和我一样的吗,求大神解答内购方法
贴吧热议榜
使用签名档&&
保存至快速回贴thinkphp之苹果AppStore内购付款的服务器端php验证 - ThinkPHP框架
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_
&&&&&&&&//简单的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&$
&&&&//&验证参数
&&&&if&(strlen($receipt_data)&20){
&&&&&&&&$result=array(
&&&&&&&&&&&&'status'=&false,
&&&&&&&&&&&&'message'=&'非法参数'
&&&&&&&&&&&&);
&&&&&&&&return&$
&&&&//&请求验证
&&&&$html&=&acurl($receipt_data);
&&&&$data&=&json_decode($html,true);
&&&&//&如果是沙盒数据&则验证沙盒模式
&&&&if($data['status']=='2;){
&&&&&&&&//&请求验证
&&&&&&&&$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&$
}使用方法也非常简单;
就是把IOS发过来的支付凭证作为参数传入validate_apple_pay()函数即可;
但是既然挂上了thinkphp整合;
那就给个示例吧;
/Application/Api/Controller/AppstoreController.class.php&?php
namespace&Api\C
use&Common\Controller\HomeBaseC
&*&paypal支付
class&AppstoreController&extends&HomeBaseController{
&&&&//&支付回调
&&&&public&function&result(){
&&&&&&&&//苹果内购的验证收据
&&&&&&&&$receipt_data&=&I('post.apple_receipt');&
&&&&&&&&//&验证支付状态
&&&&&&&&$result=validate_apple_pay($receipt_data);
&&&&&&&&if($result['status']){
&&&&&&&&&&&&//&验证通过&此处可以是修改数据库订单状态等操作
&&&&&&&&&&&&
&&&&&&&&}else{
&&&&&&&&&&&&//&验证不通过
本文为白俊遥原创文章, 转载无需和我联系, 但请注明来自白俊遥博客
积分:4348
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)15:07 提问
苹果内购,凭证验证,服务器二次验证返回一直是 21002
按赞数排序
估计是访问超时了,需要验证
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 苹果内购开发 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信