zoukankan      html  css  js  c++  java
  • ios 苹果内购订单验证 --- php实现

    验证函数:

    function appleVerify($receipt_data,$orderId = 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环境的验证服务
         * $receipt_data 苹果返回的支付凭证
         * 正式 : https://buy.itunes.apple.com/verifyReceipt
         * 沙箱 : https://sandbox.itunes.apple.com/verifyReceipt
         */
    
        $env = App::environment();
        if($env == 'online'){
         //线上环境
    $url = 'https://buy.itunes.apple.com/verifyReceipt'; }else{
         //沙盒环境
    $url = 'https://sandbox.itunes.apple.com/verifyReceipt'; } $num = 0; while (1){ $num ++; $response = Curl::to($url) ->withData(array('receipt-data' => $receipt_data)) ->asJson(true) ->post(); if($response['status'] != 21005 || $num >= 3){ break; } } // $response = json_decode($response,true); // $data['status']==0 成功 // $data['receipt']['in_app'][0]['transaction_id'] 苹果订单号 // $data['receipt']['in_app'][0]['product_id']; 商品价格 // $data['receipt']['in_app'][0]['purchase_date_ms'] $status = 0; $purchaseTime = 0; if ($response['status'] == 0) { $status = 1; try{ $inapps = $response['receipt']['in_app']; $purchaseTime = $inapps[0]['purchase_date_ms']; if(!empty($orderId)){ foreach ($inapps as $item){ if($orderId == $item['transaction_id']){ $purchaseTime = $item['purchase_date_ms']; break; } } } }catch (Exception $e){ return ['status'=>0,'purcaseTime' => 0]; } } return ['status'=>$status,'purcaseTime' => $purchaseTime]; }

    参数说明:

    //$receipt_data : ios购买时苹果服务器返回的订单信息
    //$orderId : 订单号,验证订单是返回的内购订单数据可能会有多条($response['receipt']['in_app']有多条数据),所以需要遍历每条记录,找到跟订单ID一样的那一条数据的购买时间。
    $receipt_data="MIIbWQYJKoZIhvcNAQcCoIIbSjCCG0YCAQExCzAJBgUrDgMCGgUA......";
    $orderId="1000000461350339";

    返回数据:验证订单获取的数据  $response:(其中in_app有多个)。

    {
      "receipt": {
        "receipt_type": "Production",
        "adam_id": 127345,
        "app_item_id": 12732445,
        "bundle_id": "com.frd.cros",
        "application_version": "62",
        "download_id": 6703453,
        "version_external_identifier": 829054,
        "receipt_creation_date": "2019-03-29 02:03:00 Etc/GMT",
        "receipt_creation_date_ms": "1553820000",
        "receipt_creation_date_pst": "2019-03-28 19:03:00 America/Los_Angeles",
        "request_date": "2019-04-03 07:04:10 Etc/GMT",
        "request_date_ms": "1554275050780",
        "request_date_pst": "2019-04-03 00:04:10 America/Los_Angeles",
        "original_purchase_date": "2017-10-27 19:28:27 Etc/GMT",
        "original_purchase_date_ms": "1509132507000",
        "original_purchase_date_pst": "2017-10-27 12:28:27 America/Los_Angeles",
        "original_application_version": "3",
        "in_app": [
          {
            "quantity": "1",
            "product_id": "com.wordguess.go.in2",
            "transaction_id": "270004425012",
            "original_transaction_id": "270000425012",
            "purchase_date": "2019-03-29 02:02:59 Etc/GMT",
            "purchase_date_ms": "1553879000",
            "purchase_date_pst": "2019-03-28 19:02:59 America/Los_Angeles",
            "original_purchase_date": "2019-03-29 02:02:59 Etc/GMT",
            "original_purchase_date_ms": "1553824979000",
            "original_purchase_date_pst": "2019-03-28 19:02:59 America/Los_Angeles",
            "is_trial_period": "false"
          },
          {
            "quantity": "1",
            "product_id": "com.fil.removeads10",
            "transaction_id": "2700005471",
            "original_transaction_id": "27005471",
            "purchase_date": "2017-11-16 16:44:08 Etc/GMT",
            "purchase_date_ms": "1510850648000",
            "purchase_date_pst": "2017-11-16 08:44:08 America/Los_Angeles",
            "original_purchase_date": "2017-11-16 16:44:08 Etc/GMT",
            "original_purchase_date_ms": "1510850648000",
            "original_purchase_date_pst": "2017-11-16 08:44:08 America/Los_Angeles",
            "is_trial_period": "false"
          }
        ]
      },
      "status": 0,
      "environment": "Production"
    }
  • 相关阅读:
    Elasticsearch 安全功能现免费提供(从 6.8.0 和 7.1.0 版本开始)
    redis5.0.0安装
    java归并排序
    java Shell排序
    java折半插入排序
    java插入排序
    java快速排序
    Android onSaveInstanceState()
    Android Intent传递数据
    Android Intent的花样启动
  • 原文地址:https://www.cnblogs.com/cj8988/p/10648932.html
Copyright © 2011-2022 走看看