2014-02-09 129 views
0

我一直在砸我的頭:驗證貝寶的自適應付款

我正在寫一個Android應用程序,將收到PayPal付款。所以我使用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" 

貝寶page說我可以找到userIdpasswordsignaturehere,而我只看到一個API Username,一個API Passwordsignature。我用API Usernamepassword中的值替換了userId,其值爲API Password(並且值明顯爲signature)。 payKey我從proof_of_paymentappId從我必須創建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" 

這一切後,貝寶很高興地告訴我:

responseEnvelope。 timestamp = 2014-02-09T15%3A37%3A37.559-08%3A00 & responseEnvelope.ack = Failure & responseEnvelope.correlationId = 33628be038bc5 & responseEnvelope.build = 9641252 &錯誤(0)= .errorId 520003 &錯誤(0)。域= PLATFORM &錯誤(0)= .subdomain應用&錯誤(0).severity =錯誤&錯誤(0)= .category應用&錯誤(0) .message = +認證失敗。+ API +證書+ +是不正確。

我只是無法得到驗證該支付所需的信息。 我做錯了什麼?

回答

1

我拉了你的錯誤日誌,你沒有使用正確的API憑證。看起來您正在使用您的真實帳戶憑據,因爲您使用的API用戶名並未出現在沙盒中。您應該使用的API憑據來自您在Android SDK中用作接收器的沙箱帳戶。這很可能是-facilitator電子郵件地址。您可以通過以下步驟找到該帳戶的API憑據:

  1. 登錄developer.paypal.com
  2. 點擊應用程序選項卡
  3. 點擊沙盒帳戶左側菜單中的
  4. 點擊三角形擴大帳戶爲-facilitator電子郵件地址
  5. 點擊個人資料鏈接
  6. 部分選擇API憑證標籤
+0

謝謝你謝謝你!這解決了我的問題。儘管我認爲PayPal指南對於這件小事有點誤導。 – edpaez

0

PayKey和App ID是不同的東西。應用程序ID是您在申請自適應付款應用程序並獲得批准時獲得的。它會隨着您的API Isername,API密碼和API簽名一起發送到標題中。你在你提供的示例中甚至有一個佔位符。

PayKey將是您在完成付款請求後取回的鑰匙。這有點像一個交易ID。它通常只是返回響應的內容,但是如果您正在調用ExecutePayment,則可以將其包含在請求中......但是作爲PayKey參數...而不是應用程序標識。

您所得到的錯誤僅僅意味着您的API un/pw/sig值(s)不正確。在很多情況下,這隻意味着您要將沙盒憑證發送到現場PayPal端點或visa-verse。仔細檢查一下,然後仔細檢查實際值本身。另外,請確保獲取包含在標題中的應用程序ID而不是請求主體。

+0

嗨!感謝您的幫助。我想你誤解了我的問題的一部分。我已經編輯了一點,以便更清楚。我也很確定我沒有搞砸Sanbox/Live值 – edpaez

+0

我注意到的一件事是它使用JSON,但是您的請求標頭具有NV作爲數據格式。需要將其更改爲JSON。這可能是因爲他們的系統期待着一個NVP字符串,所以它正在尋找USER = whatever和PWD = whatever等,但它沒有得到,因此它將它們視爲空白,並且認證失敗。 –

+0

實際上,如果您使用NV作爲請求數據格式,則會出現'580001無效請求:{0}'(驗證有效後)。事實證明,你是對的,我沒有使用正確的憑證。沙盒憑證在這裏。謝謝! https://developer.paypal.com/webapps/developer/applications/accounts – edpaez