【问题标题】:Verify Paypal Adaptative Payment验证 Paypal 自适应支付
【发布时间】:2014-03-07 04:02:35
【问题描述】:

我一直在敲我的头:

我正在编写一个可以接收 PayPal 付款的 Android 应用。所以我使用this

您会在 Android 应用程序的 Java 代码中找到:

intent.putExtra(PaymentActivity.EXTRA_PAYPAL_ENVIRONMENT, PaymentActivity.ENVIRONMENT_NO_NETWORK);
intent.putExtra(PaymentActivity.EXTRA_CLIENT_ID, "LARGE STRING AKA Client ID");
intent.putExtra(PaymentActivity.EXTRA_PAYER_ID, "The email of the paying girl");
intent.putExtra(PaymentActivity.EXTRA_RECEIVER_EMAIL, "The email I registered at PayPal");
intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);

onActivityResult 我得到这个 JSON:

{
  "payment": {
    "short_description": "Donation to Saving The Amazon",
    "amount": "5",
    "currency_code": "USD"
  },
  "client": {
    "platform": "Android",
    "paypal_sdk_version": "1.2.5",
    "product_name": "PayPal Android SDK; ",
    "environment": "mock"
  },
  "proof_of_payment": {
    "adaptive_payment": {
      "timestamp": "2014-02-09T22:44:45+0000",
      "payment_exec_status": "COMPLETED",
      "app_id": "_FAKE_APPLICATION_ID_",
      "pay_key": "AP-70M68096ML426802W"
    }
  }
}

现在,我需要验证付款。我应该(从我的服务器)发出如下所示的请求:

curl https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails \
 -H "X-PAYPAL-SECURITY-USERID: {userId}" \
 -H "X-PAYPAL-SECURITY-PASSWORD: {password}" \
 -H "X-PAYPAL-SECURITY-SIGNATURE: {signature}" \
 -H "X-PAYPAL-APPLICATION-ID: {appId}" \
 -H "X-PAYPAL-REQUEST-DATA-FORMAT: NV" \
 -H "X-PAYPAL-RESPONSE-DATA-FORMAT: NV" \
 -d "payKey={payKey}
     &requestEnvelope.errorLanguage=en_US"

PayPal page 说我可以找到 userId passwordsignature here 而我只找到 API UsernameAPI Passwordsignature。我用API Username 中的值替换了userId,用API Password 中的值替换了password(显然signature 用值替换了)。 payKey 我从 proof_of_payment 中获取,appId 来自我必须创建的应用程序 here。这与我创建的 here 不同。 是这样吗?

编辑:我的请求现在看起来像这样:(省略部分值)

curl https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails \
 -H "X-PAYPAL-SECURITY-USERID: info_api1.test.com" \
 -H "X-PAYPAL-SECURITY-PASSWORD: XXNXXXA6XXX3PGXX" \
 -H "X-PAYPAL-SECURITY-SIGNATURE: XXXXXvXXXXXqXXXXXm1XXXXXg3fOAuds4mc3XXXXXXXXJdy4XXXXXXqX" \
 -H "X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T" \
 -H "X-PAYPAL-REQUEST-DATA-FORMAT: NV" \
 -H "X-PAYPAL-RESPONSE-DATA-FORMAT: NV" \
 -d "payKey=AP-70M68096ML426802W
     &requestEnvelope.errorLanguage=en_US"

在这一切之后,PayPal 很高兴地告诉我:

responseEnvelope.timestamp=2014-02-09T15%3A37%3A37.559-08%3A00&responseEnvelope.ack=Failure&responseEnvelope.correlationId=33628be038bc5&responseEnvelope.build=9641252&error(0).errorId=520003&error(0).domain=PLA ).subdomain=Application&error(0).severity=Error&error(0).category=Application&error(0).message=Authentication+failed.+API+credentials+are+incorrect.

我无法获得验证这笔付款所需的信息。 我做错了什么?

【问题讨论】:

    标签: android paypal paypal-sandbox paypal-adaptive-payments


    【解决方案1】:

    我提取了您的错误日志,但您没有使用正确的 API 凭据。您似乎正在使用您的真实帐户凭据,因为您使用的 API 用户名不存在于沙盒中。您应该使用的 API 凭据来自您在 Android SDK 中用作接收方的沙盒帐户。这很可能是 -facilitator 电子邮件地址。您可以通过以下步骤找到该帐户的 API 凭据:

    1. 登录 developer.paypal.com
    2. 点击应用标签
    3. 点击左侧菜单中的沙盒帐户
    4. 单击三角形展开帐户部分以获取 - 促进者电子邮件地址
    5. 点击个人资料链接
    6. 选择 API 凭据选项卡

    【讨论】:

    • 谢谢谢谢!这解决了我的问题。虽然我认为 PayPal 指南对这件小事有点误导。
    【解决方案2】:

    PayKey 和 App ID 是不同的东西。 App ID 是您在申请 Adaptive Payments 应用程序并获得批准时获得的。它与您的 API 用户名、API 密码和 API 签名一起在标头中发送。在您提供的示例中,您甚至有一个占位符。

    PayKey 将是您发出支付请求后取回的密钥。这有点像交易ID。它通常只是在响应中返回的东西,但是如果您正在调用 ExecutePayment,例如,您会将其包含在请求中……但作为 PayKey 参数……而不是应用程序 ID。

    您收到的错误仅表示您的 API un/pw/sig 值不正确。在许多情况下,这仅意味着您将沙盒凭据发送到实时 PayPal 端点或 Visa-verse。仔细检查,并仔细检查实际值本身。另外,请确保获取标头中包含的 App ID 而不是请求正文。

    【讨论】:

    • 嗨!谢谢你帮助我。我认为您误读了我的问题的一部分。我已经对其进行了一些编辑以使其更清晰。我也很确定我没有弄乱 Sanbox/Live 值
    • 我注意到的一件事是,您使用的是 JSON,但您的请求标头具有 NV 作为数据格式。需要将其更改为 JSON。可能是他们的系统需要一个 NVP 字符串,所以它正在寻找 USER=whatever&PWD=whatever 等,但它没有得到它,所以它将它们视为空白并且身份验证失败。
    • 实际上,如果您使用 NV 作为请求数据格式,您会得到一个580001 Invalid request: {0}(验证工作后)。事实证明你是对的,我没有使用正确的凭据。沙盒凭据在这里。谢谢! developer.paypal.com/webapps/developer/applications/accounts
    猜你喜欢
    • 2015-07-19
    • 2021-08-04
    • 2014-10-13
    • 2013-11-10
    • 2013-11-07
    • 2014-10-11
    • 2020-12-14
    • 2014-01-23
    • 2012-03-21
    相关资源
    最近更新 更多