验证Paypal适应性付款

时间:2014-02-09 23:50:16

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

我一直在敲我的脑袋:

我正在编写一款可以接收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。我已将userId替换为API Usernamepassword中的值,其值为API Password(显然signature的值为)。 payKey我从我必须创建的应用proof_of_paymentappId获取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" {{1}}。这与我创建的here不同。 这是对的吗?

修改:我的请求现在如下所示:(省略值的某些部分)

{{1}}

毕竟,PayPal很高兴告诉我:

  

responseEnvelope.timestamp = 2014-02-09T15%3A37%3A37.559-08%3A00&安培; responseEnvelope.ack =失败&安培; responseEnvelope.correlationId = 33628be038bc5&安培; responseEnvelope.build = 9641252&安培;错误(0)= .errorId&520003安培;错误(0)。域= PLATFORM&安培;错误(0).subdomain =应用&安培;错误(0).severity =错误&安培;错误(0).category =应用&安培;错误(0).message =认证+失败+ API +凭证+为+不正确。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

PayKey和App ID是不同的东西。应用程序ID是您申请自适应支付应用程序并获得批准时获得的。它将与您的API Isername,API密码和API签名一起发送到标头中。您在提供的样本中甚至有一个占位符。

PayKey是您在发出付款请求后获得的密钥。这有点像交易ID。它通常只是在响应中返回的内容,但是如果您正在调用ExecutePayment,例如,您将其包含在请求中...但是作为PayKey参数...而不是app id。

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