首页 > 其他分享 >苹果支付对接

苹果支付对接

时间:2024-10-29 17:02:25浏览次数:3  
标签:凭证 receipt 对接 校验 苹果 支付 data order recharge

步骤如下:

1.上架产品
首先需要在苹果网站上架对应的app产品,有对应的id和价格,名称等数据
2.前端拉起商品列表
用户登录app后,进入商品购买页面,前端拉起app在苹果网站上的商品列表信息
3.下单
用户点击'购买'操作,发送给服务端一条当前商品信息,服务端保存该商品的相关订单数据,并返回给前端一个内部业务订单号order_id
4. 购买
用户接收到服务端返回的内部订单号后发起苹果支付,支付完成后苹果会返回一个购买凭证信息,{"receipt-data" : "MIIT9wYJKoSL2JSDFsd……"},大概有8000+的长度,发送到客户端
5.发送凭证信息给服务器
前端拿到苹果返回的购买凭证信息后,将购买凭证、内部业务订单号order_id等信息传至服务端进行购买校验
6. 购买凭证校验以及后续业务逻辑处理
服务端向苹果发送校验购买凭证的请求,根据返回的结果,进行业务处理(改变订单状态等操作),最后返回校验结果给前端
校验结果状态码如下:
0 正常
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环境的验证服务
7.返回客户端
前端拿到服务端返回的结果,视结果处理商品,比如: 返回校验成功的结果,前端需向苹果发送一条修改对应产品支付状态的消息,这样才能进行金额的结算操作
8.客服端代码

    /**
     * 苹果手机支付回调处理: 用于处理商家订单状态等逻辑操作
     */
    public static function pay($params): bool
    {

               //$input_data = '{"buddleId":"recharge_01","receiptData":"MIIULgYJKoZIhvcNAQcCoIIUHzCCFBsCAQExC...bV3L15A JAbVFEk7CLOJ7 oQr8WqvpIGu8v5rUkzEzXglAPwkg9BQZdfsew==","transactionId":"10423434320297269213"}';

        $recharge_order = (new RechargeOrder())::withoutGlobalScope()->where('order_no','=',$params['order_no'])->find();
        if(!$recharge_order){
            throw new Exception('支付的订单号不存在:'.$params['order_no']);
        }
        //获取购买凭证
        if (strlen($params['receipt_data']) < 20) {
            Log::info('购买凭证长度错误');
            throwError('购买凭证长度错误');
        }
        try {
            //验证购买凭证
            $url = env('APPLE_PAY.is_sandbox') ? env('APPLE_PAY.url_sandbox') : env('APPLE_PAY.url_buy'); //获取验证请求地址
            //todo 注意:返回的购买凭证里面如果有空格,把空格转换成+,不然校验不通过
            $receiptDate = str_replace(" ", "+", $params['receipt_data']);
            //拼接校验信息
            $data = [
                "receipt-data" => $receiptDate
            ];
            //转换成json字符串格式
            $data = json_encode($data,JSON_UNESCAPED_UNICODE);
            //发送验证请求
            $result = curl_post_https($url, $data);
            if (!$result) {
                throw new Exception('验证失败');
            }
            $result = json_decode($result, true);
            if ($result['status'] != ApplePayCode::SUCCESS) {
                throw new Exception("验证失败,订单购买凭证状态为" . $result['status']);
            }


            //支付时间
            $paid_at = $result['receipt']['in_app']['purchase_date'];
            //开始更新订单信息
            $recharge_order->transaction_id = $params['transaction_id'];
            $recharge_order->pay_status = PayStatus::SUCCESS;
            $recharge_order->pay_time = gmt_to_date($paid_at);
            $recharge_order->save();
            $res = (new OrderPay())->success($recharge_order);
            if(!$res){
                throw new Exception('支付处理方法失败');
            }
            return true;
        } catch (\Exception $e) {
            Log::info('苹果支付处理失败===='.$e->getMessage());
            throwError('苹果支付处理失败'.$e->getMessage());
        }
    }

  


  

