我一直在敲我的脑袋:
我正在编写一款可以接收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
password
和signature
here,而我只找到API Username
, API Password
和signature
。我已将userId替换为API Username
和password
中的值,其值为API Password
(显然signature
的值为)。 payKey
我从我必须创建的应用proof_of_payment
和appId
获取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 +凭证+为+不正确。
我无法获得验证此付款所需的信息。 我做错了什么?
答案 0 :(得分:1)
我为您的错误提取了日志,但您没有使用正确的API凭据。您似乎正在使用Live帐户凭据,因为您使用的API用户名在沙盒中不存在。您应该使用的API凭据来自您在Android SDK中用作接收者的沙盒帐户。这很可能是-facilitator电子邮件地址。您可以通过以下步骤找到该帐户的API凭据:
答案 1 :(得分:0)
PayKey和App ID是不同的东西。应用程序ID是您申请自适应支付应用程序并获得批准时获得的。它将与您的API Isername,API密码和API签名一起发送到标头中。您在提供的样本中甚至有一个占位符。
PayKey是您在发出付款请求后获得的密钥。这有点像交易ID。它通常只是在响应中返回的内容,但是如果您正在调用ExecutePayment,例如,您将其包含在请求中...但是作为PayKey参数...而不是app id。
您获得的错误仅表示您的API un / pw / sig值不正确。在许多情况下,这只是意味着您将沙盒凭证发送到实时PayPal端点或签证。仔细检查,并仔细检查实际值本身。此外,请确保获取标头中包含的App ID而不是请求正文。