【问题标题】:Retrieving payment data google-play in-app and PayPal mobile checkout from a server从服务器检索付款数据 google-play 应用内和 PayPal 移动结帐
【发布时间】:2013-12-11 00:03:25
【问题描述】:

我正在调用服务器来交付数字产品,我想让服务器检查付款是否完成。我正在通过 Android 应用使用应用内结算和 PayPal 的移动结帐。

他们得到 RESULT_OK,然后我正在调用服务器,但我希望服务器验证付款是否完成。

我找到了一些文档,但不清楚我应该使用什么。

对于 google play in-app 我应该可以查看这篇文章:

www.googleapis.com/androidpublisher/v1.1/applications/{packageName}/inapp/{productId}/purchases/{token}

我找不到 productId 是什么,但我猜它是我要发送的 SKU,我从哪里获得令牌?

对于 PayPal,我发现:

GET https://api.paypal.com/v1/payments/sale/{id}

这样说清楚了一点,但是不知道怎么转成PHP:https://quar.me/paypal/rest/_sales_look-up-a-sale.html

但是文档中的id 看起来与我在应用程序中的有很大不同并且无法正常工作。它什么也没返回,我的 ID 看起来像这个 AP-8BH89990X7137743X:

{
  "name": "INVALID_RESOURCE_ID",
  "message": "The requested resource ID was not found",
  "information_link": "https://developer.paypal.com/webapps/developer/docs/api/#INVALID_RESOURCE_ID",
  "debug_id": "fec9d138aa55d"
}

越来越接近 PayPal,我仍然不确定如何将其转换为 PHP,以及在我的服务器使用此表单时如何处理证书。根据使用 PayPal 帐户或信用卡的情况,您似乎应该使用不同的验证,我怎么知道用户使用了哪种方法?:

curl -s --insecure
-H "X-PAYPAL-SECURITY-USERID: api_username"
-H "X-PAYPAL-SECURITY-PASSWORD: api_password"
-H "X-PAYPAL-SECURITY-SIGNATURE: api_signature"
-H "X-PAYPAL-REQUEST-DATA-FORMAT: NV"
-H "X-PAYPAL-RESPONSE-DATA-FORMAT: NV"
-H "X-PAYPAL-APPLICATION-ID: app_id"
https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails  -d
"payKey=AP-3TY011106S4428730
&requestEnvelope.errorLanguage=en_US"

一些示例代码对我有很大帮助,我正在使用 PHP。

【问题讨论】:

    标签: php android paypal in-app-purchase


    【解决方案1】:

    您可以使用以下功能:

    function verify_play($signed_data, $signature) 
    {
      global $public_key_base64;
      $pkey =  "-----BEGIN PUBLIC KEY-----\n".
        chunk_split($public_key_base64, 64,"\n").
        '-----END PUBLIC KEY-----';   
      //using PHP to create an RSA key
      $pkey = openssl_get_publickey($pkey);
      //$signature should be in binary format, but it comes as BASE64. 
      //So, I'll convert it.
      $signature = base64_decode($signature);   
      //using PHP's native support to verify the signature
      $result = openssl_verify(
          $signed_data,
          $signature,
          $pkey,
          OPENSSL_ALGO_SHA1);
    
      if (0 === $result) 
      {
        return false;
      }
      else if (1 !== $result)
      {
        return false;
      }
      else 
      {
        return true;
      }
    } ;
    
    function verify_paypal($payKey, $appID)
    {
      global $payPalUser_Id, $payPalPassword, $payPalSig;
    $headerArray = array(
    'X-PAYPAL-SECURITY-USERID:'.$payPalUser_Id,
    'X-PAYPAL-SECURITY-PASSWORD:'.$payPalPassword,
    'X-PAYPAL-SECURITY-SIGNATURE:'.$payPalSig,
    'X-PAYPAL-REQUEST-DATA-FORMAT:JSON',
    'X-PAYPAL-RESPONSE-DATA-FORMAT:XML',
    'X-PAYPAL-APPLICATION-ID:'.$appID
    );
    
    
    $url="https://svcs.paypal.com/AdaptivePayments/PaymentDetails?payKey={$payKey}&requestEnvelope.errorLanguage=en_US";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
    $adaptiveResponse = curl_exec($ch);
    curl_close($ch);
    
    echo $adaptiveResponse;
    
    //check following and return true or false:
    //Is completed ("status": "COMPLETED").
    //Is the expected currency ("currencyCode": "USD").
    //Has a paymentInfo within paymentInfoList that:
    //Has a receiver with amount and email as expected.
    //Is complete ("senderTransactionStatus": "COMPLETED").
    };
    

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2020-12-17
      • 2023-03-06
      • 2013-10-21
      • 2014-12-03
      • 2012-04-01
      相关资源
      最近更新 更多