标签:凭证,receipt,对接,校验,苹果,支付,data,order,recharge
From: https://www.cnblogs.com/wujf-myblog/p/18513891

相关文章

  • 台式电脑安装黑苹果系统完美硬件配置
    台式电脑安装黑苹果不敢说100%的完美,但是有些硬件超过99%兼容还是没问题的。像台式电脑只要CPU,主板,声卡,显卡,网卡兼容,就问题不大,睡眠也没问题,不像笔记本那么多硬件,啥触摸板啊,亮度调节啊,等等。其他硬件配置可参考文章:https://www.cnblogs.comCPU:推荐英特尔(Intel)的像Corei3-8......
  • k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储
    目录什么是ThanosThanos的主要功能Thanos的架构组件Thanos部署架构SidecarReceive架构选择开始部署部署架构创建namespacenode-exporter部署kube-state-metrics部署Prometheus+Thanos-Sidecar部署固定节点创建label生成secretMinIO配置etcd证书启动Prometheus+Th......
  • 关于我卖的苹果~
    尽快发货❗......
  • 无缝对接,高效协同:能源电力行业的文件摆渡方案新鲜出炉!
    在能源电力行业,涉及大量敏感信息和重要数据需要得到严格保护,比如电力生产与供应链数据、电网运行与维护数据、用户信息与用电数据、研发与创新数据等。随着企业的不断发展,企业数字化转型的逐渐深入,需要重点关注数据安全。因此大部分能源电力企业会将网络划分成内网和外网,同时辅助......
  • Nvidia超越苹果,成为全球市值最高的公司
    Nvidia(辉达/英伟达)在周五的交易中成功超越苹果,成为全球市值最高的公司。这一成就主要得益于市场对其专门为人工智能(AI)设计的芯片的强劲需求,推动了Nvidia股价创下新高。 市值之争根据LSEG的数据,Nvidia的市值一度达到了3.53万亿美元,略微高于苹果的3.52万亿美元。虽然Nvidia当......
  • 利用API接口实现旺店通和金蝶系统的无缝数据对接
    旺店通销售出库对接金蝶销售订单(线下)的技术实现在企业日常运营中,数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例:如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据无缝对接到金蝶云星空系统。我们将详细探讨这一过程中涉及的技术要点和解决方......
  • Mac新品蓄势待发!苹果3款产品即将停产
    10月28日消息,苹果将在本周发布M4Mac系列新品,包括MacBookPro、iMac和Macmini,随着新品的到来,苹果部分设备将停产下架,包括M3MacBookPro、M2Macmini和M3iMac。M3MacBookPro预计苹果将推出配备M4、M4Pro和M4Max芯片的全新16英寸、14英寸MacBookPro。除了芯片升级之外,......
  • 苹果和安卓在系统更新政策上有哪些不同_1
    苹果(iOS)和安卓(Android)在系统更新政策上存在显著差异,这些差异对用户体验、安全性和设备寿命产生重要影响。苹果提供定期且统一的更新,覆盖所有支持的设备,确保安全性和功能的一致性。苹果和安卓在以下方面的差异:1.更新发布的一致性;2.更新的控制和自定义;3.安全更新和漏洞修复;4.操作系......
  • 微信软件苹果版分身、vx 多开、wx 双开,适用于 ios 系统,满足朋友圈微商信息转发跟圈需
    苹果手机如何双开微信号一键式多开地址:优软轻创-导航页|VLink你是否也遇到过需要同时管理两个微信号的烦恼?无论是工作与个人生活的分开,还是不同社交圈子的需求,苹果手机现在也能轻松实现微信双开啦!今天就来教大家几种实用的方法,让你的苹果手机秒变“双微信”神器!方法一......
  • 怎样使用ThinkPHP6进行支付宝和微信支付操作
    ​本文将详细讲解如何在ThinkPHP6框架中实现支付宝和微信的支付功能:1.准备基础环境和工具;2.集成支付宝SDK;3.集成微信支付SDK;4.配置支付参数;5.处理支付回调。让您轻松为网站或应用集成流行的支付方式,为用户提供便捷的支付体验。1.准备基础环境和工具在开始之前,确保你已经......